【发布时间】:2018-04-23 15:37:00
【问题描述】:
提供一些背景知识 - 我目前有一个 API,但我希望我的移动应用能够与之通信。我查看了以下链接以为此设置身份验证。它涉及我如何验证客户端(在本例中为移动设备),如果他们传递 API 密钥 - 问题是它没有涉及密钥的实际创建方式。
http://symfony.com/doc/current/security/api_key_authentication.html
理想情况下,我希望移动应用程序为用户提供登录机会(用户名/密码),并且在他们登录后,API 会生成一个 API 密钥,用户将使用该密钥进行所有后续请求。
有人用 Symfony 4 做过这个吗?
【问题讨论】:
-
你刚刚描述过 oauth(2) 吗?
-
我并没有真正考虑过 oauth,因为我认为这与授予第三方应用程序代表您访问 API 的权限更相关。我想这在这种情况下可以工作,因为移动客户端将充当“第三方应用程序”。不过,我希望有更简单的东西——我只想直接登录到 API 系统,因为我控制两端(不涉及第 3 方应用程序或服务)。在这种情况下你还会推荐 oauth 吗?
-
只是做了更多阅读 - 看起来 oauth 将是这里的最佳选择。我会修改问题。
-
getUserByApiKey 的细节由你来实现。最简单的方法是创建另一个表,其中每个用户将通过其 ID 链接到这样的键,并在其中查看键是否存在且有效。可以以所需的格式创建键,并使用它作为主键或通过对其进行手动选择来检查该表中的唯一性。要生成实际密钥,您可以使用 UUID 或 uniq 函数变体。我已经使用 Laravel 和 Sentinel 提供程序完成了这项工作,但是通过阅读文档可以看到它们在方法上非常相似。
-
@DanielProtopopov - 实际的登录部分呢?我是否只使用现有的
/login路径登录并从移动设备发布用户名/密码?另一个问题是如何告诉 Symfony 安全组件在成功登录后返回 API 密钥(假设我在 User 表中创建/存储密钥)