【问题标题】:WIF STS, different "kinds" of users, applications and claimsWIF STS,不同“类型”的用户、应用程序和声明
【发布时间】:2011-11-22 21:48:11
【问题描述】:

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

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

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

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

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

更新

一些说明。

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

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

【问题讨论】:

    标签: authentication claims-based-identity wif claims


    【解决方案1】:

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

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

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

    处理顺序可能如下所示:

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

    为此的数据库/类结构可能与此类似:

    【讨论】:

    • 有趣的方法。看起来是解决方案的好人选。如果我们选择使用一个端点,那么暴露的元数据呢?在元数据文档中公开所有类型的声明没有多大意义,只公开属于请求应用程序的声明。还是这样?
    • 我不知道元数据在 WIF 中的作用。我的理解是暴露的元数据只适合自动化客户端配置,但我不是这方面的专家。我实现了一些类似的东西,只暴露了元数据文档中的常见声明,但我不知道这是否是一个好的解决方案,甚至是否有效。
    • 我明白了。关于你的那个数字,尤其是代表索赔的表格。这是组织存储在数据库中的索赔的常用方法吗?只是我想出了另一个包含所有声明值的表,并与用户的 FK 配对。这似乎是一个非常“扁平”的结构,当你有很多声明时,它会很快变得混乱。还是我错过了什么?如果你明白我的意思,你能有一个更面向对象的结构(或规范化)吗?
    • 我只将索赔类型存储在此数据库表中。实际声明由具有以下签名的声明提供程序类构造:IEnumerable<Claim> CreateClaims(IClaimsPrincipal principal, string claimType)。此声明提供程序从数据库中的用户记录中获取声明值(取决于声明类型)。
    • 有趣的方法彼得。你能给我一些具体的索赔例子,甚至可以说明它们是如何存储的吗?我想提供者类是某种在数据库中查询声明值的存储库?
    【解决方案2】:

    需要更多信息来回答:

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

    用户类型是从哪里派生的?如果来自存储库,您能否不简单地为它构造一个声明?

    更新:

    @Peter 的解决方案应该可行。

    写。 3 个 STS 与 3 个端点,

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

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

    元数据 - 鉴于它可以动态生成,这并不重要。参考Generating Federation Metadata Dynamically

    【讨论】:

    • 我更新了这个问题,做了一些澄清。现在对你来说更有意义了吗?
    • 感谢您对 Peters 解决方案的看法,并感谢您提供动态生成元数据的链接。
    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2015-08-23
    • 2012-04-04
    相关资源
    最近更新 更多