gpt4 book ai didi

amazon-web-services - Cognito用户池: How to refresh Access Token using Refresh Token

转载 作者:行者123 更新时间:2023-12-03 07:25:20 25 4
gpt4 key购买 nike

我正在使用 Cognito 用户池对系统中的用户进行身份验证。成功的身份验证会提供ID token (JWT)访问 token (JWT)刷新 token documentation here ,明确提到可以使用刷新 token 来刷新访问 token ,但没有提到如何使用。我的问题是,一旦我的访问 token 过期,如何使用存储的刷新 token 再次刷新我的访问 token ?

我搜索了 JavaScript SDK,但找不到任何方法来执行相同的操作。我肯定错过了什么。

我还想通过 Lambda 函数来完成此操作,该函数接收访问 token 和刷新 token 并使用刷新的访问 token 进行响应。如果有人能对此有所启发,那就太好了。

最佳答案

如果您遇到 Cognito Javascript SDK 无法满足您的目的的情况,您仍然可以在 SDK source 中了解它如何处理刷新过程。 :

您可以在 refreshSession 中看到 Cognito InitiateAuth使用为 AuthFlow 值设置的 REFRESH_TOKEN_AUTH 以及作为 AuthParameters 值传入的对象来调用端点。

需要配置该对象以满足您的用户池的需求。具体来说,如果您的目标应用程序客户端 ID 具有关联的应用程序客户端 key ,您可能必须传入 SECRET_HASH。创建用于 Javascript SDK 的用户池客户端应用目前不能包含客户端 key ,因此不需要 SECRET_HASH 来与它们连接。

另一个可能会让您陷入困境的警告是,如果您的用户池设置为记住设备,并且您没有将 DEVICE_KEY 与您的 REFRESH_TOKEN 一起传递。 Cognito API 当前返回 "Invalid Refresh Token"如果您传入 RefreshToken 而未传入 DeviceKey,则会出现错误。即使您传入有效的 RefreshToken,也会返回此错误。上面链接的线程说明了这一点,尽管我确实希望 AWS 将来能够更新其错误处理,使其不再那么神秘。

正如该线程中所讨论的,如果您使用 AdminInitiateAuthADMIN_NO_SRP_AUTH 一起,您成功的身份验证响应负载当前不包含 NewDeviceMetadata;这意味着您在尝试刷新 token 时不会传入任何 DeviceKey

我的应用程序需要在 Python 中实现,因此这是一个对我有用的示例:

def refresh_token(self, username, refresh_token):
try:
return client.initiate_auth(
ClientId=self.client_id,
AuthFlow='REFRESH_TOKEN_AUTH',
AuthParameters={
'REFRESH_TOKEN': refresh_token,
'SECRET_HASH': self.get_secret_hash(username)
# Note that SECRET_HASH is missing from JSDK
# Note also that DEVICE_KEY is missing from my example
}
)
except botocore.exceptions.ClientError as e:
return e.response

关于amazon-web-services - Cognito用户池: How to refresh Access Token using Refresh Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37442973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com