我正在使用Symfony2编写一个应用程序,该应用程序将与Wordnik REST API接口。
目前,Wordnik API不提供OAuth功能,因此我必须接受用户名和密码,然后将其透明地传递到API接口。
我想将这种API身份验证集成到Symfony2的安全系统中,但到目前为止,我还无法确定最佳的实现途径
我认为自定义用户提供程序不正确,因为密码没有存储在我的系统中。关于自定义身份验证提供程序的所有示例似乎都与应用程序的一部分作为API的安全相关,而不是针对REST API的安全。
我也不清楚FOSUserBundle在多大程度上有助于解决这个问题。
理想流量:
- 用户提供凭据
- 凭据传递给第三方REST API
- 如果凭据正确:
- 如果不存在,我的应用程序会创建相应的"第三方用户"实体
- 用户使用此"第三方用户"实体进行身份验证
在Symfony2安全上下文中实现此功能的最佳方式是什么?
谢谢!
相关问题:
- 在Symfony2上通过外部API配置用户身份验证的问题
您必须实现一个自定义身份验证提供程序,如中所述:http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html
我不能告诉你最好的方法是什么,只是为了帮助你开始:您创建了一个侦听器、一个令牌、一个提供程序和一个工厂。
侦听器的attemptAuthentication方法获取用户提供的凭据,并使用该输入创建一个新的Token。在方法的末尾,您将添加一个:返回$this->authenticationManager->authenticate($token);
您的提供商将在身份验证方法中使用此令牌来发送API请求。
对于不存在的用户,您有两个选项:-在API调用之后,在验证方法中创建一个用户,然后检查它是否已经存在,我认为这不是他们要做的事情-创建自己的身份验证失败处理程序,如下所示https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php但是在onAuthenticationFailure方法的顶部添加if(UsernameNotFoundException的$exception-instance&(null!==$token=$exception->getToken())&$YourWordnikToken的令牌实例){//在此处创建该用户}
这只是它的基本原理。。。我在IRC上的昵称是hacfi-如果你需要进一步的指导,请告诉我