这是我使用的授权标头:
Authorization = "OAuth oauth_consumer_key=\"2D9rLD8Lu23hrchrh4VMBkQ6AZKHYi2yY2oeuoeutcFMdAs\", oauth_nonce=\"-486353546\", oauth_signature="x3NdGnJmBTUAICBRE9C44N8mFd4%3D", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"137663828056\", oauth_version=\"1.0\", x_auth_mode=\"reverse_auth\"";
以下是我使用的基本字符串:
https://api.twitter.com/oauth/access_token
以下是我的推特文档:
步骤1:获取特殊请求令牌
首先,您使用应用程序的使用者密钥向Twitter请求令牌URLhttps://api.twitter.com/oauth/request_token发出HTTPS请求。除了传统的oauth_*签名参数之外,您还必须包含设置为reverse_auth值的x_auth_mode。
例如,考虑使用令牌秘密ydC2yUbFaScbSlykO0PmrMjXFeLraSi3Q2HfTOlGxQM签名的具有以下值的请求:
这里使用的代币仅用于演示目的,不适用于您。
oauth\u consumer\u key JP3PyvG67rXRsnayOJOcQ oauth\u nonce 1B7D865D-9E15-4ADD-8165-EF90D7A7D3D2 oauth\u signature\u方法HMAC-SHA1 oauth\u时间戳1322697052 oauth\u版本1.0 x\u auth\u mode reverse\u auth这些参数应生成一个签名基字符串,如下所示:
帖子
(为清晰起见,添加了换行):
OAuthoauth_nonce="xq2maKtilFhVTC1MSxVC4cQIJLd53O6w97YmrdOGSk8",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1322697052",oauth_consumer_key="JP3PyvG67rXRsnayOJOcQ",oauth_token="5mgkU82W0PTA0DLgSIA5vFK6c08i8dXzrbLnX06vl38",oauth_signature="aOM/wW2kAowAeHBRvw7faH245p0=",oauth_version="1.0"
编辑:我仍然得到401英镑。我使用了以下代码来生成oauth\u签名,因此现在我的授权标头如下所示:oauth oauth\u timestamp=“1376639141”,oauth\u nonce=“BB2D2634F3-99A5-4B64-8CB34E-2314CE9E4FD7”,oauth\u version=“1.0”,oauth\u consumer\u key=“MRCD8LUSNKJKFACHHYI2YY2QWH5TCFMDAS”,oauth\u签名方法=“HMAC-SHA1”,oauth\u签名=“MOER8H7XZLUAH”DOAAAFZPV6N4NOEU=“
NSString *OAuthorizationHeader(NSURL *url, NSString *method, NSData *body, NSString *_oAuthConsumerKey, NSString *_oAuthConsumerSecret, NSString *_oAuthToken, NSString *_oAuthTokenSecret)
{
NSString *_oAuthNonce = [NSString ab_GUID];
NSString *_oAuthTimestamp = [NSString stringWithFormat:@"%d", (int)[[NSDate date] timeIntervalSince1970]];
NSString *_oAuthSignatureMethod = @"HMAC-SHA1";
NSString *_oAuthVersion = @"1.0";
NSMutableDictionary *oAuthAuthorizationParameters = [NSMutableDictionary dictionary];
oAuthAuthorizationParameters[@"oauth_nonce"] = _oAuthNonce;
oAuthAuthorizationParameters[@"oauth_timestamp"] = _oAuthTimestamp;
oAuthAuthorizationParameters[@"oauth_signature_method"] = _oAuthSignatureMethod;
oAuthAuthorizationParameters[@"oauth_version"] = _oAuthVersion;
oAuthAuthorizationParameters[@"oauth_consumer_key"] = _oAuthConsumerKey;
if(_oAuthToken)
oAuthAuthorizationParameters[@"oauth_token"] = _oAuthToken;
// get query and body parameters
NSDictionary *additionalQueryParameters = [NSURL ab_parseURLQueryString:[url query]];
NSDictionary *additionalBodyParameters = nil;
if(body) {
NSString *string = [[[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding] autorelease];
if(string) {
additionalBodyParameters = [NSURL ab_parseURLQueryString:string];
}
}
// combine all parameters
NSMutableDictionary *parameters = [[oAuthAuthorizationParameters mutableCopy] autorelease];
if(additionalQueryParameters) [parameters addEntriesFromDictionary:additionalQueryParameters];
if(additionalBodyParameters) [parameters addEntriesFromDictionary:additionalBodyParameters];
// -> UTF-8 -> RFC3986
NSMutableDictionary *encodedParameters = [NSMutableDictionary dictionary];
for(NSString *key in parameters) {
NSString *value = parameters[key];
encodedParameters[[key ab_RFC3986EncodedString]] = [value ab_RFC3986EncodedString];
}
NSArray *sortedKeys = [[encodedParameters allKeys] sortedArrayUsingFunction:SortParameter context:encodedParameters];
NSMutableArray *parameterArray = [NSMutableArray array];
for(NSString *key in sortedKeys) {
[parameterArray addObject:[NSString stringWithFormat:@"%@=%@", key, encodedParameters[key]]];
}
NSString *normalizedParameterString = [parameterArray componentsJoinedByString:@"&"];
NSString *normalizedURLString = [NSString stringWithFormat:@"%@://%@%@", [url scheme], [url host], [url path]];
NSString *signatureBaseString = [NSString stringWithFormat:@"%@&%@&%@",
[method ab_RFC3986EncodedString],
[normalizedURLString ab_RFC3986EncodedString],
[normalizedParameterString ab_RFC3986EncodedString]];
NSString *key = [NSString stringWithFormat:@"%@&%@",
[_oAuthConsumerSecret ab_RFC3986EncodedString],
(_oAuthTokenSecret) ? [_oAuthTokenSecret ab_RFC3986EncodedString] : @""];
NSData *signature = HMAC_SHA1(signatureBaseString, key);
NSString *base64Signature = [signature base64EncodedString];
NSMutableDictionary *authorizationHeaderDictionary = [[oAuthAuthorizationParameters mutableCopy] autorelease];
authorizationHeaderDictionary[@"oauth_signature"] = base64Signature;
NSMutableArray *authorizationHeaderItems = [NSMutableArray array];
for(NSString *key in authorizationHeaderDictionary) {
NSString *value = authorizationHeaderDictionary[key];
[authorizationHeaderItems addObject:[NSString stringWithFormat:@"%@=\"%@\"",
[key ab_RFC3986EncodedString],
[value ab_RFC3986EncodedString]]];
}
NSString *authorizationHeaderString = [authorizationHeaderItems componentsJoinedByString:@", "];
authorizationHeaderString = [NSString stringWithFormat:@"OAuth %@", authorizationHeaderString];
return authorizationHeaderString;
}
我传递给此方法的参数是url:https://api.twitter.com/oauth/request_token,
方法:POST,
正文:nil,
oAuthConsumerToken:my key,
OAuthConsumerCret:my secret,
oAuthToken:nil,
oAuthTokenSecret:nil。
编辑我尝试使用这个oauth测试控制台来验证我是否正确生成了oauth签名,但似乎我需要成员的令牌和密码:
您尚未在授权标头中包含oauth\u签名。
问题内容: 在flask中,我使用以下代码段启用HTTP身份验证: 现在,根据我过去使用Flask的经验,如果某人的凭据不正确,我想让他们知道我可以打电话给: 这为你提供了基本的apache 401响应。有谁知道我如何使用上面的代码片段实现这一目标? 谢谢 问题答案: 在Flask中,自定义错误响应确实非常容易。创建一个仅将参数作为HTTP错误状态代码的函数,使其返回flask.Response实
问题内容: 我有一个文件request.js,其中包含axios ajax请求的包装。我正在从多个React组件中调用请求函数,当请求之一失败时,我想刷新令牌并再次重试所有失败的请求。我可以使用拦截器,但是我不知道如何实现它。请帮忙。 request.js 问题答案: 我用以下代码工作 [编辑]它的2019,这是相同的另一个实现。上面的解决方案很棒,但是不能用于多个失败的请求,反过来,它也会调用带
我对Web浏览器的基本身份验证有点困惑。我原以为Web浏览器只会在之前的响应中收到HTTP 401状态后发送授权标头。然而,似乎Chrome在之后的每个请求中都发送授权标头。它包含我曾经输入的数据,以响应我网站上的401,并与每条消息一起发送(根据Chrome和我的Web服务器附带的开发人员工具)。这是预期的行为吗?我应该在我的401中使用一些标头来推断不应该缓存授权内容吗?我目前正在使用WWW-
我正在为我的azure无状态服务fabric应用程序从密钥存储库中获取机密值,并在100s密钥存储库机密中仅有2个密钥存储库机密获得401个依赖项错误(如果我通过connected application insight检查的话)。下面给出的是通过应用程序洞察显示的依赖错误的截图,其中一个密钥存储库的秘密。 这里请求路径是https://mykeyvaultname.vault.azure.net
问题内容: 我正在使用HP ALM版本12.55.113。我正在尝试通过REST- API自动上传测试结果。经过身份验证并尝试读取一个简单的缺陷后,我收到了401未经身份验证的错误。我使用以下示例代码检索有效的LWSSO和QCSession Cookie: 我得到以下控制台输出: 登录:InboundJaxrsResponse {context = ClientResponse {method =
我试图设置2方式ssl身份验证。我的要求是经纪人应该只认证特定的客户。 我的组织有一个CA,它发行pkcs12格式的所有证书。我遵循的步骤如下。 获取代理的证书,并在代理密钥库中配置它 当我运行代理和客户端时,我希望代理验证客户端并建立ssl连接。但是下面的错误被抛出。 当我用只包含CA证书的信任存储文件替换 /etc/pki/java/cacerts代理信任存储时,它工作得很好。但是它将验证任何