【问题标题】:Authenticate to STS by Issued Token通过颁发的令牌对 STS 进行身份验证
【发布时间】:2013-08-07 21:14:36
【问题描述】:

我正在努力将一个应用程序与多个区域和极其精细的权限联合起来。每个不同的区域都有一个联合的 WCF 端点来与服务器进行通信。由于权限细化,包含所有权限的单个令牌可以大到 1MB,甚至更多。

要求在初始登录过程之后,用户的用户名和密码凭据不得保存在我们的代码库中。权限不能组合以创建更小的集合。我们将 Thinktecture.IdentityServer 用于我们的 STS 实现。

我建议的解决方案是在 STS 中将每个端点分解为自己的领域,并且 STS 将返回一个具有为该领域指定的权限声明的令牌。为了实现这一点,我想要一个 Auth 领域,它通过用户名/密码进行身份验证,并返回一个包含用户、租户和子组 ID 的令牌,然后可以将其用作向其他领域进行身份验证的凭据。

设置 STS 以发布特定于领域的令牌已实施。剩下的唯一要求是用户名/密码不在我们的代码库中。

是否可以通过提供以前从特定领域发布的令牌来配置 STS 以允许身份验证?有没有更好的解决方案我还没有想到?

【问题讨论】:

    标签: wcf wif ws-federation thinktecture-ident-server


    【解决方案1】:

    您真正想要的是更新过期的令牌。我们不支持。而且也没有这样做的计划。

    您可以将过期时间设置为适合您的值 - 然后强制重新登录。

    1 MB 令牌不是一个好主意 - 您要么需要往返,要么创建会话亲和性。令牌旨在描述用户身份,而不是将所有可能的值转储到其中。

    为什么 RP 不通过服务调用从 IdP 加载 authZ 规则?

    【讨论】:

    • 目前的计划是从 auth 领域发出 ~12 小时到期令牌,然后使用 auth 领域令牌作为对其他领域的身份验证。据了解,IdP 不允许更新 auth realm 令牌。关于让“RP 通过服务调用从 IdP 加载 authZ 规则:”这是我不熟悉的。能否提供一个教程或示例实现的链接?
    • 而不是通过令牌传输您的 authZ 规则。创建一个网络服务,RP 可以在其中检索它们。
    • 要更深入地了解 Dominick 的目的,您已发行代币中的声明应该是一组关于委托人的属性:姓名、头衔、等级、部门、他们从事的项目等。声明不是权限,您的 STS 不应代表使用令牌的 RP 做出授权决定。应该是 RP 通过策略(规则集)运行委托人的一组声明,以便做出授权决定。理论和实践是有区别的,但至少理论上是这样。
    【解决方案2】:

    是的,您可以使用 STS B 颁发的令牌向 STS A 进行身份验证。必须将 STS A 配置为信任 STS B 作为已知的身份提供者。

    使用 thinktecture STS,我认为您可以通过配置新的 WSStar 身份提供者来做到这一点。如果一个领域 STS 添加另一个领域 STS 作为身份提供者,它应该开始接受从该领域 + 证书颁发的令牌。

    对于 WCF,设置已发行令牌通道的一种相当轻松的方法是使用 WIF CreateChannelWithIssuedToken 扩展方法:

    http://msdn.microsoft.com/en-us/library/ee517268.aspx

    1MB 确实是一个非常大的代币。在不同的领域中拆分为多个 STS 可能还有其他充分的理由,但您也可以通过使用令牌的依赖方端的策略或权限存储动态派生权限来帮助解决问题,而不是预先计算所有来自 STS 端的细粒度权限。但我在不知道您的具体应用的情况下这么说,所以请随时告诉我走开:)

    【讨论】:

    • 我假设如果 STS A === STS B 也能正常工作,并且会尝试这个。如果可行,我会将其标记为已接受的答案。关于在 RP 上使用权限存储,由于数据存储要求,目前不实用。
    猜你喜欢
    • 2020-07-17
    • 2013-06-12
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多