您好我有根據谷歌的OAuth 2明確的流程工作:谷歌的OAuth 2的iOS隱流,刷新令牌手動
https://developers.google.com/identity/protocols/OAuth2WebServer
我也有隱含的流動iOS上正與GIDSignIn,具體我得到GIDSignInDelegate::sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)
回調,並有權訪問user.authentication.accessToken
和user.authentication.refreshToken
。
我試圖將refreshToken
傳回給我們的私人應用程序服務器,以便它可以代表用戶發出請求(主要是因爲使用SDK登錄比使前端開發人員處理raw 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命令?
或者,這是根本不可能的?
謝謝!