问题 如何将Cognito令牌传递给Amazon API Gateway?


我正在开发基于Amazon API Gateway的Web应用程序。现在我创建了Facebook登录并成功登录网站。但当我打电话给另一个API时,一切都消失了。我想我应该在每次调用API时传递Cognito令牌。我对吗?

如果是,如何将Cognito令牌传递给API?喜欢标题?或另一种方式?

谢谢,


4455
2017-09-18 09:31


起源

一切都消失了,你是什么意思?您需要有关API Gateway API中的调用者的哪些信息? - Scott Willeke
您能提供一些示例代码和错误消息吗? - Mark Mercurio
@ScottWilleke我的登录页面调用/ doLogin API,然后我从Cognito获取令牌和ID。之后我转到受限制的页面,如profile,它调用/ showProfile API。现在/ showProfile不知道我已登录或未登录。所以给我错误“缺少身份验证令牌”。我认为我应该将我的令牌和ID发送到每个API网关调用,但是如何发送它们?标题如“Amazon-Cognito-Token”?或另一种方式? - itulga
@ user2882027我还不清楚你的设置是什么。 / doLogin是否从getOpenIdToken返回openId标记?您是否在/ showProfile API上设置了AWS_IAM授权?如果是这样,您使用哪些凭据从浏览器调用它?来自sts的凭据是否承担了Cognito OpenId令牌的角色? - Mark Mercurio
@MarkMercurio是的,/ doLogin从getOpenIdToken返回openId标记。 / doLogin授权为None,/ showProfile授权为AWS_IAM。如果我调用/ doLogin没有错误,但/ showProfile给出错误“Missing Authentication Token”。如何使用凭证来调用/ showProfile? - itulga


答案:


您正在使用来自cognito身份的“基本Authflow”,这意味着您需要通过调用STS的“AssumeRoleWithWebIdentity”来获取用户的凭据。以下是一些有用的文档: http://docs.aws.amazon.com/cognito/devguide/identity/concepts/authentication-flow/

获得凭据后,您可以实例化API网关客户端:

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


15
2017-09-20 03:13



我应该在我的网络界面的JS中使用apigClientFactory吗? - itulga
你以前用过什么? - Mark Mercurio
如何使用AJAX请求使用受保护的网关api,什么是必要的标头?如何生成和设置它们?这是一篇关于如何使用ajax调用受保护网关的博客文章,帖子海报上使用的是x-api-key标头。它就像JWT令牌,如何生成APIKEY或如何将AssumeRoleWithWebIdentity中的密钥和令牌设置为ajax请求? dev.classmethod.jp/cloud/aws/... - itulga
@ user2882027 API Gateway的API密钥与Amazon Cognito生成的JWT完全不同。如果您想使用AWS凭据保护您的API,请使用Mark给您的说明,如果您想使用API​​密钥,请咨询 API网关文档。如果您正在尝试做其他事情,请尝试编辑您的帖子,详细了解您要完成的工作。 - Bob Kinney
由于某种原因,我无法使用从AssumeRoleWithWebIdentity返回的密钥和令牌调用apigate方式。我有一个Cognito_Auth_Role,它具有所有正确的策略,但我收到内部服务器错误。如果我将AdminAccess添加到此角色,那么它可以正常工作。 - johnny