【发布时间】:2015-10-15 17:35:39
【问题描述】:
我有一个场景,用户已登录到 Web 应用程序(使用 OpenID Connect 进行身份验证),然后需要从单独的 REST 服务访问数据。
REST 服务需要确定用户是否有权访问所请求的数据,但如果用户有权限,那么它应该授予 Web 应用程序授权,而不需要用户与 UI 交互。
基本上,我需要的是一个两足的 OAuth 解决方案,其中客户端/依赖方是完全信任的,但已经过身份验证的用户不是。
开始,我假设 OAuth 可以满足这些要求,但似乎没有一种授权类型符合要求:
- 授权码与我需要的相反,因为用户几乎是自动受信任的,但客户端不是,要求用户通过网络表单授予对客户端的访问权限。
- Client Credentials 信任客户端(这是我需要的),但不给服务机会来确定用户是否有权访问资源(用户身份验证令牌不会传递给服务,使所有请求本质上是“匿名的”)。
- ROPC(资源所有者密码凭据)似乎是唯一的选择,但需要 Web 应用程序知道并可能存储用户的登录凭据(这是站不住脚的)。
这是 OAuth 中的一个缺口吗?还是我误解了这些赠款类型?如果 OAuth 不能支持这种情况,是否还有我错过的另一个被广泛采用的开放标准?
注意:我只拥有/控制 Web 应用程序,而客户(都是企业)拥有/控制身份验证服务器和 REST 服务。因此,一个共享的、非专有的标准是必要的,这样我们的客户将知道如何配置他们的服务(IBM、Microsoft 等),并且我会知道如何传递任何身份验证令牌等。
【问题讨论】:
-
你能画出相关各方的交互图吗?我认为我明白你想要做什么,但不能完全确定。
-
> "REST 服务需要确定用户是否有权访问请求的数据,但如果用户确实有权限,那么它应该授予 Web 应用程序授权而不需要用户与 UI 交互。”如果是这种情况,那么为什么不总是使用客户端凭据访问 API?为什么要先检查用户是否有访问权限?
标签: rest authentication oauth-2.0 authorization