我们有一个网站,其中only登录网站并进行身份验证的方式是使用 Facebook(这不是我的选择)。当您第一次登录 Facebook 时,系统会自动为您创建一个帐户。
现在,我们希望为我们的网站创建一个 iPhone 应用程序,并为其他人使用我们的服务创建一个公共 API。
这个问题是关于如何从应用程序/API 向我们的网站进行身份验证,分为两部分:
- 处理从 API 到仅使用 Facebook OAuth 作为身份验证方法的网站的 REST 身份验证的正确方法是什么?
我阅读并研究了很多有关 REST API 身份验证标准方法的内容。我们不能使用这样的方法通过 HTTPS 进行基本身份验证 https://stackoverflow.com/questions/7919533/rest-api-authentication-tokens,因为用户本身没有凭据。就像是this http://acaasia.blogspot.com/2013/04/designing-secure-rest-web-api-without.html似乎仅用于使用 API 验证应用程序。
目前,我能想到的最好方法是在我们的 API 上点击 /authorize 端点,它会重定向到 Facebook OAuth,然后重定向回该网站并提供一个“令牌”,API 的用户可以使用该令牌来进行后续身份验证要求。
- 对于我们创建的官方应用程序,我们不一定需要以相同的方式使用公共 API。那么与我们的网站对话并对用户进行身份验证的最佳方式是什么?
我了解(我认为)如何使用 API(公钥)密钥和秘密(私钥)对使用我们 API 的第三方应用程序进行身份验证。然而,当涉及到对正在使用该应用程序的用户进行身份验证时,我对如何进行验证感到相当困惑,因为我们必须对用户进行身份验证的唯一方法是 Facebook。
我觉得我错过了一些非常明显的东西,或者不完全理解公共 REST API 应该如何工作,因此任何建议和帮助将不胜感激。
更新:见下文
我也一直在认真思考这个问题。我还不完全清楚,但这是我正在考虑走的路线。我正在为我的用户创建 REST APIonly通过 Facebook 连接进行身份验证。
在客户端:
- 使用 Facebook API 登录并获取 OAUTH2 代码。
- 将此代码交换为访问令牌。
- 在每次调用我的自定义 API 时,我都会包含 Facebook 用户 ID 和访问令牌。
在 API 上(对于需要用户身份验证的每个方法):
- 使用上面的访问令牌向 /me Facebook 图发出请求。
- 验证返回的 Facebook 用户 ID 是否与从上面传递到我的 API 的用户 ID 匹配。
- 如果访问令牌已过期,则需要额外的通信。
我还没有测试过这个。听起来怎么样?
---更新:2014年7月27日回答问题---
我在登录时只使用了一次上述交换。一旦确定哪个用户正在登录,我就会创建自己的访问令牌,并从那时起使用该令牌。所以新的流程看起来像这样......
在客户端:
- 使用 Facebook API 登录并获取 OAUTH2 代码。
- 将此代码交换为访问令牌。
- 请求访问令牌myAPI,包括 Facebook 令牌作为参数
关于 API
- 接收访问令牌请求。
- 使用 facebook 访问令牌向 /me Facebook 图发出请求
- 验证 Facebook 用户是否存在并与我的数据库中的用户匹配
- 创建我自己的访问令牌,保存并将其返回给客户端,以便从现在开始使用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)