我现在遇到了一个麻烦,一个访问令牌从谷歌身份服务。
关于这个案子的一些细节。我有完整的堆栈应用程序,基于Spring/Webflux/Hibernate-Reactive的后端和基于React的前端。我正在使用来自服务的谷歌登录功能和这个react库@react-oauth/google.
在成功登录后,我使用接收到的“凭据”进行后端访问。除了我在成功登录后的响应中没有刷新令牌之外,所有操作都与预期的一样。令牌在1小时后过期,必须提示用户再次登录以接收新令牌,这是可怕的!
那么,如何刷新这个令牌,有什么想法吗?
我找不到更多的信息在谷歌方面,这就是为什么我在这里写作。
发布于 2022-12-02 17:10:36
所以我自己找到了解决办法。我将在这里张贴它,希望能帮助其他人谁正在努力解决这个问题。
因此,使用react库@react-oauth/google,我使用了useGoogleLogin钩子。我在函数的options对象中添加了"flow:'auth-code'“。
const login = useGoogleLogin({
onSuccess: codeResponse => console.log(codeResponse),
flow: 'auth-code',
});该函数是通过单击简单按钮触发的。
成功地从用户登录后,我们可以在response对象中找到一个代码属性。我们可以通过调用google将代码转换为访问、刷新和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
!重要!请记住,在访问被撤销之前,刷新是有效的。刷新令牌时,响应中不会出现新的刷新令牌。对于进一步的刷新,您可以使用相同的刷新令牌,即通过exchange接收。
https://stackoverflow.com/questions/74620337
复制相似问题