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

Dan*_* B. 12 php api restful-authentication symfony

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

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

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

我不认为自定义用户提供程序是正确的,因为密码不存储在我的系统中.有关自定义身份验证提供程序的所有示例似乎都与将应用程序的一部分保护 API有关,而不是针对 REST API.

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

理想的流程:

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

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

谢谢!

相关问题:

hac*_*cfi 4

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

我无法告诉您最好的方法是什么,只是帮助您开始:创建一个侦听器、一个令牌、一个提供程序和一个工厂。

侦听器的 attemptsAuthentication 方法获取用户提供的凭据,并使用该输入创建一个新的令牌。在该方法的末尾,您将添加一个: return $this->authenticationManager->authenticate($token);

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

对于不存在的用户,您有两个选择: - 在 API 调用之后并检查它是否已经存在之后,在身份验证方法中创建一个用户,我认为这不是他们的方法 - 创建您自己的身份验证失败处理程序,例如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 - 如果您需要进一步指导,请告诉我