1

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

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

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

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

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

4

2 回答 2

1

是的,您可以使用 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 端的细粒度权限。但是我在不知道您的具体应用的情况下这么说,所以请随时告诉我走开:)

于 2013-08-08T01:40:58.937 回答
1

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

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

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

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

于 2013-08-08T11:18:55.110 回答