我正在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"。