具有预配置授权的OAuth安全性

JDB*_*JDB 8 authentication rest authorization oauth-2.0

我有一个用户已登录到Web应用程序(使用OpenID Connect进行身份验证)然后需要从单独的REST服务访问数据的方案.

REST服务需要确定用户是否具有访问所请求数据的权限,但如果用户确实具有权限,则它应该授予Web应用程序授权,而无需用户与UI交互.

基本上,我需要的是一个两足的OAuth解决方案,其中客户端/信赖方完全受信任,但已经过身份验证的用户不是.

进入后,我认为OAuth可以满足这些要求,但是没有一种授权类型似乎符合要求:

  • 授权代码与我需要的相反,因为用户几乎是自动信任但客户端不是,要求用户通过Web表单授予对客户端的访问权限.
  • 客户端凭据信任客户端(这是我需要的),但不会为服务提供确定用户是否具有资源权限的机会(用户身份验证令牌不会传递给服务,使所有请求基本上都是"匿名的").
  • ROPC(资源所有者密码凭据)似乎是唯一的选项,但要求Web应用程序知道并可能存储用户的登录凭据(这是站不住脚的).

这是OAuth的差距吗?或者我误解了这些拨款类型?如果OAuth不能支持这种情况,是否还有其他广泛采用的开放标准,我错过了?

值得注意的是:我只拥有/控制Web应用程序,而客户(所有客户都是企业)拥有/控制身份验证服务器和REST服务.因此,需要一个共享的非专有标准,以便我们的客户知道如何配置他们的服务(IBM,Microsoft,等等),以便我知道如何传递任何身份验证令牌等.

Mvd*_*vdD 0

我认为使用正常的 OAuth2 流程这是可能的。您让 Web 应用程序使用代码授权来获取令牌以代表用户调用 API。

您的 Web 应用程序调用在授权标头中附加 JWT 令牌的 API。如果 REST 服务确定用户无权访问该资源,则会返回 401 Unauthorized HTTP 响应代码。

您的 Web 应用程序通过返回授权服务器并使用客户端凭据授予来获取访问令牌来代表客户端本身调用 REST API 来处理 401 响应。

由于这两项授予都允许您获取刷新令牌,因此您应该能够轻松地在访问令牌之间切换。