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


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

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

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

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

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

这与多层 Web 应用程序利用 rest-api 的身份验证后方案有点相关,但我没有找到任何我能理解的答案。

在这种情况下,我只使用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);
}

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

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

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

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

相关内容

最新更新