2015-07-13 40 views
2

我实在无法找到一个明确的答案/方法存在以下问题/问题:独立的后端(Symfony2中)和前端(AngularJS)REST - 如何验证

我想有一个Symfony2的后端,可能与FOSRestBundle,它只返回JSON。前端将用AngularJS编写。

用户应该只能够为我的网站(选项#1)注册/登录的帐户或登录通过现有的OAuth帐户,像谷歌或兴(选项#2)。当然,认证应该/需要是无状态的。

由于大多数如何在symfony中验证RESTFul的例子完全在PHP中(所以即使后端和前端是分离的,前端仍然是PHP)我真的很难找出我如何实现上面的两个选项。我对后端当前的想法是:

  • FOSRestBundle用于处理请求/响应
  • FOSUserBundle的注册,登录,密码重置等,为新用户

我的问题是:

  1. 我该如何验证一个普通用户(FOSUserBundle)无状态(选项#1)?在有关如何在单独的前端使用FOSUserBundle的文档中找不到任何内容。或者这种情况下是否有更好的捆绑?
  2. 如果用户想通过OAuth2提供者(选项#2)验证应用的哪部分(前端或后端)针对OAuthProvider(例如Google)进行身份验证?我虽然关于在AngularJS中进行身份验证(例如,通过oauth-ng模块),获取AuthToken并将其发送到后端,在那里我将用户与他的ID匹配(希望)从OAuthProvider获得。

除了问题,如果这种做法是摆在首位正确的,我真的需要有关如何在symfony中实现这一目标的一些提示。我知道,可以在symfony(CustomUserProvicer,CustomAuthentication等)中定制几乎任何东西,但在阅读这些细节之前,可能已经有一种简单的方法来解决我的问题。我的意思是,我不可能是唯一一个想要这个的人...

如果有什么不清楚的地方,请问!

+0

我发现了这个,但我还没有使用它:https://github.com/uecode/api-key-bundle我不确定它是否适合你的用例。 –

+0

这可能会帮助您开始使用无状态/ oauth身份验证(均已描述):http://symfony.com/doc/current/cookbook/security/api_key_authentication.html –

+0

链接很好,我知道它们,但是通过了解了很多再读一遍。我的问题是,我错过了“大画面”。这些捆绑包在我的情况下如何一起工作(请参阅上文)。所以我真正需要知道的是两种选项(“正常”和OAuth)的完整(注册和登录)方式:从AngularJS前端的请求开始,将不同的bundles/symfony部分返回到接收响应的前端。[像这样](https://docs.google.com/drawings/d/1uTA7gQZ5IEV51Nv-HKR98sKWQNBUhEm0PPueJcoRW7c/edit)不太抽象,更具体到我的需求 – mcode

回答

2

我做了一个类似的API,这里是我是如何做的:

我用FOSUserBundle打造的“原生”的用户(那些只在您的网站)。为了支持无状态身份验证,我使用了FOSOauthServerBundle,它可以使用FOSUserBundle的用户提供程序。

然后,我添加两个字段到我的用户模型:

  • 一个整型字段名“原点”,其值表明该用户是(0人,1为Facebook,...)
  • 一个包含用户的ID的外部帐户,如果用户不是天然的“外部ID”字符串字段,NULL别的

为了使用户与外部帐户登录,我使用的custom grant type,问作为参数用于其上的客户端侧检索外部帐户(例如Facebook)的访问令牌,即使用该访问令牌以访问帐户信息,并做了以下:

  • 如果这是第一次用户认证,在数据库中创建一个新用户,按照解释的那样设置origin和externalId字段并在数据库中添加作为名字,姓氏的帐户信息。然后,它给出了API
  • 如果不是,它更新账户信息的访问令牌,一旦用户登录,如果它在哪里并不重要给出了API

这样一个访问令牌来自,但仍然可以被称为用户来源领域。

如果您想了解更多详细信息或配置有困难,请不要犹豫,在此处发表评论我很乐意提供帮助。

相关问题