如何从 Cognito 获取 Apple 刷新令牌?

Posted

技术标签:

【中文标题】如何从 Cognito 获取 Apple 刷新令牌?【英文标题】:How to get an Apple refresh token from Cognito? 【发布时间】:2020-12-13 09:37:27 【问题描述】:

我正在通过 Sign In With Apple 使用 Cognito 的联合登录。我有一个通过 appleid.apple.com 使用 JWT 授权器的 API 网关路由 从 ios 应用程序,如果我将身份令牌传递给这个 API 网关路由并且它似乎可以工作。

10 分钟后,Apple 身份令牌如预期般过期。我是否必须手动 verify a user and fetch a refresh token 或 Cognito 是否提供端点来为我执行此操作并返回刷新令牌?

没有可用的 ALLOW_REFRESH_TOKEN_AUTH 选项。

【问题讨论】:

将 Sign in with Apple 作为身份验证提供程序添加到身份池的文档 [docs.aws.amazon.com/cognito/latest/developerguide/apple.html] 链接失效 【参考方案1】:

Cognito 提供了一个刷新令牌端点。当您在Auth Flows Configuration中为您的用户池设置应用客户端时,“ALLOW_REFRESH_TOKEN_AUTH”选项已默认选中,然后点击“保存应用客户端更改”

【讨论】:

谢谢。默认情况下它是打开的,我不能像你的屏幕截图那样打开或关闭它。 没错,所以默认情况下,您会通过 Cognito 获得刷新令牌。您可以更改的是刷新令牌过期字段中的验证期 “默认情况下,您会通过 Cognito 获得刷新令牌” - 如果我将 JWT 授权器与 API 网关一起使用,我会在流程的哪个阶段获得此刷新令牌? JWT Authorizer 将这些密钥传递给网关路由 aud、auth_time、c_hash、exp、iat、iss、nonce_supported、sub。我在那里没有看到刷新令牌。 let data = grant_type: 'authorization_code', code: code, redirect_uri: YOUR_REDIRECT_URI, scope: 'email openid profile', client_id: YOUR_APP_CLIENT_ID const response = await axios( method: 'post', url: your_authorization_url_token, auth: username: YOUR_APP_CLIENT_ID, password: YOUR_APP_CLIENT_SECRET , headers: 'Content-Type': 'application/x-www-form-urlencoded' , data: qs.stringify(data) ) 这个^的response.data 应该包含id_token和rerfesh_token 我没有使用 JWT Authorizer,这就是我在 node.js 中获取令牌的调用方式。我认为这对您来说不会有太大的不同,或者至少我可以为您提供提示。希望对您有所帮助!【参考方案2】:

AWS Support 说“如果您使用授权码授权,那么一旦流程完成,将生成刷新令牌。授权码授权流程启动代码授权流程,该流程提供授权代码作为响应。此代码可以是使用 TOKEN 端点交换访问令牌。因为令牌永远不会直接暴露给最终用户,所以它们不太可能被泄露。并在这里引用了我:

https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-user-pool-oauth-2-0-grants/

【讨论】:

以上是关于如何从 Cognito 获取 Apple 刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章

在预认证用户的情况下如何使用 amazon cognito 获取刷新令牌

Cognito 用户池:如何使用刷新令牌刷新访问令牌

如何从 Amplify 获取与 API 网关和 cognito 一起使用的访问令牌?

我如何从 AWS Cognito Api 获取机器对机器的令牌

AWS Cognito - 如何从令牌对象获取用户组

如何处理 Cognito 上的令牌过期问题