通过已颁发的令牌对STS进行身份验证



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

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

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

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

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

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

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

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

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

1MB确实是一个很大的象征。在不同的领域中拆分为多个STS可能还有其他很好的理由,但您也可以通过策略或依赖方侧的权限存储来动态派生权限,而不是预先计算STS侧的所有细粒度权限,从而帮助解决问题。但我在不了解您的具体应用程序的情况下这么说,所以请随时告诉我离开:)

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新