gpt4 book ai didi

ios - Twitter oauth/access_token 401 错误

转载 作者:行者123 更新时间:2023-11-29 03:02:47 27 4
gpt4 key购买 nike

我一直在研究使用完整 OAuth 应用程序流程的所有内容,但我遇到了一个问题,即我只收到 401 =“无效或过期的 token ”错误。我已经用文档检查了我的请求,一切看起来都是正确的,但我很困惑。以下是我的请求的详细信息。

URL
https://api.twitter.com/1.1/oauth/access_token

HTTP Method
POST

Headers
Content-Type: application/x-www-form-urlencoded
Authorization: OAuth oauth_consumer_key="CONSUMER_API_KEY", oauth_nonce="B4D43B0C-A348-4EB6-9C0B-8B0F4FE8", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1397724299", oauth_version="1.0", oauth_token="TOKEN_FROM_REQUEST_TOKEN_API", oauth_signature="ulYIzTacwC%2FeGUdoCPYsrFEqg4A%3D"

HTTP Body
oauth_verifier=OAUTH_VERIFIER_FROM_REQUEST_TOKEN_API

我在使用 oauth/request_token API 时没有遇到任何问题,并且我已在 Twitter 的应用程序设置中适当设置了权限。有谁知道这是怎么回事?

感谢大家提供的任何帮助。

-- 更新--

另一件事需要注意的是我正在使用 STTwitter 库来发出请求。它没有内置方法来处理 oauth/authorize 或 oath/authenticate API 方法,因此我使用下面的代码。

// get request token, and present login screen
STTwitterAPI *twitter = [STTwitterAPI twitterAPIWithOAuthConsumerKey:twitterApiKey consumerSecret:twitterApiSecret];
[twitter postTokenRequest:^(NSURL *url, NSString *oauthToken)
{
authWebViewController = [[TWAuthWebViewController alloc] init];
authWebViewController.url = [NSURL URLWithString:[NSString stringWithFormat:@"https://api.twitter.com/oauth/authorize?oauth_token=%@", oauthToken]];

authWebViewController.completion = ^(TWAuthWebViewController *authViewController, NSURL *oauthCallbackURL)
{
// get the request token and verifier from the URL
NSString *oauthToken = [TWLoginBusiness getOAuthTokenFromURL:oauthCallbackURL];
NSString *oauthVerifier = [TWLoginBusiness getOAuthVerifierFromURL:oauthCallbackURL];

// get user data with the oauth token
[twitter postResource:@"oauth/access_token"
baseURLString:@"https://api.twitter.com/1.1"
parameters:@{@"oauth_verifier" : oauthVerifier}
uploadProgressBlock:nil
downloadProgressBlock:nil
successBlock:^(NSDictionary *rateLimits, id response)
{
NSLog(@"Reponse: %@", response);
completion(nil, nil);

} errorBlock:^(NSError *error)
{
NSLog(@"Error: %@", error);
completion(nil, error);
}];
};

presentAuthController(authWebViewController);

} oauthCallback:twitterApiCallback errorBlock:^(NSError *error)
{
completion(nil, error);
}];

最后一点。这里没有列出实际显示Web View Controller 的部分。我想让这里的代码片段集中于实际的 API 方法,而不是 UI 逻辑。请放心,authWebViewController.url.... 之后的行会显示 Web View ,然后在用户在 Twitter 网页上完成身份验证后调用完成 block 。此外,getOauthTokenFromURL 和 getOauthVerifierFromUrl 这两种方法实际上会返回正确的 token 和验证器。 STTwitter 库实际上保存了它自己的 token ,所以这就是为什么它没有手动传递到下面的逻辑中。逻辑生成上面的请求。

谢谢

最佳答案

完整的 OAuth 流程已经在 STTwitter 库中实现。

查看 iOS demo获取通过 Safari 进行基于 Web 的身份验证的工作示例。

您在这里尝试做的是在应用程序内部进行基于 Web 的身份验证。

虽然完全可行,但我没有将此工作流包含在演示项目中,因为它被认为是一种不好的做法。

事实上,OAuth 的意义在于用户不想在您自己的应用程序中输入她的 Twitter 凭据,而是要求 Twitter 发送您的应用程序专用的 OAuth token 。

如果您需要更多关于 STTwitter 的帮助,请告诉我。

关于ios - Twitter oauth/access_token 401 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23128422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com