首页 > 解决方案 > 使用 Bearer 令牌的 AWS Cognito 身份验证

问题描述

我在 AWS EKS 上的 kubernetes pod 中提供面向外部的 REST GET API 服务。我为此服务配置了一个 ALB 入口,它强制执行 Cognito 用户池身份验证。Cognito 配置为启用Authorization code grantopenidOAuth 范围。

如果我从浏览器调用我的 REST API,我会被重定向到 Cognito 登录页面。在此处对表单进行成功身份验证后,我可以正常访问我的 REST GET API。这行得通,但这不是我想要实现的。

Bearer取而代之的是,在成功通过身份验证后,我需要使用令牌。所以首先我使用 Postman调用https://cognito-idp.ap-southeast-1.amazonaws.com和请求:

    "AuthParameters" : {
        "USERNAME" : "<email>",
        "PASSWORD" : "<mypass>",
        "SECRET_HASH" : "<correctly calculated hash>"
    },
    "AuthFlow" : "USER_PASSWORD_AUTH",
    "ClientId" : "<cognito user pool id>"
}

我得到了成功的回应,例如:

  "AuthenticationResult": {
    "AccessToken": "...",
    "ExpiresIn": 3600,
    "IdToken": "...",
    "RefreshToken": "...",
    "TokenType": "Bearer"
  },
  "ChallengeParameters": {}
}

在最后一步中,我试图调用我的 REST API 服务,将AuthorizationHTTP 标头与值一起传递,Bearer <AccessToken>但我仍然得到登录页面的 HTML 响应。

如何配置 Cognito 以接受我的 Bearer 令牌作为此调用的身份验证身份?

标签: amazon-web-serviceskubernetesoauth-2.0amazon-cognitokubernetes-ingress

解决方案


在此主题上引用 AWS 支持:“不能使用不记名令牌代替会话 cookie,因为在涉及不记名令牌的流程中会导致生成会话 cookie”。

所以不幸的是,从今天开始,这个用例是不可能实现的。


推荐阅读