【google auth2】如何持久化获取refreshToken(刷新令牌)

我们知道,google auth2的用户授权登录分两种

Google OAuth2提供了两种授权模式:
授权码模式(Authorization Code Grant)和隐式授权模式(Implicit Grant)。

  • 授权码模式:
    授权码模式通过用户授权码的方式获取Access Token,在安全性上比隐式授权模式更可靠。该模式主要的流程是先重定向到Google OAuth2的授权服务器,用户登录并授权,授权服务器将授权码返回给Web应用,Web应用使用授权码向Google OAuth2服务器交换Access Token。

  • 隐式授权模式:
    隐式授权模式中直接通过redirect_uri返回Access Token,减少了授权过程的复杂度和流程,但相应的安全性较授权码模式差。该模式主要的流程是先重定向到Google OAuth2的授权服务器,用户登录并授权,授权服务器将Access Token直接返回给Web应用。

需要注意的是,隐式授权模式只适合用于在浏览器端的JavaScript等非服务端语言进行开发,因为此时应用无法安全保管客户端的令牌。而授权码模式适用于所有的应用类型和开发环境,适用范围更广。

Google OAuth2 认证流程会返回三个重要的令牌

  • Access Token:访问令牌,用于访问受保护的 API。
  • Refresh Token:刷新令牌,用于在 Access Token 失效后申请新的 Access Token。
  • ID Token:身份令牌,用于验证用户身份。

在进行 OAuth2 认证流程时,要确保在授权时向 Google 请求持久化 Refresh Token,并确保将 Refresh Token 存储在可靠的位置中。当 Access Token 失效时,应该使用 Refresh Token 来向 Google 申请新的 Access Token。

为了确保每次都能拿到刷新令牌,开发者需要保证以下几点:

  • 在每次需要访问 API 时,先检查 Access Token 的有效性,如果已失效,则使用 Refresh Token 向 Google 申请新的 Access Token。
  • 如果每次申请 Access Token 都会使用同一个 Refresh Token,那么开发者需要注意 Refresh Token 的失效时间问题,确保 Refresh Token 在有效期内。
  • 同时,如果有必要,开发者还可以定期提示用户重新授权,以获得新的 Refresh Token。

在授权时请求持久化 Refresh Token

在进行 Google OAuth2 认证时,需要向 Google 发起授权请求,并带上一些参数,例如 response_typeclient_idredirect_uriscope 等。其中 scope 参数表示所要访问的 Google API 权限范围如果要在授权时请求持久化 Refresh Token,需要在授权请求中添加 access_type=offlineprompt=consent 这两个参数。

access_type=offline 表示请求持久化的 Refresh Token,而 prompt=consent 表示要求用户授权时强制用户再次确认,以便获取 Refresh Token。

https://accounts.google.com/o/oauth2/auth?
    response_type=code&
    client_id={CLIENT_ID}&
    redirect_uri={REDIRECT_URI}&
    scope=https://www.googleapis.com/auth/drive.metadata.readonly&
    access_type=offline&
    prompt=consent

其他的prompt值的含义

prompt属性是 Google OAuth2 授权时可以用到的一个参数,它用于指定用户登录和授权行为。以下是prompt属性可能的取值:

  • none:表示要求无交互式用户登录或授权。只确定是否存在有效的用户会话,并需要访问令牌等凭据,如果用户未登录,则会返回“未找到身份验证”,而不会提示用户进行登录。
  • consent:表示要求用户授权,无论他们以前是否已经授权过。通常使用此选项,每次授权都会让用户看到授权屏幕,因此只能在条件允许的情况下使用。
  • select_account:表示只要求用户选择帐户,而无需进行授权。在需要让用户从多个会话中进行选择时,通常使用此选项。
  • login:表示要求用户进行登录和授权。

默认情况下,如果该参数没有指定,则该值为default,表示系统将选择要使用的标准流程。请注意,Google对prompt参数的支持可能随时发生变化,用户需要查看最新的Google文档来确认审核参数是否需要更新。

其他注意事项

当用户授权成功后,Google 认证服务器将会返回一个授权码 code,并根据 access_type=offline 的设置,同时也会返回一个 Refresh Token。开发者应该将 Refresh Token 持久化存储,以便在后续使用时使用。例如可以将 Refresh Token 存储到数据库中,或者加密后存储在文件或配置中。

值得注意的是,开发者应该妥善保管用户的 Refresh Token,不应该将其存储在明文或者公开可见的地方,以避免被攻击者盗用。

猜你喜欢

转载自blog.csdn.net/hzxOnlineOk/article/details/131415566
今日推荐