当前位置: 首页 > 知识库问答 >
问题:

用于使用Facebook进行身份验证的网站的REST API

施喜
2023-03-14

我们有一个网站,在这个网站上登录和验证自己的唯一方法是使用Facebook(这不是我的选择)。当你第一次登录Facebook时,会自动为你创建一个帐户。

我们现在想为我们的网站创建一个iPhone应用程序,也为其他人使用我们的服务创建一个公共API。

这个问题是关于如何从应用程序/API与我们的网站进行身份验证,分为两部分:

  1. 从API到只使用Facebook OAuth作为身份验证方法的网站,处理REST身份验证的正确方法是什么

我已经阅读并研究了很多关于REST API认证的标准方法。我们不能在HTTPS上使用基本身份验证这样的方法,因为没有这样的用户凭据。类似的情况似乎只适用于使用API验证应用程序。

目前,我认为最好的方法是你在我们的应用编程接口上找到一个 /authorize的endpoint,它重定向到脸书OAuth,然后重定向回网站,并提供一个“令牌”,应用编程接口的用户可以使用它来验证后续请求。

我理解(我认为)如何验证使用我们API的第三方应用程序,使用API(公钥)和密钥(私钥)。然而,当涉及到对使用该应用的用户进行身份验证时,当我们必须对用户进行身份验证的唯一方法是Facebook时,我对如何进行该操作感到相当困惑。

我觉得我错过了一些非常明显的东西,或者我不完全理解公共REST API应该如何工作,所以任何建议和帮助都将不胜感激。

共有3个答案

云新知
2023-03-14

我试图回答同样的问题,最近我读了很多书。。。

我不会有“答案”,但事情对我来说越来越清楚了。你提到的文章里的评论你看了吗?我发现它们非常有趣和有帮助。

因此,鉴于自第一篇文章撰写以来情况的发展,我认为我将做以下几点:

>

使用OAuth2:

>

  • 当认证请求来自我自己的应用程序/网站时,请使用上述文章回复中描述的“技巧”(或其变体)。

    在我的例子中,我有两种类型的用户:那些具有经典登录/密码凭据的用户和那些已经注册了脸谱网连接的用户。
    所以我会提供一个带有“用脸谱网登录”按钮的常规登录表单。如果用户用他的“经典”凭据登录,我会用一个grant_type=密码将这些凭据发送到我的OAuth2终结点。
    如果他选择通过脸书登录,我认为这将是一个两步过程:

    • 首先,使用Facebook iOS SDK打开FBSesshtml" target="_blank">ion

    请注意,我仍在大量研究这些东西,所以这可能不是一个完美的答案。。。甚至可能不是正确的!但我认为这将是一个很好的起点。使用“扩展授权”进行Facebook认证的想法可能需要注册才能正常工作?我不太确定。

    无论如何,我希望我能帮你一点忙,至少它能开始讨论,找到这个问题的最佳解决方案:)

    更新
    Facebook登录并不像评论中指出的那样是一种解决方案:任何人都可以发送任意用户ID,并以此用户身份登录API。

    这样做怎么样:

    • 使用“Facebook登录”按钮显示登录表单

    看起来好点了?

  • 宗政深
    2023-03-14

    这是我使用JWTs(JSON Web令牌)的实现,基本上类似于Chris的更新答案。我使用过Facebook JS SDK和JWT。

    这是我的实现。

    >

    客户端:通过调用/verify access tokenendpoint从我的API请求JWT。

    MyAPI:接收访问令牌,通过调用Facebook API的endpoint来验证它。

    MyAPI:如果访问令牌有效,则从数据库中查找用户,如果存在,则登录该用户。创建一个JWT,将必填字段作为有效负载,设置到期日,使用密钥签名,然后发送回客户端。

    客户端:将JWT存储在本地存储中。

    客户端:发送令牌(步骤5中的JWT)以及下一个API调用的请求。

    MyAPI:使用密钥验证令牌,如果令牌有效,则将令牌交换为新的令牌,并将其与API响应一起发送回客户端。(在此之后,没有外部API调用来验证令牌)[如果令牌无效/过期,请客户端再次验证,并从1开始重复]

    客户端将存储的令牌替换为新令牌,并将其用于下一个API调用。一旦满足令牌到期条件,令牌将到期,从而取消对API的访问。

    每个代币只使用一次。

    阅读更多关于安全和JWT的答案

    JWT有多安全

    如果你能破解JWT,它们的安全性如何?

    JSON Web令牌(JWT)作为用户标识和身份验证令牌

    廖华翰
    2023-03-14

    我也一直在认真思考这个问题。我还不完全清楚,但这是我想走的路线。我正在创建一个REST API,一个仅限我的用户使用Facebook connect进行身份验证的API。

    在客户机上:

    1. 使用Facebook API登录并获取OAUTH2代码

    在API上(对于每个需要用户身份验证的方法):

    1. 使用上面的访问令牌向 /meFacebook图形发出请求。
    2. 验证返回的Facebook用户ID是否与从上面传递给我的API的用户ID相匹配。
    3. 如果访问令牌过期,则需要额外的通信。

    我还没有测试这个。听起来怎么样?

    我只在登录时使用上述交换一次。一旦我确定了哪个用户正在登录,我就创建了自己的访问令牌,该令牌将从此点开始使用。所以新的流程看起来像这样。。。

    在客户机上:

    1. 使用Facebook API登录并获取OAUTH2代码。
    2. 将此代码交换为访问令牌。
    3. 从我的API请求访问令牌,包括Facebook令牌作为参数

    在API上

    1. 接收访问令牌请求
    2. 使用Facebook访问令牌向 /meFacebook图形发出请求
    3. 验证Facebook用户是否存在并与我的数据库中的用户相匹配
    4. 创建我自己的访问令牌,保存并返回给客户端,从这一点开始使用
     类似资料:
    • 我试图建立一个认证系统与Laravel 4与Facebook登录。我正在使用Laravel 4的madewith love/laravel-oAuth2包。 当然,当用户登录Facebook时,没有密码可以添加到我的数据库中。但是,我正在尝试检查数据库中是否已经有用户id,以确定是否应该创建一个新实体,或者只是登录当前实体。我想使用Auth命令来实现这一点。我有一张叫做“粉丝”的桌子。 这就是我正

    • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢

    • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。

    • 在本章中,我们将使用Firebase Facebook身份验证对用户进行身份验证。 第1步 - 启用Facebook身份验证 我们需要打开Firebase信息中心,然后在侧边菜单中点击Auth 。 接下来,我们需要在标签栏中选择SIGN-IN-METHOD 。 我们将启用Facebook身份验证并保持打开状态,因为我们需要在完成第2步时添加App ID和App Secret 。 第2步 - 创建F

    • 我试图建立一个新的服务器,作为网关(使用sping-Cloud-网关作为基础),我需要能够在实际转发任何后续请求之前通过远程LDAP服务器验证用户。我将如何实现这个(包,配置等)?

    • 我正在尝试使用connect将passport集成到我的nodejs服务器中,但似乎无法正确完成。所有的指南/示例都使用expressJS,所以我尽了最大努力重新格式化代码以使用我的代码,但我似乎无法让它正常工作。相关部分写在下面。有人对可能出现的问题有什么建议吗?护照authenticate()似乎从未被调用(至少facebook身份验证回调中的console.log消息从未打印)。我目前没有将