java - 我可以从纯 Java 使用 AWS Cognito 进行身份验证吗?

标签 java android amazon-web-services amazon-cognito

我想使用 Cognito 测试自定义用户授权,并通过简单的 Java 代码来完成。问题是,CognitoCachingCredentialsProvider 需要一个 Android ApplicationContext 并且不会接受 null。

整个流程应该是这样的:

  1. 用户使用电子邮件和密码登录
  2. 后端(Lambda 函数)从 Cognito 获取 IdentityToken 并将其返回给用户
  3. 用户现在可以从 Cognito 检索凭据并初始化 ApiClientFactory 以授权对其他 API 端点的调用

是不是我遗漏了什么,或者我只是把整个概念弄错了?这方面有什么好的教程吗?我已经仔细阅读了 AWS 上所有可能的文档,但我发现我真的很难理解它,而且没有任何关于纯 Java 的资料,只有 Android。

最佳答案

通常,Amazon Cognito 用于移动和 JavaScript 应用程序等“不受信任”的客户端,以直接向最终用户提供临时 AWS 凭证。由于我们看到的最常见的 Java 客户端应用程序是 Android 应用程序,因此我们的指南侧重于 Android 而不是纯 Java,但同样的过程也适用于 Java SDK。

服务器端

使用 Amazon Cognito 的 Developer Authenticated Identities feature 时正如您提到的那样,您将从调用 Amazon Cognito 的 GetOpenIdTokenForDeveloperIdentity 中获得一个 OpenID Connect token 。在您的后端 (lambda) 函数上。在成功验证用户身份后,您的后端应将该 token 提供给客户端应用程序。

客户端

然后客户端应用程序需要调用 Cognito 的 GetCredentialsForIdentity API ( Java docs ) 从上面的服务器端步骤传递 token 以获取 AWS session 凭证作为 Credentials Java SDK 中的对象。使用这些 session 凭证(实际上是来自 AWS 安全 token 服务/STS 的凭证),创建一个 BasicSessionCredentials 对象,将 session 凭证和 session token 传递给它,如 Explicitly Specifying Credentials in the Java SDK developer guide 中所述。 .

关于java - 我可以从纯 Java 使用 AWS Cognito 进行身份验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970790/

相关文章:

java - 如何在 Clojure 中实现具有具体类型参数的接口(interface)?

java - 有没有办法知道在 JSF 项目的 xhtml 文件中引用了哪些 bean 属性?

java - OutOfMemoryError - 我可以将数据转储到文件而不是内存中吗?

android - Android Studio 0.211不再支持签名APK

hadoop - 需要帮助在 aws 中设置 hadoop 集群

amazon-web-services - AWS 存储桶策略 - 使用存储桶策略限制对存储桶的访问

java - 为什么java静态变量不更新?

java - 如何处理 JTable 单元格中的多个超链接?

androidTest 中的 Android LiveData 返回 null

android - 没有标签或 ID 的 getSupportFragmentManager getFragment