我有一个用户已登录到Web应用程序(使用OpenID Connect进行身份验证)然后需要从单独的REST服务访问数据的方案。
REST服务需要确定用户是否有权访问所请求的数据,但如果用户确实具有权限,则应该授予Web应用程序授权,而无需用户与UI进行交互。 / p>
基本上,我需要的是一个双腿OAuth解决方案,其中客户端/信赖方完全受信任,但已经过身份验证的用户不是。
进入后,我认为OAuth可以满足这些要求,但没有一种授权类型符合要求:
这是OAuth中的一个缺口吗?或者我误解了这些拨款类型?如果OAuth不能支持这种情况,那么我是否还有其他广泛采用的开放标准?
值得注意的是:我只拥有/控制Web应用程序,而客户(所有客户都是企业)拥有/控制身份验证服务器和REST服务。因此,必须使用共享的非专有标准,以便我们的客户知道如何配置他们的服务(IBM,Microsoft,等等),以便我知道如何传递任何身份验证令牌等。
答案 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.4和May an OAuth 2.0 access token be a JWT?。