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

我可以从纯Java使用AWS Cognito进行身份验证吗?,java,android,amazon-web-services,amazon-cognito,Java,Android,Amazon Web Services,Amazon Cognito,我想用Cognito测试自定义用户授权,并从一个简单的java代码中进行测试。问题是,CognotCachingCredentialsProvider需要一个Android应用程序上下文,并且不接受null 整个流程应该是这样的: 用户使用电子邮件和密码登录 后端(Lambda函数)从Cognito获取一个IdentityToken并将其返回给用户 用户现在可以从Cognito检索凭据并初始化ApiClientFactory以授权对其他API端点的调用 是我遗漏了什么,还是我只是把整个概念搞错了

我想用Cognito测试自定义用户授权,并从一个简单的java代码中进行测试。问题是,CognotCachingCredentialsProvider需要一个Android应用程序上下文,并且不接受null

整个流程应该是这样的:

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

  • 是我遗漏了什么,还是我只是把整个概念搞错了?有关于这个的好教程吗?我已经阅读了AWS上所有可能的文档,但我发现很难理解,而且在纯Java上没有任何材料,只有Android。

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

    服务器端 当您使用AmazonCognito时,您将从后端AmazonCognito(lambda)函数调用中获得一个OpenID连接令牌。您的后端应该在成功验证用户后向客户端应用程序提供该令牌

    客户端 然后,客户端应用程序需要调用Cognito()从上面的服务器端步骤传入令牌,以获取AWS会话凭据作为javasdk中的对象。使用这些会话凭据(实际上是来自AWS安全令牌服务/STS的凭据),创建一个
    BasicSessionCredentials
    对象,将会话凭据和会话令牌传递给它,如中所述。

    尝试此链接:


    它解释了JavaSDK的一切。与记者一样,在来到这里之前,我也经历了一段痛苦的经历,看了大量的文档。

    谢谢,这就把事情弄清楚了。我知道你的目标是Android,我在需要ApplicationContext的提供商那里迷路了,我不能用常规Java提供。我想我只是在文档中迷失了方向。今天,我将以全新的思维尝试您的指导原则,并返回任何结果。好的,我能够从后端检索IdentityId和OpenID令牌,但当我尝试使用GetCredentialsForIdentity API时,我会被拒绝“请提供有效的公共提供方”。我正在将请求的identityId设置为从后端收到的identityId,并设置一个登录映射,其中键是我的开发人员id,值是收到的令牌。我确信开发人员id是正确的。唉,经过一番斗争之后,我发现登录地图应该有一个“cognito identity.amazonaws.com”键和openid令牌的值。我不得不搜索了很长很长时间,只是为了找到一些堆栈溢出帖子中提到的这个字符串。也许应该在文档中更清楚地突出显示它?很高兴您找到了它。我同意在这一点上可能会更好。这一点并不明显,因为移动SDK(iOS、Android、Unity等)实际上使用了开发者提供商的名称。因为您使用的是纯Java,所以这是不同的。我们在文档中的什么地方查找这些信息?Cognito开发者指南?Java SDK参考?主要在这里:但也在Java SDK、Android SDK和您文章中链接的API参考中。拥有凭据并创建BasicSessionCredentials对象我现在正在寻找如何使用它授权对API网关的调用,因为ApiFactory似乎期望实现AWSCredentialsProvider,而Java SDK似乎没有允许使用API网关的类。我是否被迫在这里手动执行请求(以及健壮的签名过程)?请避免仅链接的回答。如果远程资源不可用,它们将过时。试着在你的帖子中描述解决方案最重要的方面。