2017-01-10 6 views
1

をリフレッシュこんにちは、私はに係る作業グーグルのOAuth 2明示的な流れがあります。GoogleのiOSのOAuthの2暗黙の流れ、手動でトークン

https://developers.google.com/identity/protocols/OAuth2WebServer

を私も暗黙の流れがGIDSignInとiOSの上で作業している、特にI GIDSignInDelegate::sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)コールバックを取得し、user.authentication.accessTokenuser.authentication.refreshTokenにアクセスしてください。

私はプライベートアプリケーションサーバーにそのrefreshTokenを返すようにしています。主に、フロントエンドの開発者がrawアプリケーションを扱うよりもSDKにサインインするほうが簡単だからです。 URLリクエスト)。

しかし、私は、バックエンドに新しいアクセストークンを取得するために、そのリフレッシュトークンを使用しようとすると:

curl --request POST \ 
    --url https://www.googleapis.com/oauth2/v4/token \ 
    --header 'cache-control: no-cache' \ 
    --header 'content-type: application/x-www-form-urlencoded' \ 
    --data 'client_id={client_id}&client_secret={client_secret}&refresh_token={refresh_token}&grant_type=refresh_token' 

それが返されます。

{ "error": "invalid_grant", "error_description": "Bad Request" }

私は問題があることだと思います私のサーバーにはクライアントIDとシークレットがありますが、iOSにはクライアントIDしかありません。 iOSクライアントIDに対応する秘密(キーとも呼ばれることもあります)がなければ、バックエンドのトークンをリフレッシュする方法はありません。私は、GoogleがサーバーのクライアントIDとiOSのクライアントIDの両方が同じアプリに登録されていることを検出し、サーバーがその資格情報でトークンを更新できるようにすることを期待していましたが、うまくいきませんでした。

私がで "APIキー" と "OAuth 2.0のクライアントID" セクションの両方を見てきました:

https://console.developers.google.com/apis/credentials

しかし、途方に暮れています。

iOS SDKで取得したトークンをリフレッシュするためのcurlコマンドを知っている人はいますか?

これは簡単ではありませんか?

ありがとうございます!これを読んで、誰のために

答えて

0

、私はそれが働いてしまった:私は(モバイル上での暗黙的な流れを使用するときに1がないとして)client_secretを通過せずにリフレッシュトークンエンドポイントを呼び出してみました気まぐれで

を。ここにカールがあります:

curl --request POST \ 
    --url https://www.googleapis.com/oauth2/v4/token \ 
    --header 'content-type: application/x-www-form-urlencoded' \ 
    --data 'client_id={client_id}&refresh_token={refresh_token}&grant_type=refresh_token' 

これは文書化されていないようです。私が見つけた最も近い例はhttps://developers.google.com/identity/protocols/OAuth2InstalledApp#refreshですが、それはclient_secret=your_client_secret&と表示されています。暗黙的なフローでは、フロントエンドWebとモバイルアプリは通常クライアントの秘密を使用しません。

私は何もしていないので、私の答えをupvoteしないでください。 OAuthは、一般的にはうまく文書化されていません。また、基礎となるURLリクエストやカールの例がないプラットフォームSDKに関するコードスニペットも含まれています。 SDKは多くの場合、不透明/クローズドソースなので、何が起こっているかを見るためにtcpdumpやパケットスニッフィングに落とす必要があります。私はデューデリジェンスをしなかった、私はちょうど幸運を得た。

フィードバックはGoogleに送信されましたが、この問題があなたに影響する場合は、Gmailのギアをクリックして「フィードバックを送信」をクリックして、ドキュメントの更新をより迅速に行うことができます。

0

は、このリンクを参照してください:参照から https://developers.google.com/identity/sign-in/ios/offline-access

、ご使用のサーバーおよびiOSアプリの使用を確認してください

  1. トークンのアクセスを更新するようにサーバーができるようにする以下の2stepsをしなければなりません同じプロジェクトの資格情報、1つのブラウザキーと1つのiOSキー
  2. この行を追加:[GIDSignIn sharedInstance].serverClientID = your_server_client_id
関連する問題