iOS上的Google OAuth 2隐式流,手动刷新令牌
您好,我有Google OAuth 2显式流,根据: 我还使用GIDSignIn在iOS上运行隐式流,具体地说,我获得了iOS上的Google OAuth 2隐式流,手动刷新令牌,ios,oauth,google-api,refresh,token,Ios,Oauth,Google Api,Refresh,Token,您好,我有Google OAuth 2显式流,根据: 我还使用GIDSignIn在iOS上运行隐式流,具体地说,我获得了GIDSignInDelegate::sign(\uSignin:GIDSignIn!、didsignin-user:GIDGoogleUser!、withError-error:error!)回调,并可以访问user.authentication.accessToken和user.authentication.refreshtToken 我正试图将refreshttoken
GIDSignInDelegate::sign(\uSignin:GIDSignIn!、didsignin-user:GIDGoogleUser!、withError-error:error!)
回调,并可以访问user.authentication.accessToken
和user.authentication.refreshtToken
我正试图将refreshttoken
传递回我们的私有应用服务器,以便它能够代表用户发出请求(主要是因为使用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'
它返回:
{“错误”:“无效的授权”,“错误描述”:“错误的请求”}
我认为问题在于我的服务器有一个客户端id和密码,而iOS只有一个客户端id。如果没有与iOS客户端id对应的密码(有时称为密钥),我就无法刷新后端的令牌。我希望谷歌能够检测到服务器客户端id和iOS客户端id都注册到同一个应用程序,并让服务器用其凭据刷新令牌,但这不起作用
我已经在以下位置查看了“API密钥”和“OAuth 2.0客户端ID”部分:
但是我不知所措
是否有人知道用于刷新通过iOS SDK获取的令牌的curl命令
还是这根本不可能
谢谢 对于任何读到这篇文章的人,我让它工作起来: 一时兴起,我尝试调用刷新令牌端点,但没有传递
client\u 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'
这似乎没有记录在案。我找到的最接近的例子是在,但它显示了client\u secret=your\u client\u secret&
,并且从来没有提到在隐式流中,前端web和移动应用程序通常不使用客户端机密
请不要高估我的答案,因为我什么都没做。OAuth通常没有很好的文档记录,或者包含与没有底层URL请求或curl示例的平台SDK相关的代码片段。SDK通常是不透明/封闭源代码的,因此需要访问tcpdump或数据包嗅探来查看发生了什么。我没有尽职调查,只是运气好而已
我已经向谷歌发送了反馈,但是如果这个问题影响了你,你可以点击Gmail中的gear并“发送反馈”,希望能更快地更新文档。请参考此链接:
根据参考,您必须执行以下2个步骤,以便服务器能够刷新您的访问令牌
[GIDSignIn sharedInstance].serverClientID=您的\u服务器\u客户端\u id