我如何从AWS Cognito Api获取令牌以用于机器对机器

时间:2018-06-29 15:04:23

标签: javascript authentication aws-cognito

我正在尝试通过Cognito API获取令牌,但失败了。我已经阅读了他们的网站,并且在他们模糊的示例中遇到了困难。

我的目标是在api上进行第三部分服务运行监视测试,这要求它进行身份验证并获取身份令牌和访问令牌。我正在使用Cognito的是/否部分,即用户池(最简单的一部分)。

通过查看文档https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-reference.html,我不太了解流程。

如果我检查授权端点,它将使用http GET方法访问个人的UI,以手动输入信息。 (文档:https://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html

看着令牌端点,似乎我可以在一台机器上做一台机器,但是随着文档https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html指出我需要获取身份验证代码,这变得奇怪了。回到我写的关于授权端点的上一段。

谢谢, 凯莉

3 个答案:

答案 0 :(得分:0)

这适用于托管的UI。我已验证并且可以正常工作。

1)当我使用用户名和密码对google或Cognito进行身份验证时,我将重定向到我的网页。注意我使用response_type = code而不是response_type = token

https://test.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=3e0\j9m&redirect_uri=http://localhost:4200

2)这是重定向后的网址:

   http://localhost:4200/?code=66dbcb-4ab1-a3c9-]cb7091

3)这是curl,但是只需在您的js代码中执行即可,但是您首先要请求获取id_oken,access_token和刷新令牌

curl -H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&client_id=3e0duagpcsh2ga6ddn&redirect_uri=http://localhost:4200" \
-X POST https://test.auth.us-east-1.amazoncognito.com/oauth2/token

4)当代币即将到期时,请拨打以下电话:。您将获得新的id_token和access_token,但没有刷新令牌。

curl -H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token&client_id=3e0duagpcsh2dnne5r8j9m&refresh_token=eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R....
-X POST https://test.auth.us-east-1.amazoncognito.com/oauth2/token

答案 1 :(得分:0)

我发现,实际上唯一的方法就是使用AWS Cognito SDK创建API。我已经研究了ETL策略的细节,而SDK是最简单的解决方案。

答案 2 :(得分:0)

答案有点迟,但最近有同样的问题。实际上,有一些适用于此用例的文档,但可能不完整。因此,我们正在寻找的是: https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html

要执行此操作,需要-在设置用户池后-将服务器的应用程序客户端添加到服务器连接。在用户池中,转到应用程序客户端enter image description here

并添加一个应用客户端,例如“ myBackendService1”

您可以在每个用户池中添加多个应用程序客户端,因此也许您已经为SPA前端添加了另一个应用程序客户端,或者您想为不同的后端服务添加多个应用程序客户端。

现在,应用程序客户端设置中的重要部分是启用了“生成客户端密码”,之后您将无法更改! enter image description here

接下来,您需要设置域,您可以在其中从aws docs中所述的端点获取令牌:enter image description here

然后在“应用程序集成”下转到资源服务器,然后添加要访问的资源服务器(在App Client中定义的服务将是在成功身份验证后想要访问此资源服务器的服务器) enter image description here 还要在此处添加一些范围,因为在api调用中将需要它(例如,weather.read,如占位符所示)

现在,您已完成所有设置以测试您的端点,例如在邮递员中: enter image description here 仔细检查标题,并确保在“正文”中设置以下键: enter image description here 对于Authorization Header键,请确保为Base64Encode(client_id:client_secret)。

然后,您应该返回类似enter image description here

的响应

您现在可以在资源服务器中验证此令牌,例如,此处:How to verify JWT from AWS Cognito in the API backend? 或在这里: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html