如何将 Cognito 令牌传递给 Amazon API Gateway?
Posted
技术标签:
【中文标题】如何将 Cognito 令牌传递给 Amazon API Gateway?【英文标题】:How to pass Cognito token to Amazon API Gateway? 【发布时间】:2015-12-15 09:39:25 【问题描述】:我正在开发基于 Amazon API Gateway 的网络应用程序。现在我创建了 Facebook 登录并成功登录网站。但是当我调用另一个 API 时,一切都消失了。我认为每次调用 API 时都应该传递 Cognito 令牌。我说的对吗?
如果是,如何将 Cognito 令牌传递给 API?像标题?还是其他方式?
谢谢,
【问题讨论】:
一切都消失了是什么意思?您需要有关 API Gateway API 内调用方的哪些信息? 您能否提供一些示例代码和您收到的错误消息? @ScottWilleke 我的登录页面调用 /doLogin API,然后我从 Cognito 获取令牌和 ID。之后我进入像配置文件这样的受限页面,它调用 /showProfile API。现在 /showProfile 不知道我是否已登录。所以给了我错误“缺少身份验证令牌”。我认为我应该将我的令牌和 ID 发送到每个 API 网关调用,但是如何发送它们呢?像“Amazon-Cognito-Token”这样的标题?还是其他方式? @user2882027 不清楚您的设置。 /doLogin 是否从 getOpenIdToken 返回 openId 令牌?您是否在 /showProfile API 上设置了 AWS_IAM 授权?如果是这样,您使用哪些凭据从浏览器调用它? sts 使用 Cognito OpenId 令牌担任角色的凭据? @MarkMercurio 是的,/doLogin 从 getOpenIdToken 返回 openId 令牌。 /doLogin 授权为无,/showProfile 授权为 AWS_IAM。如果我调用 /doLogin 没有错误,但 /showProfile 给出错误“缺少身份验证令牌”。如何使用凭据调用/showProfile? 【参考方案1】:您正在使用来自 cognito 身份的“基本身份验证流程”,这意味着您需要通过调用 STS 的“AssumeRoleWithWebIdentity”来为您的用户获取凭据。以下是一些帮助文档:http://docs.aws.amazon.com/cognito/devguide/identity/concepts/authentication-flow/
获得凭据后,您可以实例化 API Gateway 客户端:
var client = apigClientFactory.newClient(
accessKey: ACCESS_KEY,
secretKey: SECRET_KEY,
sessionToken: SESSION_TOKEN );
密钥和令牌来自“AssumeRoleWithWebIdentity”调用的结果。
如果您已正确配置 IAM 角色和授权,您应该能够访问您的 API。
这里是描述如何配置角色和授权的文档:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-method-settings.html#how-to-method-settings-callers-console
另外,这里是如何启用 CORS - http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
【讨论】:
我应该在网页界面的 JS 中使用 apigClientFactory 吗? 你之前用的是什么? 如何使用 AJAX 请求使用受保护的网关 api,什么是必要的标头?如何生成和设置它们?这是一篇关于如何使用 ajax 调用受保护网关的博客文章,该帖子海报使用 x-api-key 标头。这就像 JWT 令牌,我如何生成 APIKEY 或如何将密钥和令牌从 AssumeRoleWithWebIdentity 设置为 ajax 请求? dev.classmethod.jp/cloud/aws/… @user2882027 API Gateway 的 API 密钥与 Amazon Cognito 生成的 JWT 完全不同。如果您想使用 AWS 凭证保护您的 API,请使用 Mark 给您的说明,如果您想使用 API 密钥,请咨询API Gateway docs。如果您正在尝试做其他事情,请尝试编辑您的帖子,详细说明您要完成的工作。 由于某种原因,我无法使用从 AssumeRoleWithWebIdentity 返回的键和令牌调用 apigate 方式。我有一个 Cognito_Auth_Role,它具有所有正确的策略,但出现内部服务器错误。如果我将 AdminAccess 添加到此角色,那么它可以工作。以上是关于如何将 Cognito 令牌传递给 Amazon API Gateway?的主要内容,如果未能解决你的问题,请参考以下文章
在预认证用户的情况下如何使用 amazon cognito 获取刷新令牌
如何缓存来自 cognito 的 ID 令牌,以便后续访问 API 网关?