php - 通过第 3 方 REST API 进行 Symfony2 身份验证

标签 php api symfony restful-authentication

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

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

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

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

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

理想流程:

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

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

谢谢!

相关问题:

最佳答案

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

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

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

您的提供商将在身份验证方法中使用此 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 - 如果您需要进一步指导,请告诉我

关于php - 通过第 3 方 REST API 进行 Symfony2 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928514/

相关文章:

php - Yii2 save() 使用默认值创建数据库行

javascript - 在 HTML 页面中使用 JavaScript 读取/查询 Google 电子表格

没有 APC 的共享主机上的 Symfony2 - 太慢了

php - 你怎么知道一个集合是否有上限?

php - 将多行插入数据库

php - Magento 客户登录页面重定向到自身,没有任何错误

api - Reddit API 中的 Children 参数是什么?

c - Lua API 计算变量名而不是值

symfony - Sonata Admin 在 ListView 中修改数据

php - 仅登录一次请求,刷新后退出