【问题标题】:REST web service Basic authentication + Client Facebook app authentication = double authentication?REST Web 服务基本身份验证 + 客户端 Facebook 应用身份验证 = 双重身份验证?
【发布时间】:2013-04-27 01:31:15
【问题描述】:
  1. 我已经构建了一个基于 REST 设计的 Web 服务。当然,某些对资源可用的操作需要身份验证(例如删除用户)。我使用基本身份验证,到目前为止一切都很好。

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

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

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

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

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

【问题讨论】:

  • 在这种情况下是否必须使用基本身份验证?你不能改用facebook登录吗?
  • 我会说是的:您将获得有关我为 Jakub Przyborowski 回答所做的第一条评论的更多信息

标签: facebook web-services rest basic-authentication


【解决方案1】:

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

【讨论】:

  • 其实我的web服务可能有不同的客户端应用。他们中的一些人不会使用 Facebook,我希望所有与 Facebook 打交道的事情都在客户端完成(好的,服务器仍然可以存储给定用户的 facebook id,仅此而已),并不是所有用户都会使用 Facebook。因此,我受到称为 Web 服务的基本身份验证的限制。还是谢谢你!
  • 这种情况下建议统一认证方式。您可以从基本身份验证切换到基于令牌的身份验证,并像 facebook 一样使用通用访问令牌。如果用户使用 facebook 登录 - 你传递 facebook 访问令牌。如果没有 - 您在登录时生成自己的令牌,然后以与 facebook 访问令牌相同的方式使用它。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 2019-07-30
    • 2021-06-20
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多