如何将多个社交登录映射到单个用户的帐户?

Bru*_*ams 5 identity design-patterns oauth azure

我正在使用Azure移动服务创建应用后端.该应用程序利用Azure移动服务身份(Microsoft,Facebook,Google和Twitter)作为其替代登录/注册过程.我在用户第一次登录时创建新的用户个人资料,然后如果用户使用不同的社交身份登录,我想自动将其链接到用户现有的个人资料/帐户.

将多个社交身份链接到单个用户时使用的常见模式或最佳实践是什么?

我正在考虑使用的方法是:

当用户使用社交身份登录时,我使用移动服务服务器脚本中的用户对象的getIdentities()函数来返回具有提供者特定数据(userId和accessToken)的对象.然后,我使用用户accessToken从社交API中检索用户的电子邮件地址.

收到用户的电子邮件后,请检查数据库中是否存在电子邮件地址,以及是否与其他userId(例如Twitter:userId)相关联,然后链接当前用户对象的userId(例如Facebook:userId) )到帐户.

如何将"登录范围"添加到请求允许我获取用户电子邮件地址的移动服务身份? (例如Facebook的' / me?scope = email ')

这是一个合适的解决方案吗?我应该考虑使用这种方法的哪些问题?

JTI*_*TIM 0

获取用户电子邮件地址的唯一方法是请求电子邮件字段的扩展权限。用户必须允许您看到此内容,并且您无法获取用户朋友的电子邮件地址。

http://developers.facebook.com/docs/authentication/permissions

如果您使用 Facebook connect,则可以通过在调用身份验证对话框的获取字符串中传递scope=email 来执行此操作。

我建议使用 SDK 而不是 file_get_contents,因为它可以更轻松地执行 Oauth 身份验证。

实时版本在这里: http: //facebook.init.me/php-get-email-address

    <?php

$facebook = new Facebook(array(
  'appId'  => $initMe["appId"],
  'secret' => $initMe["appSecret"],
));

$facebook->setAccessToken($initMe["accessToken"]);
$user = $facebook->getUser();

if ($user) {
    $user_profile = $facebook->api('/me');
    print_r($user_profile["email"]);
}
Run Code Online (Sandbox Code Playgroud)

?>

如果您使用的是 Windows Phone,您可以访问手机令牌,以便您知道登录来自同一部手机。向下滚动到 PrimaryToken http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769509(v=vs.105).aspx