我正在symfony应用程序中开发rest apis。
现在我的应用程序仅在前端使用我的apis(Angularjs的ajax请求)。将来我也想向第三方应用程序公开相同的API。
此外,我将来会有Android,iPhone应用程序等。
我已经集成了FOSOAuthServerBundle,并尝试了所有授权类型的工作流程。一切正常。但我很困惑,我的应用程序可以使用它们,还是仅适用于喜欢与我的应用程序集成的第三方应用程序?
我了解第三方应用如何使用这些工作流程。但是我真的无法理解如何验证我的原生应用程序用户?
我想知道如何使用此捆绑包通过我的前端应用程序中的rest apis对我网站上的用户进行身份验证?
目前我是usnig FOSUserBundle和form_long来验证用户,但我正在改变前端以使用Angularjs和rest。因此理想情况下,身份验证应该像form_login身份验证一样工作,但它应该基于休息。
我对它做了研究,人们建议使用"资源所有者密码凭证"但它需要客户端秘密在javascript中公开,这可能不安全
它应该工作,例如用户提交用户名/密码凭证,就像在form_login的情况下一样,但不是重定向它应该只返回access_token。
我是否需要编写使用UsernamePasswordToken的客户身份验证提供程序和OAuthListener之类的防火墙侦听器,它返回access_token?这样可以安全使用吗?
答案 0 :(得分:0)
这里有一些类似讨论的类似问题: Symfony2 FOSOAuthServerBundle grant type password requires client secret
如果您不想公开机密,请在前端角度代码和实际OAuth服务器之间使用代理。无论如何,如果你暴露秘密,它仍然需要用户凭据。
您可以为每个OAuth客户端设置允许的授权类型,因此,如果您创建了移动应用,那么您需要生成一对单独的client_id&应用程序和前端的client_secret,唯一允许的授权类型为"密码"对于前端应用程序。