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

Myz*_*eal 5 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.

Sco*_*eke 5

通常,Amazon Cognito用于"不受信任"的客户端(如移动和JavaScript应用程序),以将临时AWS凭证直接销售给最终用户.由于我们看到的最常见的Java客户端应用程序是Android应用程序,因此我们的指南侧重于Android而不是普通的Java,但同样的过程将与Java SDK一起使用.

服务器端

当您提到正在使用Amazon Cognito的Developer Authenticated Identities功能时,您将从后端(lambda)函数调用Amazon Cognito的GetOpenIdTokenForDeveloperIdentity获得一个OpenID Connect令牌.成功验证用户后,您的后端应该将该令牌提供给客户端应用程序.

客户端

然后,客户端应用程序需要调用Cognito的GetCredentialsForIdentity API(Java文档),从上面的服务器端步骤传入令牌,以将AWS Session Credentials作为Java SDK中的Credentials对象获取.使用这些会话凭据(有效地来自AWS Security Token Service/STS的凭据),创建一个BasicSessionCredentials对象,并 按照Java SDK开发人员指南中的Explicitly Specifying Credentials中的描述向其传递会话凭据和会话令牌.