AWS Cognito - 社交登录选项行为

Posted

技术标签:

【中文标题】AWS Cognito - 社交登录选项行为【英文标题】:AWS Cognito - social sign-in option behaviour 【发布时间】:2019-05-21 01:20:48 【问题描述】:

我们已经为面向消费者的应用程序iosandroid 和 React Native Web 应用程序)实现了社交注册和登录选项,并且我们正在使用 AWS Cognito 和 FB OAuth 来处理身份验证用户数。

我们尚未上线,但发现通过此方法对用户进行身份验证的方式存在“问题”。我在这方面只有基本的技术知识,所以请原谅我使用的任何愚蠢的语言。

基本上要求我们的应用只提示用户输入他们的 Facebook 凭据(用于注册或登录) IFONLY IF strong> 他们在该浏览器上没有活动并已登录 Facebook 会话。

例如

如果用户在该浏览器上登录到 FB 并希望登录到我们的应用程序,我们的应用程序能够“看到”有一个活动的 FB 登录,利用它来验证用户并将他们登录到我们的应用程序。 如果用户在该浏览器上登录 FB 并希望登录我们的应用,我们的应用能够“看到”没有活动FB 登录,从而提示用户提供他们的 FB 凭据以进行身份​​验证。假设他们成功执行此操作,然后他们就会登录到我们的应用。

如果用户退出我们的应用程序,然后稍后返回并想再次登录,则运行上述“测试”以检查我们是否可以立即对其进行身份验证,或者是否需要提示他们提供 FB 凭据。

我们目前从我们的技术合作伙伴那里得到的理解是,这是不可能的,但很想知道是否有人已经设法使用我们正在使用的技术做到这一点?

最后,有没有人成功利用适用于 iOS 和 Android 的 FB 开发工具包以及 AWS Cognito 来允许他们的应用程序使用本机 FB 应用程序(在设备上)作为身份验证路径(vs . 将它们推送到用户必须输入 FB 凭据的网页)

谢谢, 汤姆

【问题讨论】:

【参考方案1】:

作为 OAuth 2.0 的一部分(您未指定),流程将通过浏览器进行路由。身份提供者将有权访问存储在浏览器中的 cookie,并且应该能够获取任何活动会话。除非您实现了自己的 cookie 存储或浏览器,否则您无需担心这一点。

FB SDK 提供了登录行为选项,范围从从 Facebook 应用程序读取会话到浏览器。这些是为Android 和iOS 记录的。

【讨论】:

如何将 fb 登录与 aws-amplify (cognito) 集成【参考方案2】:

除了@donkon 已经指出的之外,您的本机应用程序将无法访问存储在已执行授权的用户代理(浏览器)中的任何凭据。这是预期行为,可提高安全性。

当您的客户端需要为 您的 应用获取客户端凭据(也称为访问令牌)并且必须通过外部 IdP(此处为 FB)对用户进行身份验证时,您通常在用户代理中运行此身份验证过程.此站点的行为取决于 IdP,并且可以通过在调用 IdP 的 URL 中作为查询参数提供的选项进行一定程度的定制。请注意,FB 登录既不完全符合 OAuth2 也不符合 OIDC。

对于 Facebook 登录,定制流程的相关参数是 auth_type,这类似于符合 OIDC 的 IdP 的 prompt 选项。它的有效值当然也是特定于供应商的:reauthenticatehttpsrerequest

不过,问题仍然存在,您如何才能自定义 AWS Cognito 注册和登录流程,该流程可能会将参数转发到 FB 登录 IdP。我自己无法回答这个问题,因为到目前为止我还没有使用过 AWS Cognito。

但据我所知,您的要求无法 100% 满足,因为您的应用无法“看到”用户代理中存在有效会话。但重要的是,从用户体验的角度来看,该行为是否可接受 - 当然最重要的是,它必须是安全的。

参考:

https://developers.facebook.com/docs/facebook-login/reauthentication/ https://developers.facebook.com/docs/facebook-login/permissions/requesting-and-revoking/

【讨论】:

以上是关于AWS Cognito - 社交登录选项行为的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS Cognito 联合身份进行 Instagram 登录

将 Cognito 中的用户信息与 AWS Amplify GraphQL 关联

自定义Web应用程序中的AWS Cognito社交提供程序

AWS Cognito UserPool - 恢复选项

是否可以在没有 Cognito 用户池的情况下使用 AWS Amplify Analytics?

AWS Cognito - SerializationException(在不期望的地方找到结构或映射的开始)