【发布时间】:2012-02-24 00:03:32
【问题描述】:
考虑以下分布式系统,它使用 OAuth 2.0 进行授权,使用 OpenID 2.0 进行身份验证。
在哪里
- RS1、RS2 和 RS3 是“资源服务器”(又称为三种不同的 REST API)
- APP1 和 APP2 是客户端
- AS 是用于管理 OAuth 令牌的“授权服务器”
- OPENID 是一个 OpenID 2.0 提供程序。
APP2 使用 RS1,而 RS1 又使用 RS2 和 RS3 上的资源。 RS1、RS2、RS3、APP2、AS 和 OPENID 之间存在信任,因为它们是由同一家公司(但不同团队)开发的。当用户第一次访问APP2时,APP2会自动授权代表用户访问RS1、RS2和RS3上的资源。
APP1 使用 RS2 中的资源,而后者又使用 RS3 中的资源。 APP1是第三方网站,不可信,用户需要明确授权APP1才能访问RS2和RS3上的资源。
关于 OAuth 2.0 的大多数示例都展示了单个资源和授权服务器之间的通信以及如何请求、颁发和管理令牌。
如何使用 OAuth 2.0 保护这一环境?例如,APP2、RS1 和 RS2 是否有自己的客户端标识符和客户端密码(因为它们都是另一台服务器的“客户端”)?如果是这样,当 RS1 在另一个请求(来自 APP2)中间第一次尝试访问 RS2 和 RS3 上的资源时,如何为 RS1 颁发访问令牌?
我已经有 AS、OPENID、APP2 和 RS1,它们是使用 ASP.NET MVC 3、WCF 4 和 DotNetOpenAuth 4 开发的。我正在尝试将 RS2、RS3 和 APP1 引入系统,但很难弄清楚如何资源服务器和客户端之间的授权将起作用。一切都在 IIS 7.5 和 HTTPS 下运行。
【问题讨论】: