私は完全な OAuth アプリ フローを使用するすべてに取り組んできましたが、401 = 「無効または期限切れのトークン」エラーのみが返されるという問題に直面しています。ドキュメントでリクエストを確認しましたが、すべてが正しいように見え、困惑しています。以下は私のリクエストの詳細です。
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 のアプリ設定で権限を適切に設定しました。これで何が起こっているのか誰にも分かりますか?
皆様のご協力に感謝いたします。
- アップデート -
もう 1 つ注目すべき点は、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 を表示する部分はここには記載していません。ここでのコード スニペットは、UI ロジックではなく、実際の API メソッドに焦点を当てたままにしたかったのです。authWebViewController.url.... の直後の行で Web ビューが表示され、ユーザーが Twitter Web ページで認証を完了した後に完了ブロックが呼び出されることに注意してください。また、getOauthTokenFromURL と getOauthVerifierFromUrl の 2 つのメソッドは、実際には正しいトークンとベリファイアを返します。STTwitter ライブラリは実際にはそれ自身のトークンを保存するため、以下のロジックに手動で渡されません。ロジックは上記のリクエストを生成します。
ありがとう