REST Web服务基本身份验证+客户端Facebook app身份验证=双重身份验证?

时间:2012-06-06 19:13:32

标签: facebook web-services rest basic-authentication

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

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

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

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

    有没有人想要简化这个过程?

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

2 个答案:

答案 0 :(得分:4)

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

首先,使用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);
}

答案 1 :(得分:0)

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

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

当用户注册时只是将他的fb帐户与系统中的用户关联,然后当他使用facebook登录时,使用他的身份并使用基本身份验证将他登录到系统中,这应该不难实现。 / p>

但有一点,如果你想使用客户端实现facebook身份验证,那么你应该用https发送身份验证数据。