通过第三方REST API的Symfony2认证(Symfony2 authentication v

2019-07-20 01:50发布

我正在写使用Symfony2的应用程序将与接口Wordnik REST API 。

目前,Wordnik API不提供OAuth的能力,所以我必须接受一个用户名和密码,我会那么透明传递给API接口。

我想这个API认证融入Symfony2的安全系统,但到目前为止,我还没有能够确定最佳实施路径是什么。

我不认为自定义用户提供是正确的,因为密码不存储在我的系统。 对于所有的例子定制认证供应商似乎涉及到一个应用程序的一部分的固定作为 API,而不是一个REST API。

这不是我清楚到什么程度FOSUserBundle有助于要么解决这个问题。

理想的流程:

  • 用户提供凭据。
  • 凭据传递给第三方REST API
  • 如果凭据是正确的:
    • 相应的“第三方用户”实体是由我的应用程序创建的,如果它不存在。
    • 用户使用此“第三方用户”实体认证。

什么是一个Symfony2的安全范围内实行的最佳方式?

谢谢!

相关的问题:

  • 问题通过Symfony2的外部API配置用户认证

Answer 1:

你要实现自定义身份验证提供者描述: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

我不能告诉你什么是最好的办法是,但只是为了帮助您开始:你创建一个监听器,令牌,供应商和工厂。

收听者的attemptAuthentication方法接受由用户提供的凭证,并创建与该输入一个新的令牌。 在方法结束时,您将添加一个:返回$这个 - > authenticationManager->认证($令牌);

你的供应商将使用此令牌在认证方法发送API请求。

对于非现有用户,你有两种选择: -在API调用后创建的身份验证方法的用户,并检查其是否已经存在,我相信以后是不是他们的路要走-创建自己的身份验证失败处理程序这就好比HTTPS ://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php但在onAuthenticationFailure方法的顶部添加如果($例外的instanceof UsernameNotFoundException &&(空! == $令牌= $ exception->为gettoken())&& $令牌的instanceof YourWordnikToken){//此处创建用户}

这仅仅是基本的想法它是如何工作...我与绰号hacfi IRC - 让我知道如果你需要进一步的指导



文章来源: Symfony2 authentication via 3rd Party REST API