我即将开始使用 REST API 开发应用程序,并且我想使用敏捷性。不幸的是,这个想法有一个问题。我找不到可靠的信息来源如何允许普通用户通过 oAuth 进行身份验证。
我需要提供对角度应用程序和本机移动应用程序的访问(将来可能为第三方网络应用程序提供访问权限)。我找到的所有资源都是关于为特定客户端应用程序授予对 api 的访问权限,而不是为使用该应用程序的特定用户授予访问权限。我不想实现两种不同的身份验证方法,因此如果有一种方法可以灵活地解决此问题,那就太好了。
您对如何解决这个问题有什么建议吗?我知道我可以为所有注册用户生成客户端 ID 和密码,但这似乎是一个有点蹩脚的解决方案,而且我已经有数据库架构用于存储用户信息。
您可能正在寻找的是“密码”授予类型。在这种情况下,您将有一种注册用户及其密码的方法,然后是一个“登录”屏幕。此登录屏幕将发送以下信息:
请注意,在这种情况下您没有提供 client_secret!在用户凭据场景中,将验证用户的凭据,然后服务器验证 client_id 是否支持此授予类型。
如果用户提供成功的凭据,则 OAuth2 端点将返回一个令牌、一个 TTL 和一个刷新令牌(如果您在 TTL 过期之前发送它,将为您提供一组新的令牌)。
从这里,您将在授权标头中发送令牌:“Authorization:Bearer”。然后 Apigility 将在每个请求中获取此信息并验证令牌。
验证还返回用户名作为身份的一部分。这意味着您可以查询 ZF\Mvc\Identity 来检索用户,以便稍后执行特定于用户的 ACL 断言!
如果您需要更多指导,请在邮件列表上戳我。