Cognito 用户池 - 通过 REST 使用刷新令牌 API
Cognito User Pool - using Refresh Tokens through REST API
我们使用 Cognito 用户池与我们公司的 IDP 的 SAML 联合来验证我们系统中的用户,使用 Flutter 前端。
我们设置了身份验证代码流程,可以成功获取代码并使用此代码从 oauth2 端点获取令牌。但是,我正在努力使用刷新代码获取刷新令牌。
具体来说,我正在向 ../oauth2/token 端点发出请求,并传递以下参数:
grant_type: refresh_token
client_id: {client id - same id used to request initial code and token set}
refresh_token: {refresh token obtained from above request}
这似乎遵循了 AWS 文档(我正在遵循 https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html)和对其他问题的建议。但是,在进行此调用时,我收到了 error
为 invalid_grant
的 400 Bad Request。这在 Flutter 代码和 Postman 请求中都会发生。两者都通过将上述内容包含在 x-www-form-urlencoded 正文中来发出请求。
AWS 应用程序客户端未启用密钥,用户池未设置为记住设备,因此我查看的其他问题似乎并未涵盖(例如 )。应用程序客户端还设置为启用基于刷新令牌的身份验证。
查看 AWS 文档,invalid_grant 在刷新令牌过期时发生。但是,该应用程序客户端的刷新令牌的有效期设置为 30 天...并且在令牌发布几分钟后发出上述请求。
我知道有一个用于 Amplify 的 Flutter SDK,但我们大部分时间都在使用 API 调用和 WebView。如果可以的话,我不想说我们需要再次重建身份验证流程。
大家有什么想法吗?
谢谢
以下卷曲适合我:
curl --location --request POST 'https://{{domain}}.auth.us-east-1.amazoncognito.com/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'scope={{custom_scope}}' \
--data-urlencode 'client_id={{client_id}}' \
--data-urlencode 'refresh_token={{refresh_token}}'
我认为范围不是必需的。
我的建议是重新审视 SDK 的想法。如果访问令牌已过期,SDK 将为您解决自动创建访问令牌等问题。如果你不使用它,你需要自己监控过期时间。这不仅仅是简单的 API 调用的问题。
我们使用 Cognito 用户池与我们公司的 IDP 的 SAML 联合来验证我们系统中的用户,使用 Flutter 前端。
我们设置了身份验证代码流程,可以成功获取代码并使用此代码从 oauth2 端点获取令牌。但是,我正在努力使用刷新代码获取刷新令牌。
具体来说,我正在向 ../oauth2/token 端点发出请求,并传递以下参数:
grant_type: refresh_token
client_id: {client id - same id used to request initial code and token set}
refresh_token: {refresh token obtained from above request}
这似乎遵循了 AWS 文档(我正在遵循 https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html)和对其他问题的建议。但是,在进行此调用时,我收到了 error
为 invalid_grant
的 400 Bad Request。这在 Flutter 代码和 Postman 请求中都会发生。两者都通过将上述内容包含在 x-www-form-urlencoded 正文中来发出请求。
AWS 应用程序客户端未启用密钥,用户池未设置为记住设备,因此我查看的其他问题似乎并未涵盖(例如
查看 AWS 文档,invalid_grant 在刷新令牌过期时发生。但是,该应用程序客户端的刷新令牌的有效期设置为 30 天...并且在令牌发布几分钟后发出上述请求。
我知道有一个用于 Amplify 的 Flutter SDK,但我们大部分时间都在使用 API 调用和 WebView。如果可以的话,我不想说我们需要再次重建身份验证流程。
大家有什么想法吗?
谢谢
以下卷曲适合我:
curl --location --request POST 'https://{{domain}}.auth.us-east-1.amazoncognito.com/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'scope={{custom_scope}}' \
--data-urlencode 'client_id={{client_id}}' \
--data-urlencode 'refresh_token={{refresh_token}}'
我认为范围不是必需的。
我的建议是重新审视 SDK 的想法。如果访问令牌已过期,SDK 将为您解决自动创建访问令牌等问题。如果你不使用它,你需要自己监控过期时间。这不仅仅是简单的 API 调用的问题。