我们有一个网站,登录和验证自己的网站的唯一方法是使用Facebook(这不是我的选择).第一次使用Facebook登录时,会自动为您创建一个帐户.
我们现在想为我们的网站创建一个iPhone应用程序,也为其他人创建一个公共API来使用我们的服务.
这个问题是关于如何通过app/API对我们的网站进行身份验证,并分为两部分:
从API到仅使用Facebook OAuth作为身份验证方法的网站处理REST身份验证的正确方法是什么?
我已经阅读并研究了很多关于REST API的标准身份验证方法.我们不能通过HTTPS使用Basic Auth等方法,因为没有用户凭证.像这样的东西似乎只是用于使用API验证应用程序.
目前,我认为最好的方法是在API上点击/授权终点,重定向到Facebook OAuth,然后重定向回站点并提供API的用户可以用来验证后续的"令牌"要求.
对于我们创建的官方应用程序,我们不一定需要以相同的方式使用公共API.那么与我们的网站交流并对用户进行身份验证的最佳方式是什么?
我理解(我认为)如何使用API(公共)密钥和秘密(私有)密钥验证使用我们的API的第三方应用程序.但是,当涉及到对正在使用该应用程序的用户进行身份验证时,我对如何进行此操作感到困惑,因为我们必须对用户进行身份验证的唯一方法是Facebook.
我觉得我错过了一些非常明显的东西,或者没有完全理解公共REST API应该如何工作,所以任何建议和帮助将不胜感激.
我们正在构建需要REST API后端并与Facebook集成以进行身份验证的移动应用程序(iOS和Android)。
我仍然对这种用例的最佳架构设计感到困惑。
主要问题:谁负责与Facebook,客户端或服务器进行身份验证/授权?
选项A:客户端向FB进行身份验证。客户端使用从Facebook收到的令牌发送请求。服务器使用该令牌来标识用户。
选项B:服务器代表客户端向FB进行身份验证。
附加说明(可能不相关):
尝试将facebook登录添加到我正在处理的项目的现有登录系统上.使用FB JS SDK构建角度.这主要是为了允许无摩擦登录,目前还没有使用访问令牌来使用FB API进行进一步调用.
所以作为一个新用户,他们点击FB登录,接受权限等,然后它会激活我一个访问令牌等.新用户是在我的数据库中创建的,还有accesstoken
FB userid
,等等.
我现在如何使用userid
和accesstoken
现在存储在我的数据库中对用户进行身份验证?据我所知,访问令牌实际上每个页面加载/请求都会改变,因此下次用户点击FB登录时,或者我检查FB登录状态时,我唯一不变的就是userid
.
已经对SO和FB文档进行了各种阅读,例如:
https://developers.facebook.com/docs/facebook-login/web https://developers.facebook.com/docs/facebook-login/multiple-providers https://developers.facebook.com/docs/facebook-登录/手动集结一个登录流#checktoken
......虽然这只会让事情进一步混乱.
我想我会把那个存储accesstoken
然后检查它的有效性,但是由于访问令牌的各种实例到期和失效,这似乎也是一个不完整的解决方案.
所以我的问题是:如何在我自己的数据库中与对方用户安全地验证我的FB用户?
authentication facebook login facebook-graph-api facebook-javascript-sdk