通过第三方REST API进行Symfony2身份验证

时间:2013-02-18 02:13:53

标签: php api symfony restful-authentication

我正在使用Symfony2编写一个应用程序,它将与Wordnik REST API连接。

目前,Wordnik API不提供OAuth功能,因此我必须接受用户名和密码,然后我将透明地传递给API接口。

我想将此API身份验证集成到Symfony2的安全系统中,但到目前为止,我还无法确定最佳实现路径。

我不认为custom user provider是正确的,因为密码没有存储在我的系统中。关于custom authentication providers的所有示例似乎都与将应用程序的一部分保护为 API,而不是反对 REST API。

我不清楚FOSUserBundle在多大程度上有助于解决这个问题。

理想的流程:

  • 用户提供凭据。
  • 凭据将传递给第三方REST API
  • 如果凭据正确:
    • 相应的“第三方用户”实体由我的应用程序创建(如果它不存在)。
    • 使用此“第三方用户”实体对用户进行身份验证。

在Symfony2安全上下文中实现此功能的最佳方法是什么?

谢谢!

相关问题:

1 个答案:

答案 0 :(得分:4)

您必须实现自定义身份验证提供程序,如下所述: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

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

侦听器的attemptAuthentication方法获取用户提供的凭据,并使用该输入创建新的令牌。在方法结束时,您将添加: 返回$ this-> authenticationManager-> authenticate($ token);

您的提供商将在authenticate方法中使用此令牌来发送API请求。

对于不存在的用户,您有两种选择: - 在API调用之后以及在检查它是否已经存在之后在authenticate方法中创建一个用户我认为不是他们的方式去 - 创建自己的身份验证失败处理程序,如https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php,但在onAuthenticationFailure方法的顶部添加 if($ exception instanceof UsernameNotFoundException&&(null!== $ token = $ exception-> getToken())&& $ token instanceof YourWordnikToken){  //在这里创建该用户 }

这只是基本的想法,它是如何工作的...我在IRC上用昵称hacfi - 如果你需要进一步的指导,请告诉我