使用刷新令牌
您可以使用刷新令牌来检索新的 ID 令牌和访问令牌。默认情况下,刷新令牌会在您的应用程序用户登录用户池的 30 天后过期。当您为用户池创建应用程序时,您可以将应用程序的刷新令牌到期时间设置为介于 60 分钟和 10 年之间的任何值。
如果存在有效的(未过期)刷新令牌,则 Mobile SDK for iOS、Mobile SDK for Android、Amplify for iOS、Android 和 Flutter 会自动刷新您的 ID 和访问令牌。ID 和访问令牌的剩余有效期至少为 2 分钟。如果刷新令牌已过期,您的应用程序用户必须通过再次登录用户池来重新进行身份验证。如果访问令牌和 ID 令牌的最小值设置为 5 分钟,并且您正在使用 SDK,则刷新令牌将持续用于检索新访问和 ID 令牌。您会看到预期行为的最小值设置为 7 分钟,而不是 5 分钟。
适用于 Android 的 Amazon SDK 提供的选项可将 ID 令牌和访问令牌的最短有效期更改为 0 到 30 分钟之间的值。请参阅《Amplify Android SDK 参考》中 CognitoIdentityProviderClientConfigsetRefreshThreshold()
方法。
只要用户在针对新账户的UnusedAccountValidityDays
时间限制之前至少登录一次,用户账户本身就永远不会过期。
启动新的刷新令牌 (API)
使用 API 或托管 UI 来启动刷新令牌的身份验证。
要结合使用刷新令牌与用户池 API 获取新的 ID 令牌和访问令牌,请使用 AdminInitiateAuth
或 InitiateAuth
API 操作。为 AuthFlow
参数传递 REFRESH_TOKEN_AUTH
。授权参数 AuthParameters
是密钥-值映射,其中密钥为 "REFRESH_TOKEN"
,值为实际刷新令牌。在您的 API 请求通过所有质询后,Amazon Cognito 会返回新的 ID 和访问令牌。
要更改使用托管 UI 登录的用户的令牌,请使用 InitiateAuth
API 操作。
撤消刷新令牌
您可以撤销属于用户的刷新令牌。有关撤消令牌的更多信息,请参阅撤消令牌。
撤消刷新令牌会撤消所有用刷新令牌发布的令牌。
当您使用 GlobalSignOut
和 AdminUserGlobalSignOut
API 操作撤消用户的所有令牌时,用户可以从他们当前登录的所有设备中注销。用户注销后,发生下列情况:
-
用户的刷新令牌无法用于为用户获取新的令牌。
-
用户的访问令牌无法用于用户池服务。
-
用户必须重新进行身份验证以获取新的令牌。会话 Cookie 不会自动过期。作为最佳实践,应用程序应将用户重新导向到注销端点,以强制浏览器清除会话 Cookie。
应用程序可以使用 GlobalSignOut
API 来允许单个用户自行从所有设备注销。通常,应用程序会将此选项显示为一个选择,例如 Sign out from all devices(从所有设备注销)。该应用程序必须使用用户未过期、未撤消的有效访问令牌调用此 API 操作。此操作无法用于允许一个用户注销另一个用户。
应用程序可以使用 AdminUserGlobalSignOut
API 来允许管理员将一个用户从所有设备注销。管理员应用程序必须通过 Amazon 开发人员凭证调用此 API 操作,并传递用户池 ID 和用户的用户名作为参数。AdminUserGlobalSignOut
API 可以在用户池中注销任何用户。