我在 AWS EKS 上的 kubernetes pod 中提供面向外部的 REST GET API 服务。我为此服务配置了一个 ALB Ingress,它强制执行 Cognito 用户池身份验证。 Cognito 配置了 Authorization code grant
与 openid
已启用 OAuth 范围。
如果我从浏览器调用我的 REST API,我会被重定向到 Cognito 登录页面。在此处的表单上成功进行身份验证后,我可以正常访问我的 REST GET API。这有效,但这不是我想要实现的。
而不是这个,我需要使用 Bearer
token ,在成功通过身份验证后。所以首先我调用 https://cognito-idp.ap-southeast-1.amazonaws.com使用 Postman 请求:
"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": {}
}
在最后一步中,我尝试通过 Authorization
调用我的 REST API 服务。值为 Bearer <AccessToken>
的 HTTP header 但我仍然收到带有登录页面的 HTML 响应。如何将 Cognito 配置为接受此调用的不记名 token 作为经过身份验证的身份?
最佳答案
引用 AWS 对此主题的支持:“不能使用不记名 token 代替 session cookie,因为在涉及不记名 token 的流中会导致生成 session cookie”。
所以不幸的是,这个用例在今天是不可能实现的。
关于amazon-web-services - 使用不记名 token 的 AWS Cognito 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64462069/