我正在使用Symfony2编写一个应用程序,它将与Wordnik REST API连接。
目前,Wordnik API不提供OAuth功能,因此我必须接受用户名和密码,然后我将透明地传递给API接口。
我想将此API身份验证集成到Symfony2的安全系统中,但到目前为止,我还无法确定最佳实现路径。
我不认为custom user provider是正确的,因为密码没有存储在我的系统中。关于custom authentication providers的所有示例似乎都与将应用程序的一部分保护为 API,而不是反对 REST API。
我不清楚FOSUserBundle在多大程度上有助于解决这个问题。
理想的流程:
在Symfony2安全上下文中实现此功能的最佳方法是什么?
谢谢!
相关问题:
答案 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 - 如果你需要进一步的指导,请告诉我