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

时间:2015-07-24 22:36:36

标签: rest authentication oauth-2.0 authorization

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

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

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

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

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

这是OAuth中的一个缺口吗?或者我误解了这些拨款类型?如果OAuth不能支持这种情况,那么我是否还有其他广泛采用的开放标准?

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

2 个答案:

答案 0 :(得分:0)

我认为使用普通的OAuth2流程是可行的。您的Web应用程序使用code authorization grant获取令牌以代表用户调用API。

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

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

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

答案 1 :(得分:0)

如果Web应用程序和REST服务之间没有信任关系,则无法使用授权代码授权,因为无论如何用户都需要参与以允许Web应用程序代表用户进行调用。

如果Web应用程序和REST服务之间存在信任关系,您应该能够使用常规OpenID Connect流程在登录时获取Web应用程序的访问令牌,该令牌也可用于对REST服务的调用。

您可以将用户信息作为由Web应用程序本身或OP签名的JWT(即结构化)访问令牌的一部分传递;这将符合OAuth 2.0标准。请参阅https://tools.ietf.org/html/rfc6749#section-1.4May an OAuth 2.0 access token be a JWT?