我已经基于REST设计构建了一个Web服务。当然,资源上可用的一些操作需要验证(例如删除用户)。我使用基本身份验证,到目前为止一切都很好。
我构建了一个使用Web服务的客户端:一组Ajax函数。同样,一切都很好(也适用于基本身份验证)。
我现在想要创建一个完整的Web应用程序,它将使用上面的Ajax函数集来与Web服务进行交互。但是,为了增强用户体验,一些Web应用程序功能将需要Facebook身份验证。
所以这是我的问题。 Web应用程序将需要用户名和密码才能通过基本身份验证调用Web服务。但它还需要Facebook凭据才能使用Facebook API,用户必须登录两次。此外,每次我必须检查Facebook用户(当前登录的Facebook)是否与Web服务的用户相对应并且非常麻烦。
有没有人想要简化这个过程?
它与该帖authentication-scheme-for-multi-tiered-web-application-utilizing-rest-api有点相关,但我找不到任何我能理解的答案。
答案 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发送身份验证数据。