了解刷新令牌
您可以使用刷新令牌来检索新的 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 分钟。
只要用户在针对新账户的 UnusedAccountValidityDays
时间限制之前至少登录一次,用户账户本身就不会过期。
使用刷新令牌获取新的访问权限和身份令牌
使用 API 或托管 UI 来启动刷新令牌的身份验证。
要结合使用刷新令牌与用户群体 API 获取新的 ID 令牌和访问令牌,请使用 AdminInitiateAuth 或 InitiateAuth API 操作。为 AuthFlow
参数传递 REFRESH_TOKEN_AUTH
。在 AuthFlow
的 AuthParameters
属性中,将用户的刷新令牌作为 "REFRESH_TOKEN"
的值进行传递。在您的 API 请求通过所有质询后,Amazon Cognito 会返回新的 ID 和访问令牌。
注意
要使用 Amazon Cognito 用户池 API 来刷新托管 UI 用户的令牌,请使用 REFRESH_TOKEN_AUTH
流生成 InitiateAuth
请求。应用程序中的这种令牌处理方法不会影响用户的托管 UI 会话。API 响应会发出新的 ID 令牌和访问令牌,但不会续订托管 UI 会话 cookie。
您也可以将刷新令牌提交给用户群体中您在其中配置了域的令牌端点。在请求正文中,加入 refresh_token
的 grant_type
值和用户刷新令牌的 refresh_token
值。
撤消刷新令牌
您可以撤销属于用户的刷新令牌。有关撤消令牌的更多信息,请参阅通过令牌撤销来结束用户会话。
注意
撤消刷新令牌将撤消 Amazon Cognito 从具有该令牌的刷新请求中发出的所有 ID 和访问令牌。
当您使用 GlobalSignOut
和 AdminUserGlobalSignOut
API 操作撤消用户的所有令牌时,用户可以从他们当前登录的所有设备中注销。注销用户后,会发生以下影响。
-
用户的刷新令牌无法获取该用户的新令牌。
-
用户的访问令牌无法发出经过令牌授权的 API 请求。
-
用户必须重新进行身份验证以获取新的令牌。由于托管 UI 会话 Cookie 不会自动过期,因此,用户可以使用会话 Cookie 重新进行身份验证,而无需额外提示输入凭证。注销托管 UI 用户后,将这些用户重定向到注销端点,Amazon Cognito 将在其中清除用户的会话 cookie。
使用刷新令牌,您可以将用户的会话长时间保留在您的应用程序中。随着时间推移,您的用户可能希望取消对他们已登录的某些设备的授权,从而不断刷新他们的会话。要将您的用户从单个设备注销,请撤消其刷新令牌。当您的用户想要从所有经过身份验证的会话中注销时,请生成 GlobalSignOut API 请求。应用程序可以为用户提供一个选择,如从所有设备注销。GlobalSignOut
接受用户的有效(即未更改、未过期、未撤消的)访问令牌。由于此 API 经过令牌授权,因此一个用户无法使用它来发起另一个用户的注销。
但是,您可以生成 AdminUserGlobalSignOut API 请求,而您将使用您的 AWS 凭证授权该请求将任何用户从其所有设备注销。管理员应用程序必须通过 AWS 开发人员凭证调用此 API 操作,并传递用户群体 ID 和用户的用户名作为参数。AdminUserGlobalSignOut
API 可以在用户池中注销任何用户。
有关可以使用 AWS 凭证或用户的访问令牌进行授权的请求的更多信息,请参阅Amazon Cognito 用户池经过身份验证和未经身份验证的 API 操作。