首页 文章

使用Google登录时无法恢复Cognito JWT令牌

提问于
浏览
1

使用Google登录获取API Gateway JWT令牌时遇到问题 .

使用案例:我们设置了一个认知用户池,将Google用作身份提供商 . 我们在API网关中还有一组API endpoints ,其中一些 endpoints 需要 Authorization 标头才能访问 endpoints . 我们有一些 cognito_user_pool 授权者附加到一些路线 . 当使用cognito用户登录(用户直接注册到游戏池并通过帐户/电子邮件验证)时,我会收到JWT令牌 . 然后,我能够发出API网关请求,并且所有这些都是正确的 .

这是我的理解(基于当然假设......)当使用第三方提供商时,我会登录到提供商(谷歌)获取一个令牌然后我会交换 cognito JWT token 然后我可以发出API请求 . 经过多次挖掘,结果证明行为是支持的 . 从我从无数博客文章和堆栈溢出中可以看出,您可以获取凭据然后使用其他AWS资源,但仅通过AWS-SDK或生成的API Gateway SDK,这在上下文中是没有意义的 . API ...

我想知道是否有其他人有这个用例,以及他们如何解决这个问题,同时继续使用cognito作为用户管理系统,或者AWS是否有任何计划来实现某种形式的这种行为?有点相关t:https://forums.aws.amazon.com/thread.jspa?threadID=231850

1 回答

  • 1

    因此,据我所知,您希望使用Google SignIn对您的API进行身份验证,但它目前仅在您使用Cognito令牌时才有效,即使用Userpool用户名密码登录 . 如果是这样的话,那我前一段时间就遇到了同样的问题 . 可以将Google与Cognito Userpool Authorizer一起使用,我也可以这样做 .

    • 只需要ID令牌

    • 它仅识别Cognito令牌,即 iss 声明应该是cognito idp而不是Google,Facebook等 .

    • 您需要使用Cognito Userpool的内置UI登录(最简单的方法,或者您可以使用/ authorize endpoints 跳过UI) . 当然,您应该启用Google作为App Client的IdP . 在Cognito页面上,选择Google和登录 . 您将获得一对id和访问令牌 . 在API网关中使用ID令牌 . 内置UI的URL将是:

    https://your_domain.auth.us-east-1.amazoncognito.com/login?redirect_uri=https://www.yourpage.com&response_type=token&client_id=xxxxxxxxxxxxxxxxxx

    • 具有此客户端ID的应用客户端应在Userpool控制台的 App Client Settings 中启用Google作为IdP .

    • 这可行的原因是Google将Auth响应发送回您的Cognito用户池域的https://your-user-pool-domain/oauth2/idpresponse . 在此之后,Cognito使用此信息在“身份”部分中销售带有Google声明的COgnito ID和访问令牌 . 现在,由于发行者是Cognito,这些令牌可以在API Gateway的Cognito userpool Authorizer中使用

    • Cognito不支持直接为Cognito令牌交换第三方令牌(截至目前) . 您可以使用第三方令牌使用Cognito Identity Pool获取临时AWS凭据,也可以使用第三方登录使用Cognito ' domain i.e the builtin-UI (/login endpoint) or the /authorize endpoint to directly get token' . 但是,截至目前,您无法明确地将一个令牌换成另一个令牌 .

相关问题