WIF STS,用户,应用程序和声明的不同“种类”

时间:2011-11-22 21:48:11

标签: authentication claims-based-identity wif claims

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

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

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

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

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

更新

一些澄清。

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

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

2 个答案:

答案 0 :(得分:1)

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

因此,这将是三个STS或具有多个端点的STS的有效方案。

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

处理顺序如下所示:

  1. 从配置存储中获取依赖方(wtrealm)的配置(我建议使用数据库来处理相当复杂的情况)
  2. 使用用户名,密码和用户类型(来自依赖方配置)验证用户
  3. 根据用户类型或信赖方特定配置添加声明。
  4. 此数据库/类结构可能与此类似: STS with multiple user types

答案 1 :(得分:0)

需要更多信息才能回答:

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

从哪个用户类型派生?如果来自存储库,您是否可以简单地为其构建声明?

<强>更新

@彼得的解决方案应该有效。

WRT。 3个STS与3个端点,

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

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

元数据 - 假设它可以动态生成,并不重要。请参阅Generating Federation Metadata Dynamically