- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们已将 com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.6.8
SDK 用于基于用户名和密码的登录和注册流程。按照此处提到的方法 https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-integrating-user-pools-android.html .注册和登录过程按要求进行。
对于 Facebook 和 Google 通过联合身份验证,我们不想为此目的使用托管 UI,也不使用联合身份。我们点击了此链接 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html .
第一种方法
我们研究了 CognitoSyncDemo 示例应用程序,它使用联合身份,因此我们不得不放弃它。我们只是在用户池中使用联合。
第二种方法
我们已经使用了 webview 并加载了以下 URL。该 URL 将我直接带到 Facebook,经过身份验证后,它会返回到带有 access_token、auth_type、expires in 和 id_token 的重定向 URL。但没有刷新 token 。网址 https://yourdomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?redirect_uri=redirect_app_path&response_type=code&client_id="client_id"&identity_provider=Facebook
但是使用这种方法有一个问题。我找不到将访问 token 推送到管理用户 session 的 SDK 中的 cognitoUserSession 的方法。所以每次我注册 Facebook(使用 webview)时,SDK 中都没有 session 维护。因此我再次被重定向到登录 View 。如何确保 Facebook 用户通过 cognitoidentityprovider 的身份验证和登录?如何在获取access_token和id_token时在SDK中创建用户 session ?
第三种方法
我们尝试使用 Cognito Auth Demo https://github.com/awslabs/aws-sdk-android-samples/tree/master/AmazonCognitoAuthDemo .为此,我们必须添加另一个库 com.amazonaws:aws-android-sdk-cognitoauth
。单击登录后,它曾经将我们带到 hosted-ui。在研究了类似的 IOS 项目后,我们对 android 库项目进行了调整(com.amazonaws:aws-android-sdk-cognitoauth for android)。我们在 URI 中添加了 identity_provider 用于登录。然后它将我们直接带到 chrome 选项卡上的 Facebook。身份验证后,它在我们的应用程序中设置 session 。但它有自己的身份验证对象,即 AuthSession 但之前我们使用 CogintoUserSession 进行正常注册。 AuthSession 没有用户属性,也不提供任何获取用户详细信息或身份验证处理程序。如果我们使用这种方法,那么如何将 AuthSession 与 CognitoUserSession 链接起来并管理应用程序中的用户 session ?
总结
简而言之,我们已经厌倦了 AWS 示例,它将我们带到基于 Web 的托管 UI。我们需要仅使用联合身份提供者通过 Facebook 向用户池验证用户。我们需要在 Cognito SDK 中维护 session ,而不影响我们基于用户名和密码的登录流程。我们希望在单击按钮时直接或在我们的应用程序中的 webview 上打开 Facebook,验证用户并仅使用 Cognito SDK 在应用程序中维护 session 。
最佳答案
为了连接到用户池,我包含了 aws-android-sdk-cognitoidentityprovider。但是,如果您需要添加社交注册,则还需要添加 cognitoauth。
确保 cognito sdk 版本相同,否则您可能会遇到复杂的错误。
根据项目需要,我需要将身份提供者传递给 sdk,以便它可以直接导航到我的社交身份提供者页面。但是当前的 sdk 版本 '2.6.24' 并没有为我提供这个规定。我已经从 awslab github 下载了 android-sdk-cognitoauth sdk 并包含在我的项目中。我改变了 Auth.java 类,在其中添加了身份提供者变量。
下一步,我将更改 AuthClient.java 方法 launchCognitoAuth。我放置了额外的条件来检查身份提供者是否存在。然后我将它设置在 uri 中。
if (pool.getIdentityProvider() != null) {
builder.appendQueryParameter(ClientConstants.DOMAIN_QUERY_PARAM_IDENTITY_PROVIDER, pool.getIdentityProvider().toString());
}
进行上述更改后,我可以通过我的应用程序在 auth.builder() 中配置身份提供者。黑客成功了,我直接导航到我的供应商页面。身份验证后,sdk 会自行设置 session 。
总而言之,我发现了android和ios项目实现之间的差异。在 iOS 项目中,aws 已经给出了直接添加身份提供者的规定。我按照 ios 项目的流程对 android congitio-auth 项目进行了调整。差异也已报告给 aws-sdk-android-sample issues .
关于android - 向 AWS Userpool 验证社交身份联合身份验证用户? - 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51185577/
我想将 EditText 始终设置为 LTR,我该怎么做?android:textDirection 似乎确实是答案,我无法让项目使用该指令进行编译 最佳答案 为 editText 使用引力 andr
我希望我的应用在每次打开时都显示登录屏幕。使用 android:clearTaskOnLaunch="true" 一切正常。但是有一个错误,只有在手机关机并且应用程序首先使用小部件启动时才会发生。 I
实际上我的要求是我想将动态文件加载到像图像一样的网页中。视频,音频等,它来自 Assets 或应用程序自己的文件目录,这不是问题。 我尝试使用以下两种方式。 方式一 这是我的 html 文件在 ass
我正在触发一个 DatePickerDialog,在 api 22 (Android 5.1) 之前它一直在工作并显示良好,我在上面设置混合和最大日期(最小 = 当前日期,最大 = 从当前日期开始的
我有一个 ListView ,我在其中将标题 View 添加到该列表。一切都很好,但是当滚动列表 headerview 也随着列表移动时,所以我想避免 headerview 滚动,我的意思是当我列表到
虽然我在android上做过一些app,但我还是一头雾水。是否可以使用 SDK 4.0 中的功能,并在 android 2.1 或更低版本上运行该应用程序? 我尝试了你们提到的方法,但出现错误 - F
您好,我正在开发小型 android 应用程序,我想在其中显示带有一些元素的简单 gridview。它工作正常。唯一的问题是即使有空间,它也总是只显示两列。它平均将屏幕分成 2 列并仅显示两个元素。如
我正在使用 Android 2.3.3 API 构建一个应用程序。我需要识别方向的变化并执行一些操作。所以我在 Android Manifest 中添加了以下内容, android:configCha
我正在尝试在“点击”包含特定 MIME 类型的 nfc 标签时开始一项 Activity 。我制作了一个 mime 类型为“text/plain”的标签,并将其添加到 list 中:
我可以将一些数据保存到文件中 val byteArrayOutputStream = ByteArrayOutputStream() byteArrayOutputStream.wri
我正在尝试解析一个包含复杂阿拉伯字母的 XML 文件.. 当我在 android 2.3.7 上测试时,并不是所有的阿拉伯字母都被支持,仍然有一些复杂的显示为方 block .. 但是在 androi
我需要编写一个方法来确定设备是平板电脑还是手机。我不需要根据这个显示不同的用户界面。我只需要有关设备的信息,以便将来我可以将其发送到指标。 在互联网上,我找到了很多方法来确定设备是否是平板电脑。我已经
我正在玩文字转语音,让我的测试应用程序更有趣。它适用于模拟器,但不适用于我的手机,因为我的默认语言环境不是英语。 但是,文本是英文的,所以 tts 当然应该使用英文。据我所知,我可以实现一个自动安装,
我正在使用 MVVM 和整洁的架构编写应用程序。在其中一个屏幕上,我需要使用 pagination 实现 RecyclerView。我将使用库 Paging3。 Android 开发者推荐在存储库层使
这个问题在这里已经有了答案: I lost my .keystore file? (12 个回答) 4年前关闭。 当我以前的操作系统损坏并安装新的(7 月 3 日)时,以前的 android_key_
我正在使用 MVVM 和整洁的架构编写应用程序。在其中一个屏幕上,我需要使用 pagination 实现 RecyclerView。我将使用库 Paging3。 Android 开发者推荐在存储库层使
在我的 v27\style.xml 中,我有以下代码来设置白色导航栏: @color/colorPrimary @color/colorPrimaryDark @color/
我想通过发送电子邮件 startActivity(Intent.createChooser(new Intent(android.content.Intent.ACTION_SEND))) 我知道要将
我实现了一个自定义 ListView ,它看起来像 Twitter 时间线。 adapter = new MyClickableListAdapter(this, R.layout.timeline,
我有一个显示启动画面的自定义对话框; mSplashDialog = new Dialog(MyActivity.this,R.layout.splash); mSplashDialog.setCon
我是一名优秀的程序员,十分优秀!