我可以从普通 Java 使用 AWS Cognito 进行身份验证吗?

Can I authenticate with AWS Cognito from plain Java?

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

整个流程应该是这样的:

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

是不是我遗漏了什么,或者我只是把整个概念弄错了?这方面有什么好的教程吗?我已经浏览了关于 AWS 的所有可能的文档,但我发现我真的很难理解它,而且在普通的 Java 上没有一个 material,只有 Android.

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

服务器端

在后端 (lambda) 函数上使用 Amazon Cognito 的 Developer Authenticated Identities feature as you mentioned you are doing, you'll get an OpenID Connect token back from the call to Amazon Cognito's GetOpenIdTokenForDeveloperIdentity 时。成功验证用户后,您的后端应将该令牌提供给客户端应用程序。

客户端

然后客户端应用程序需要调用 Cognito 的 GetCredentialsForIdentity API (Java docs) passing in the token from the Server Side step above to get AWS Session Credentials as a Credentials object in the Java SDK. With these session credentials (which are effectively credentials from the AWS Security Token Service/STS), create a BasicSessionCredentials object, passing it the session credentials and session token as described under Explicitly Specifying Credentials in the Java SDK developer guide

试试这个 link :https://aws.amazon.com/blogs/mobile/use-amazon-cognito-in-your-website-for-simple-aws-authentication/

它解释了 Java SDK 的所有内容。和记者一样,我在到达这里之前也有过翻阅大量文件的痛苦经历。