【问题标题】:Amazon Cognito: How to pass credentials to server-side applicationAmazon Cognito:如何将凭证传递给服务器端应用程序
【发布时间】:2017-06-18 12:17:19
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我有一些模糊的记忆,OAuth 2 为此目的有一个特定的流程,尽管我不记得它的名字。感谢您指出。现在,将 id 令牌从客户端共享到服务器不是有风险吗?当然我可以通过 SSL 传递它,但仍然......它被披露的潜在风险是什么?很明显,有人可以在我的特定服务器上冒充用户,但是否有可能做更多的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多