0

私は完全な 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 ライブラリは実際にはそれ自身のトークンを保存するため、以下のロジックに手動で渡されません。ロジックは上記のリクエストを生成します。

ありがとう

4

1 に答える 1

1

完全な OAuth フローは、STTwitter ライブラリに既に実装されています。

Safari を介した Web ベース認証の実例については、iOS デモをご覧ください。

ここでやろうとしているのは、アプリケーション内の Web ベースの認証です。

完全に実行可能ですが、このワークフローは悪い習慣と見なされるため、デモ プロジェクトには含めませんでした。

実際、OAuth のポイントは、ユーザーが自分の Twitter 資格情報を自分のアプリケーションに入力するのではなく、代わりにアプリ専用の OAuth トークンを送信するように Twitter に要求することです。

STTwitter についてさらにサポートが必要な場合はお知らせください。

于 2014-04-17T13:42:48.727 に答える