通过Issued Token对STS进行身份验证

时间:2013-08-06 18:08:47

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

我正在努力联合具有各种领域和非常细粒度权限的应用程序。各个区域中的每一个都具有联合WCF端点以与服务器进行通信。由于细粒度的权限,包含所有权限的单个标记可能大到1MB,可能更多。

要求规定在初始登录过程后,用户的用户名和密码凭证不得保留在我们的代码库中。无法组合权限以创建较小的集。我们正在使用Thinktecture.IdentityServer来实现STS。

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

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

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

2 个答案:

答案 0 :(得分: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端的细化权限。但是我在不知道你的具体应用的情况下说这个,所以请随时告诉我离开:)

答案 1 :(得分:1)

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

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

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

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