我应该如何正确地将社交媒体SSO与我的自定义登录服务集成?

时间:2014-02-05 03:42:51

标签: android facebook single-sign-on google-plus

我正在尝试将移动应用程序的现有登录系统与某些社交媒体登录解决方案集成。我成功地将Facebook和谷歌+登录与我的应用程序集成,我达到了用户登录的地步,我可以获得他们的社交信息。

但现在我不知道哪个是最好的方法,以便将决定使用社交媒体帐户的用户与我的原生登录系统集成。我应该使用他们的电子邮件帐户登录,也许在服务器端生成密码?或者也许使用oauth令牌而不是密码?

我需要跟踪我的用户,甚至是那些没有正式填写注册表的用户。那么我应该放置什么而不是电子邮件+密码?

2 个答案:

答案 0 :(得分:9)

这可能很棘手 - 大多数情况很简单,但你需要考虑边缘。我觉得将电子邮件/密码视为另一种身份验证机制更容易。你想要

  1. 包含该用户核心数据的用户记录(可能是姓名,电子邮件地址,应用程序特定的个人资料等)。
  2. 其连接的身份验证方法的一系列记录,例如Google+,Facebook,用户/通行证。
  3. 连接的auth方法可以存储这些方法的相关信息 - 例如对于谷歌来说,它可能是Google用户ID,如果使用离线访问,可能会刷新令牌。这使您可以轻松提供连接多个社交帐户。

    密码可能是您要针对原始用户记录存储的特殊情况。在这种情况下,如果有人使用社交登录进行注册,那么您可以生成随机密码,也可以将其保留为空。无论哪种方式,只要您请求用户的电子邮件地址,您可以随时让他们通过忘记密码流(您生成并通过电子邮件发送密码),如果他们想要访问他们的帐户但不再登录他们的3p 。

    如果可以避免的话,你不想做的就是强迫用户在登录后给你一个新密码。但是,你允许多个登录方法与一个帐户关联,你可能想要允许关联它们。所以,你的流程可能是:

    • 用户登录(使用3p或电子邮件/通行证)
    • 如果您有该登录方法的记录(例如,匹配Google或Facebook用户ID,匹配电子邮件/通行证组合),请在该用户中签名,您就完成了。
    • 如果您没有该登录方法的匹配记录:
      1. 查看您是否拥有与现有用户帐户匹配的电子邮件地址。如果这样做,某些站点会自动将新登录方法合并到此帐户。如果隐私/安全性更受关注,您可能需要确认用户想要登录该帐户,或者让他们进行一次性验证(例如“看起来您之前已使用密码登录,请立即输入您的密码以关联您的帐户和您的Google帐户“等等。然后链接帐户并继续,就像登录一样。
      2. 查看您是否拥有可能该帐户的帐户。例如,您可能拥有一个匹配名称的帐户。在这种情况下,您可能希望提示用户连接他们的帐户(例如,在某个地方提示“您之前是否与Facebook连接?点击此处链接这些帐户”,然后让用户通过登录过程进行登录你怀疑他们可能有的方法。)
      3. 如果它们看起来很新,请创建一个新的用户记录,并将其视为新注册的。

    如果您可以将电子邮件地址视为一个独特的字段,则会更加轻松。这意味着,如果某人使用与您已拥有用户的电子邮件地址关联的3p帐户登录,则可能必须强制他们在继续之前链接其帐户。如果他们不想并且您需要一个电子邮件地址,您可以提示他们手动输入一个,然后通过向他们发送电子邮件并让他们确认来正常验证它。

    ChrLipp的链接很好,另请参阅Google Developers网站上一起使用FB和G +的指南:https://developers.google.com/+/best-practices/facebook

答案 1 :(得分:3)

您是如何实施社交媒体登录的?例如Facebook:您使用Login for Android吗?在这种情况下,文档会在Checking login status

下说明

使用我们的SDK的应用可以检查某人是否已使用内置函数登录。当一个人登录时,所有其他应用程序必须创建自己的存储方式,并且当该指示符不存在时,继续假设它们已被注销。

如果您点击Storing access tokens and login status的链接,您可以阅读:

应该存储令牌,以便在进行API调用时,它可供应用的所有部分使用。 ...如果您正在构建一个...移动应用,那么您应该使用您的应用可用的数据存储。此外,应用程序应将令牌与user_id一起存储在数据库中以识别它。

有枚举(NativeLogin,Facebook,GooglePlus)并根据此枚举提供以下信息:

  • NativeLogin
    用户名,密码
  • Facebook和GooglePlus
    Facebook或GooglePlus ID及其User Access Token

在所有情况下,您都应该将您收到的电子邮件地址存储在其他字段中。