12

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

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

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

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

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

理想流量:

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

在 Symfony2 安全上下文中实现这一点的最佳方法是什么?

谢谢!

相关问题:

4

1 回答 1

4

您必须按照以下说明实现自定义身份验证提供程序: http: //symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

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

侦听器的尝试身份验证方法采用用户提供的凭据并使用该输入创建一个新令牌。在方法的最后,您将添加: 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 - 如果您需要进一步的指导,请告诉我

于 2013-02-18T23:40:12.270 回答