我进行了很多搜索,但似乎无法从头到尾找到该主题的解决方案。作为前提,我已经在两个适用于iOS和Android的本机应用程序中实现了Cognito的注册,登录和凭据刷新,因此,我已经(至少)对身份验证流程有了基本的了解。这些移动应用使用可能的最简单的认知设置:用户池,具有IAM角色的身份池(用于经过身份验证的用户),并且无法进行未经身份验证的使用。我没有(至少到目前为止)没有使用Facebook,Google或Amazon登录名,也没有使用其他身份验证方法。现在,我需要用Java创建这些应用程序的桌面版本,在我看来,这是完全不同的野兽。我想做的是这样的:在我的Java桌面应用程序中打开登录窗口;在用户名和密码字段中输入用户名和密码,然后按登录按钮;获得一些凭证并开始使用连接到其他AWS服务的应用程序,特别是我需要使用S3,Lambda和DynamoDB。实现此目的的方法在表面上相当简单:从Cognito用户池中获取令牌;将此令牌提供给Cognito身份池,以换取一些凭证;使用此凭证来访问其他AWS服务。在阅读了许多文档,下载了许多不同的项目示例以及许多绝望之后,我终于找到了在移动应用程序中实现此方法的方法。例如,在Android中,身份验证流程如下所示:使用UserPoolID,AppClientID,PoolRegion和(可选)ClientSecret实例化CognitoUserPool;使用IdentityPoolID和PoolRegion实例化凭据提供程序;在应用程序用户界面中,输入用户名和密码,然后按“登录”按钮;使用先前实例化的UserPool中的用户名检索CognitoUser;使用带有各种回调的AuthenticationHandler,为该CognitoUser获取一个CognitoUserSession,以在需要时传递密码;将该CognitoUserSession以TokenKey +从会话中提取的JWT令牌的形式添加到先前实例化的凭据提供程序中。此时,每当我需要访问S3,Lambda或DynamoDB时,只需将此凭据提供程序作为其客户端构造函数的参数传递即可。在我看来,要用Java SDK实现相同的功能要困难得多。我设法相当容易地实现了用户注册。但是,对于用户登录,我根本不知道从哪里开始。每个示例都以不同的方式执行此操作。最重要的是,每个示例都使用特定的用例,例如开发人员验证的登录或自定义url,以连接到某些拥有的后端。为什么很难找到像我所需的基本用例的示例?我开始认为我的基本用例根本不是基本的,而是非典型的。为什么使用用户名和密码针对AWS的默认用户/凭证服务登录是非典型的,但是,我真的不知道。Credentials getCredentials(String accessCode)我想它应该接受使用InitAuth方法检索的访问代码(启动OAuth2.0身份验证流程,如果我错了,请更正我)。问题是我找不到检索该代码的方法。我找不到访问代码的在线示例来查看它的外观。我尝试放入令牌之一,并且Web请求响应{"error":"invalid_grant"}这表明它不是有效的代码,但至少该Web请求是有效的。总而言之,所有这些都在我脑海中引发了一些问题:为什么这么少的人似乎需要这种身份验证方法(使用用户名和密码)?在我看来,这是桌面应用程序的一个非常常见且合理的用例。我知道Web应用程序的增长是蓬勃发展的,但是鉴于Java是当今使用最广泛的语言之一,那么怎么可能没有人需要从桌面应用程序进行简单登录呢?这就引出了下一个问题:在将Java SDK用于桌面应用程序时,天生就有不好/错误/危险/愚蠢的东西吗?它仅打算用作后端服务器或Web应用程序吗?制作连接到AWS服务的桌面应用程序应该是什么解决方案?根本不做AWS连接的桌面应用程序是错的吗?网络应用程序应该是唯一考虑的选择吗?为什么?我选择使用Java来实现可在Widows,macOS和Linux上运行的应用程序。我还选择了Java,因为我认为它的用法与Android SDK非常相似,因为它的代码应该与平台UI无关,从而使代码易于重用。我错了。如果使用这样的Java SDK没什么问题,可以请一些好心人帮我找到一个示例,该示例从在两个字段中输入用户名和密码,然后实例化客户端以访问其他AWS服务(例如S3客户端) )在Java桌面应用程序中?告诉我您需要了解的所有信息,我将编辑问题。
添加回答
举报
0/150
提交
取消