1

我们目前正在考虑实施我们自己的 STS (Microsoft WIF) 来验证我们的用户,在这个过程中,我们提出了一些我们无法回答的问题。

我们有不同类型的用户,使用不同类型的应用程序。每种类型的用户都需要一些特殊类型的声明,这些声明只与该类型的用户和应用所属的应用程序相关。请注意,我们不会控制所有客户端。

假设所有用户都使用简单的 https 使用用户名和密码 (.NET MVC3) 进行授权。用户由其类型、用户名和密码(不仅仅是用户名和密码)唯一标识。所以我需要为每种用户类型创建一个端点,以便能够区分它们。当用户授权时,我将发出一个令牌,其中包含代表用户类型的声明。有没有更简单的方法来做到这一点?我可以为每种用户类型避免一个端点(目前有三个)吗?

然后,我的令牌服务可以检查授权用户的令牌并转换声明,发出一个包含所有用户类型特定声明的令牌。到目前为止一切顺利,除了我认为的多个端点?

如果我需要多个端点,我是否也应该公开不同的元数据文档,每个端点一个?拥有一个包含所有声明描述的大型元数据文档没有任何意义,因为没有应用程序需要所有声明。

更新

一些澄清。

某些应用程序仅由某些类型的用户使用。多个用户类型不能使用一个应用程序。

根据请求来自的应用程序类型,需要针对该用户类型比较用户名和密码。每种类型的应用程序都有用户存储。这就是为什么我需要知道请求来自什么应用程序类型。我无法仅通过用户名和密码来解析类型。

4

2 回答 2

1

根据您的问题描述,听起来您有三个独立的用户“存储库”(每个用户类型一个)。

所以恕我直言,这对于三个 STS 或具有多个端点的 STS 来说是一个有效的场景。

解决此问题的另一种方法可能是通过将用户重定向到 sts 的回复方的标识符来区分用户类型。此标识符在wtrealm参数中提交。

处理顺序可能如下所示:

  1. 从配置存储中获取依赖方(wtrealm)的配置(我建议为您相当复杂的情况使用数据库)
  2. 使用用户名、密码和用户类型验证用户(来自依赖方配置)
  3. 根据用户类型或依赖方特定配置添加声明。

用于此的数据库/类结构可能与此类似: 具有多种用户类型的 STS

于 2011-11-23T15:37:21.410 回答
0

需要更多信息来回答:

某些应用程序是否仅由某些类型的用户使用?或者任何用户类型都可以访问任何应用程序?如果是前者,您可以为该应用程序配置 STS 以将该用户类型作为声明传递。每个应用程序都可以配置为拥有自己的声明子集。

用户类型从何而来?如果来自存储库,您能否不简单地为它构造一个声明?

更新:

@Peter 的解决方案应该有效。

写。3 个 STS 与 3 个端点,

许多 STS - 可以使用具有不同“代码隐藏”的相同标准端点。如果您迁移到开箱即用的解决方案,仍然可以使用。证书续订的额外工作。

一个 STS - 无法迁移自定义端点。证书续订只需更新一个 STS。

元数据 - 鉴于它可以动态生成,并不重要。请参阅动态生成联合元数据

于 2011-11-22T22:54:34.237 回答