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

Amazon Cognito: How to pass credentials to server-side application

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

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

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

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

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

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

然而,我很难从 Cognito 用户 Pool/Cognito 身份 Pool/IAM/STS 文档中弄清楚如何正确实现这一点。例如,我希望客户端应用程序能够生成某种可以传递给服务器的 "delegation token" 的可能性;然后服务器应该能够验证该令牌并从中提取身份信息(满足#1),或者模拟与令牌对应的身份以执行对 AWS 服务的调用(满足#2)。还是我想错了?

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

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