【问题标题】:OAuth implementation for Symfony APISymfony API 的 OAuth 实现
【发布时间】:2016-03-15 14:16:20
【问题描述】:

对于基于 Symfony 构建的 API 的实施 OAuth,我有点不确定。

情况:Symfony 上的 API 使用常见的 FOS 捆绑包,建议 here。前端将在 SilverStripe 上,因此登录表单将驻留在 SilverStripe 框架上的不同域中。

这是必需的工作流程:用户在 SilverStripe 的前端表单上填写用户名和密码 -> API 调用以检查用户名和密码是否正确 -> 如果凭据正确 API 提供 access_token 和所有其他所需的值随后对 API 的调用(我不确定)

我找到的所有教程都在为 Facebook 或 Twitter 实现 oauth。

由于我是 API 新手,我不太确定如何执行此操作。

【问题讨论】:

  • 所以 SilverStripe 正在使用你的 API,它是在 Symfony 中构建的,生活在其他地方,对吗?您需要 SilverStripe 登录表单作为 API 的通道吗?它是否需要将会员实际登录到 Silverstripe 或仅使用 API 进行身份验证?
  • @MarkGuinn 正确 Symfony 生活在其他地方,silverstripe 登录表单只是为了通过 API 进行身份验证
  • 那么您使用的是grant_type=password (gist.github.com/lologhi/7b6e475a2c03df48bcdd#grant_typepassword)?而且您不需要它来创建 SS 会员帐户或其他任何东西?

标签: php api symfony oauth silverstripe


【解决方案1】:

假设:

  1. 您需要在 Silverstripe 上收集 UN/PW 并使用这些相同的通过 API 进行身份验证
  2. 您不需要为同一用户拥有 SilverStripe 会员记录(即您完全绕过了 SS 的内置身份验证)

我建议:

  1. 像任何其他 SS 表单一样构建身份验证表单。
  2. 在您的提交处理程序中,使用 curl 或其他方式向 API 发送 grant_type=password 请求(ala https://gist.github.com/lologhi/7b6e475a2c03df48bcdd#grant_typepassword
  3. 在会话中保存 access_token
  4. 为未来的 API 请求使用访问令牌
  5. 要注销,只需从会话中删除访问令牌
  6. 要检查是否已登录,只需检查会话中是否有访问令牌。

如果我的假设是正确的,则不需要外部模块。如果没有,您可能需要查看 OPauth 和 https://github.com/BetterBrief/silverstripe-opauth - 至少作为灵感。

【讨论】:

  • 谢谢马克。试过了,它似乎工作正常。问题 - /oauth/v2/auth 路由是做什么用的?我需要使用它吗?
  • 是在 Symfony 方面吗?恐怕我对那套模块没有任何具体经验。 oauth 规范有许多来回协议(例如令牌刷新、在 symfony 端登录 a.l.a facebook 或 github 等),所以我的猜测是它促进了其中一个或全部。
猜你喜欢
  • 1970-01-01
  • 2013-07-05
  • 2020-10-14
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 2018-02-06
  • 1970-01-01
相关资源
最近更新 更多