刷新从Google Identity Services / React App收到的访问令牌



我现在有一个从谷歌身份服务收到的访问令牌的麻烦。

关于这个案例的一些细节。我有一个完整的堆栈应用程序,后端基于Spring/Webflux/Hibernate-Reactive前端基于React. 我使用谷歌身份服务的谷歌登录功能与这个react库@react-oauth/google.

我正在使用收到的"凭据";成功登录后端访问后。除了成功登录后的响应中没有刷新令牌之外,一切都像预期的那样工作。令牌在1小时后到期,必须提示用户再次登录以接收新的令牌,这是可怕的!

那么,如何刷新这个令牌,有什么想法吗?

我在谷歌上找不到更多的信息,这就是为什么我在这里写

所以我自己找到了解决方案。我将把它贴在这里,希望能帮助那些正在与这个问题作斗争的人。

使用react库@react-oauth/google我使用了useGoogleLogin钩。我添加了">flow: 'auth-code'";到函数的options对象

const login = useGoogleLogin({
onSuccess: codeResponse => console.log(codeResponse),
flow: 'auth-code',
});

点击一个简单的按钮就可以触发这个功能。

用户成功登录后,在响应对象中我们可以找到一个代码财产。我们可以交换代码通过调用Google oauth2 api获得访问、刷新和id令牌:

curl --location --request POST 'https://oauth2.googleapis.com/token' 
--header 'Content-Type: application/x-www-form-urlencoded' 
--data-urlencode 'client_id=your_client_id' 
--data-urlencode 'client_secret=your_client_secret' 
--data-urlencode 'code=recieved_code_after_login' 
--data-urlencode 'grant_type=authorization_code' 
--data-urlencode 'redirect_uri=one of your redirect uri's listed in your 
credential'

请求访问成功后,收到刷新和id令牌。

刷新令牌也这么简单:

curl --location --request POST 'https://oauth2.googleapis.com/token' 
--header 'Content-Type: application/x-www-form-urlencoded' 
--data-urlencode 'client_id=your_client_id' 
--data-urlencode 'client_secret=your_client_secret' 
--data-urlencode 'grant_type=refresh_token' 
--data-urlencode 'refresh_token=received_refresh_token'

这里是原始的Google文档:https://developers.google.com/identity/protocols/oauth2/web-server#httprest_3

,重要!请记住,在访问被撤销之前刷新是有效的。刷新令牌时,响应中不会出现新的刷新令牌。对于进一步的刷新,您可以使用相同的刷新令牌,通过交换接收。

相关内容

  • 没有找到相关文章

最新更新