如何使用OAuth 2.0保护多个资源服务器?

时间:2012-02-23 07:56:14

标签: oauth-2.0 dotnetopenauth

考虑以下分布式系统,该系统使用OAuth 2.0进行授权,使用OpenID 2.0进行身份验证。

enter image description here

哪里

  1. RS1,RS2和RS3是“资源服务器”(又称三种不同的REST API)
  2. APP1和APP2是客户
  3. AS是用于管理OAuth令牌的“授权服务器”
  4. OPENID是OpenID 2.0提供商。
  5. APP2使用RS1,而RS1又使用RS2和RS3上的资源。 RS1,RS2,RS3,APP2,AS和OPENID之间存在信任,因为它们是由同一家公司(但不同的团队)开发的。当用户第一次访问APP2时,APP2自动被授权代表用户访问RS1,RS2和RS3上的资源。

    APP1使用RS2中的资源,而RS2又使用RS3中的资源。 APP1是第三方网站,不受信任,用户需要明确授权APP1访问RS2和RS3上的资源。

    关于OAuth 2.0的大多数示例都显示了单个资源和授权服务器之间的通信以及如何请求,发布和管理令牌。

    如何使用OAuth 2.0保护此环境?例如,APP2,RS1和RS2是否有自己的客户端标识符和客户端密码(因为它们都是另一个服务器的“客户端”)?如果是这样,当一个尝试在另一个请求(来自APP2)的中间第一次访问RS2和RS3上的资源时,如何为RS1发出访问令牌?

    我已经有AS,OPENID,APP2和RS1,它是使用ASP.NET MVC 3,WCF 4和DotNetOpenAuth 4开发的。我试图将RS2,RS3和APP1引入系统但是很难弄清楚如何资源服务器和客户端之间的授权将起作用。一切都在IIS 7.5和HTTPS下运行。

1 个答案:

答案 0 :(得分:0)

我认为APP2是一个网络应用程序,因为任何其他类型的应用程序一下载到客户端计算机就无法“信任”。

我认为您使用客户端凭据对彼此的可信应用进行身份验证是正确的。 DotNetOpenAuth 4.0测试版尚不支持客户端凭据,但希望在下周左右发布。

在OAuth 2中,客户端凭据将内置到您信任的客户端中。这些凭证将在运行时进行交换,以便刷新和访问将发送到资源服务器的令牌。您使用DNOA API将访问令牌应用于每个出站HTTP请求,该API将通过对授权服务器的另一个请求自动续订任何过期的访问令牌。