我想对 Amazon Cognito 用户池 API 中的 "Invalid Refresh Token" 错误进行故障排除。
解决方法
您使用的应用程序客户端 ID 与刷新令牌不同
当用户使用 AdminInitiateAuth API、InitiateAuth API 或托管 UI 验证身份时,应用程序客户端 ID 将用作 ClientId 参数。如果您使用的应用程序客户端 ID 与发布刷新令牌的应用程序客户端 ID 不同,则 API 会返回 "Invalid Refresh Token" 错误。
要解决此错误,请使用在调用 AdminInitiateAuth 或 InitiateAuth API 时发出原始刷新令牌的相同应用程序客户端 ID。
您有一台未经确认的设备开启了设备跟踪功能
如果您为用户池开启设备跟踪但未确认设备,则在尝试获取新令牌时会收到 "Invalid Refresh Token" 错误。
要解决此错误,请调用 ConfirmDevice API 来确认设备并开始设备跟踪。然后,使用刷新令牌获取新的访问权限和 ID 令牌。有关详细信息,请参阅设置记住的设备。
您的身份验证参数中缺少设备密钥
当您为用户池开启设备跟踪时,Amazon Cognito 会在成功进行身份验证后返回唯一的设备密钥。要使用刷新令牌获取新令牌,请在以下身份验证请求中包含设备密钥:
{ "AuthFlow": "REFRESH_TOKEN_AUTH",
"AuthParameters": {
"REFRESH_TOKEN": "example_refresh_token",
"SECRET_HASH": "example_secret_hash",
"DEVICE_KEY": "example_device_key"
}
}
**注意:**请将 example_refresh_token、example_secret_hash 和 example_device_key 替换为自己的值。
如果您的应用程序客户端使用客户端密钥,请在 AuthParameters 中包含 SECRET_HASH 参数。这将验证请求是否来自您的应用程序。
如果设备密钥未作为一个 AuthParameters 传递,则会收到 "Invalid Refresh Token" 错误。要解决该错误,请确保将设备密钥作为 AuthParameters 包括在 AdminInitiateAuth 或 InitiateAuth API 中。
您已开启设备跟踪,但使用的是 USER_PASSWORD_AUTH 身份验证流程
在用户池上开启设备跟踪的情况下使用 USER_PASSWORD_AUTH 身份验证流程时,您会收到访问权限、ID 和刷新令牌。但是,如果尝试使用刷新令牌获取新令牌,您会收到 "Invalid Refresh Token" 错误。当您开启设备跟踪时,USER_PASSWORD_AUTH 流程不支持令牌刷新。
要解决此错误,请使用 USER_SRP_AUTH 身份验证流程,然后刷新令牌。
相关信息
刷新令牌
使用 Amazon Cognito 用户池进行身份验证
应用程序客户端的应用程序特定设置
使用 Amazon Cognito 用户池跟踪和记住设备