在Symfony中使用rest对用户进行身份验证的最佳/推荐方式是什么


Whats the best / recommended way to authenticate users using rest in Symfony?

我正在symfony应用程序中开发rest api。

现在,我的应用程序只在前端使用我的api(Angularjs的ajax请求)。将来,我也希望向第三方应用程序公开相同的API。

此外,我将有Android,IPhone应用程序等在未来。

我已经集成了FOSOAuthServerBundle,并尝试了所有授权类型的工作流。一切正常。但我很困惑,这些是否可以由我的应用程序使用,还是仅适用于喜欢与我的应用集成的第三方应用程序?

我了解第三方应用程序如何使用这些工作流程。但我真的不明白如何对我的本机应用程序用户进行身份验证?

我想知道如何使用这个捆绑包通过我的前端应用程序中的rest api来验证我网站上的用户?

目前,我使用usnig FOSUserBundle和form_long来验证用户,但我正在将前端更改为使用Angularjs和基于rest。因此,理想情况下,身份验证应该像form_login身份验证一样工作,但它应该是基于rest的。

我对此进行了研究,人们建议使用"资源所有者密码凭据",但它需要在javascript中暴露客户端机密,这可能不安全

它应该起作用,例如,用户提交用户名/密码凭据,就像在form_login的情况下一样,但不应该重定向,而应该只返回access_token。

我需要编写使用UsernamePasswordToken的自定义身份验证提供程序和返回access_token的OAuthListener之类的防火墙侦听器吗?使用起来安全吗?

这里有一些讨论的类似问题:Symfony2 FOSOAuthServerBundle授予类型密码需要客户端机密

如果您不想公开秘密,请在前端角度代码和实际的OAuth服务器之间使用代理。无论如何,若您公开了这个秘密,它仍然需要用户凭据。

您可以为每个OAuth客户端设置允许的授予类型,因此在创建移动应用程序的情况下,您需要生成一对单独的client_id&应用程序和前端的client_secret,前端应用程序唯一允许的授予类型为"password"。