>我有以下元素:
- 一个PHP后端,提供用OAuth保护的RESTful API(FOSOAuthServerBundle with Symfony 2(
- 一个Javascript前端(AngularJS(,即OAuth客户端。
我的目标是在前端为用户提供一个身份验证页面,允许他们通过 Javascript 登录和访问 API。
根据这篇文章,我通过以下方式执行此操作:http://www.bubblecode.net/fr/2013/03/10/comprendre-oauth2/(不幸的是是法语,但如果您滚动一下,解释标准赠款流程的图表是英文的(:
- 我提供了一个询问用户凭据(登录名和密码(的表格
- 我使用 OAuth 隐式授权将用户凭据交换为访问令牌。
到目前为止,一切都应该(几乎(工作得很好。
现在,这个问题的原因是我想将Facebook Login添加到我的前端。每次用户在我的前端注册Facebook Login时,这将给我一个Facebook访问令牌。理想情况下,我的后端应该:
- 获取此令牌
- 根据Facebook PHP API进行检查以对其进行验证
- 从Facebook PHP API检索用户Facebook UID
- 将其与我的应用注册用户的比较
- 返回访问令牌(这次是针对我自己的应用程序,而不是Facebook(,当且仅当Facebook UID与我的注册应用程序用户之一匹配时。
我的问题是:在这样的用例中,我应该使用哪种类型的授权在我的前端和后端之间进行交易(考虑到从 Javascript 客户端提供我的客户端密钥当然是不可接受的(?
实际上,我设法找到了解决方案。应根据隐式授权(其中不询问客户端密码(设计自定义授权来解决此问题。
但是,FOSOauthServerBundle尚未实现基于公共客户端的授权(有关更多详细信息,请参阅 https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/266(。