【发布时间】:2016-02-10 06:57:39
【问题描述】:
场景
我们正在为我们的 Web 应用程序构建一个新的 RESTful API。此 API 将为我们的移动应用程序、我们的网络应用程序和授权客户提供服务。
我们正在使用 Apigility 构建 API,并正在使用它提供的 OAuth2 实现。
目前,我们的 Web 应用程序依赖于 users 表,并为每个用户分配了权限。这些用户只需使用 Web 表单登录,然后存储会话并在访问时检查适当的权限。
我们希望能够对 API 访问(例如我们的网络应用和授权客户)进行身份验证,因此不会发生对 API 的未经授权的访问。但是,我们还想在用户级别授权权限,因此也必须进行某种用户身份验证。
对 API 的任何授权访问都可能使用不同的用户,因此依赖每个客户端的单个用户是行不通的,特别是因为权限是基于每个用户的。我们也不希望任何用户能够在没有事先身份验证的情况下使用 API,因此希望避免将每个用户都作为客户端添加到 OAuth2。
例如:
Web 应用程序通过 API 进行身份验证,有两个用户使用它:
UserA拥有用户管理权限
UserB没有用户管理权限
因此,UserA 可以从POST 到/users 并接收200 OK,而UserB 应该接收403 Forbidden。
我们尝试过的
我们已经创建了一个示例应用程序,并且已经成功地为高级客户端设置了使用 OAuth2 的身份验证,并且可以按预期进行调用。但是我们还不能基于此为我们的用户创建授权模型。
我们添加了一个带有用户令牌的自定义 HTTP 标头,该用户令牌是在对 /user/login 的经过身份验证的调用之后提供的。但我们不确定这是否是正确的方法。
问题
我们如何既验证高级客户端(例如我们的网络应用程序或授权客户),又根据实际使用系统的用户授权访问?
【问题讨论】:
-
你是怎么解决这个问题的?
标签: api rest authentication oauth-2.0 authorization