2
  1. 我已经构建了一个基于 REST 设计的 Web 服务。当然,某些对资源可用的操作需要身份验证(例如删除用户)。我使用基本身份验证,到目前为止一切都很好。

  2. 我已经构建了一个客户端来使用 Web 服务:一组 Ajax 函数。同样,一切都很好(也适用于基本身份验证)。

  3. 我现在想创建一个完整的 Web 应用程序,它将使用上面的一组 Ajax 函数与 Web 服务进行交互。但是,为了增强用户体验,一些 Web 应用程序功能将需要 Facebook 身份验证。

所以这是我的问题。Web 应用程序需要用户名和密码才能通过基本身份验证调用 Web 服务。但它还需要 Facebook 凭据才能使用 Facebook API,并且用户必须登录两次。而且,每次我都必须检查Facebook用户(当前登录Facebook)是否对应于Web服务的用户,这很麻烦。

有没有人有简化流程的想法?

这与 post authentication-scheme-for-multi-tiered-web-application-utilizing-rest-api有点相关,但我没有找到任何我能理解的答案。

4

2 回答 2

4

在这种情况下,我只使用 Facebook 身份验证。如果用户通过 JS SDK 登录 Facebook,您可以简单地通过 FB.getAuthResponse().accessToken 获取 accessToken。然后,您可以将其传递给 webservice 并使用它在服务器端进行身份验证。

首先,使用 JS SDK 进行客户端认证:

/* assumed, that you alredy called FB.login() and stuff */
var accessToken = FB.getAuthResponse().accessToken;
$.ajax({
    'url' : 'rest.php',
    'type' : 'get',
    'dataType' : 'json',
    'data' : { accessToken : accessToken },
    'success' : function(response) {
        /* some fancy code, blah blah blah */
    }
});

我使用 PHP SDK,所以我将展示 PHP 中的示例。

<?php
require 'facebook.php';

$accessToken = $_GET['accessToken'];
$facebook = new Facebook(array(
    'appId' => 'xxxxx',
    'secret' => 'xxxxx'
));     
$facebook->setAccessToken($accessToken);

if ($facebook->getUser()) {
    // yaay, user is authenticated
    echo json_encode($mySuperDuperSecretContentForLoggedUserOnly);
} else {
    // authentication failed
    echo json_encode(null);
}
于 2012-06-06T21:14:20.200 回答
0

如果您的主要设计使用基本身份验证,但您希望在某些情况下能够与 facebook 连接,那么我建议您在服务器上使用适配器/桥接器,它能够获取 facebook 身份验证数据,然后处理基本身份验证身份验证本身。

这样,facebook 用户就不必经过 2 个身份验证过程,并且您不会破坏原始流程中的任何内容。

实施起来应该不难,当用户注册时,只需将他的 fb 帐户与您系统中的用户关联,然后当他使用 facebook 登录时,获取他的 id 并使用基本身份验证将他登录到系统。

不过有一件事,如果您想使用客户端实现 facebook 身份验证,那么您应该在 https 中发送身份验证数据。

于 2012-06-07T08:13:10.557 回答