Amazon Cognito:如何将凭据传递给服务器端应用程序

时间:2017-02-01 16:42:40

标签: amazon-cognito amazon-iam aws-cognito aws-sts

我有一个客户端应用程序(使用Java开发,而不是Android开发),可以使用Amazon Cognito用户池对用户进行身份验证。为了清楚起见:该应用程序显示用户名/密码输入对话框,然后使用SRP方法对Cognito用户池服务进行身份验证;在该对话框中处理潜在的挑战(设备ID,密码必须改变,两个因素等)。最后,我有一系列令牌,允许程序使用AWS服务和用户的凭据。

现在,我需要客户端应用程序与自定义服务器端应用程序进行通信。客户端必须向服务器应用程序证明其身份,然后服务器应用程序将与更多AWS服务进行通信。在这里,我有两个不同的用例:

1)服务器只需知道客户端认证用户是谁(以安全的方式,但不冒充用户)。

2)客户端需要用户的部分或全部权限委托给服务器;然后,服务器将代表该用户对AWS服务执行某些操作。

服务器端应用程序很可能是用Java开发的,在EC2机器上运行。我只对通过Cognito用户池来源的用户身份验证感兴趣(也就是说,我对基于Facebook / Google / OpenID的身份验证流程不感兴趣)。

以非常不安全的方式实现这两个目标似乎相当容易:只需让客户端应用程序向服务器发送它已被授予的所有令牌。但这显然不是可行的方法。

然而,我很难从Cognito用户池/ Cognito Identity Pool / IAM / STS文档中找出如何正确实现这一点。我希望例如客户端应用程序能够生成某种"委托令牌",它可以传递给服务器;然后,服务器应该能够验证该令牌并从中提取身份信息(满足#1),或者模拟对应于令牌的身份以执行对AWS服务的调用(满足#2)。或者我可能不正确地思考这个问题?

1 个答案:

答案 0 :(得分:3)

您指的是OAuth 2.0代码授权流程,Amazon Cognito目前不支持。

当前可用的安全方法是将id令牌从客户端传递到服务器,然后验证该令牌并从中提取身份信息。这证明了调用者的身份,因为您可以验证id令牌的签名。