4

我即将开始使用 rest API 开发应用程序,并且我想使用 apigility。不幸的是,这个想法有一个问题。我找不到可靠的信息来源,如何允许通过 oAuth 对普通用户进行身份验证。

我需要为 Angular 应用程序和本机移动应用程序提供访问权限(将来可能为第三方 Web 应用程序提供)。我发现的所有资源都是关于为特定客户端应用程序授予对 api 的访问权限,而不是为使用此应用程序的特定用户授予访问权限。我不想实现两种不同的身份验证方法,所以如果有办法用apigility解决这个问题,那就太好了。

您对如何解决这个问题有什么建议吗?我知道我可以为所有注册用户生成客户端 ID 和密码,但这接缝了一个有点糟糕的解决方案,而且我已经有了用于存储用户信息的数据库模式。

4

1 回答 1

8

您可能正在寻找的是“密码”授权类型。在这种情况下,您将有一种注册用户及其密码的方法,然后是“登录”屏幕之类的。此登录屏幕将发送以下信息:

  • 用户名
  • 密码
  • client_id -- 这将是应用程序的 OAuth2 客户端 ID(不是用户 ID!)
  • “grant_type”:“密码”

请注意,在这种情况下,您没有提供 client_secret!在用户凭证场景的情况下,验证用户的凭证,然后服务器验证 client_id 是否支持这种授权类型。

如果用户提供了成功的凭据,那么 OAuth2 端点将返回一个令牌、一个 TTL 和一个 refresh_token(如果您在 TTL 过期之前发送它,则会为您提供一组新的令牌)。

然后从这里,您将在 Authorization 标头中发送令牌:“Authorization: Bearer”。然后,Apigility 将在每个请求中获取它并验证令牌。

验证还返回用户名作为身份的一部分。这意味着您可以查询 ZF\Mvc\Identity 来检索用户,以便稍后执行用户特定的 ACL 断言!

如果您需要更多指导,请在邮件列表 ( http://bit.ly/apigility-users )上戳我。

于 2014-05-21T13:08:54.817 回答