【问题标题】:WIF ChannelActingAs access claims from WCFWIF ChannelActingAs 来自 WCF 的访问声明
【发布时间】:2012-08-06 22:53:51
【问题描述】:

我想从 WCF 服务访问添加到 UI 层中当前主体的自定义声明。 我有一个 Web 应用程序,一旦用户通过 STS 身份验证,就会向 CurrentPrincipal 添加声明。这很好用。

    protected void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs args)
    {
        var customPrincipal = new ClaimsPrincipal(args.ClaimsPrincipal);
        var service = ServiceLocator.Current.GetInstance<IServices>();

        Thread.CurrentPrincipal = customPrincipal;
        var result = service.GetPemissions();

        foreach (var claim in result.Claims)
            customPrincipal.Identities.First().Claims.Add(new Claim(claim.ClaimType, claim.Value));                      

        Thread.CurrentPrincipal = customPrincipal;
        args.ClaimsPrincipal = customPrincipal;
    }

在某个时候,我想向 WCF 服务发出请求,并将声明传递给该服务。如果我使用 CreateChannelActingAS 传入引导令牌,我不会得到上一步添加到主体的声明。

var claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
var securityToken = claimsPrincipal.Identities.First().BootstrapToken;
using (var channel = channelFactory.Value.CreateChannelActingAs(securityToken) as IClientChannel)
{
try
  {
      invocation.ReturnValue = invocation.Method.Invoke(channel, invocation.Arguments);
  { ...

是否有任何方法可以在 WCF 服务中构造 ClaimsPrincipal 并遇到在 UI 层中添加的其他声明?我可以创建一个新的 securityToken 并通过通道传递它,还是有更好的方法来解决这个问题?

【问题讨论】:

    标签: wcf wif claims-based-identity


    【解决方案1】:

    Bootstraptoken 实际上是最初创建 WIF 身份的令牌,因此它不会包含在初始创建后添加或转换的任何声明。 WIF 的工作方式(使用安全令牌)实际上意味着调用客户端永远不能以任何方式操纵令牌内容(或者至少接收方不应该能够验证此类恶意令牌)。

    根据所选的 IDM 架构,有一些关于如何进行的选项。最简单的选择是再次调用 STS 并在 RequestSecurityToken 请求中指定所需的附加声明。然而,STS 正在考虑接受或拒绝传入的声明,并且在自定义 STS 代码中有多种处理此问题的选项。如果无法控制 STS(并且无法设置中间转发器),那么困难的方法可能是使用额外的 WCF 安全性,例如支持令牌。如果要在 WCF 道路上进一步委派,则需要手动配置和操作。

    注意警告,身份管理模型本质上是信任关系的集合,并且通过允许 STS 客户端指定站点范围(或令牌分发/联合/等的任何地方)有效声明是相当阴暗的设计.毕竟,由于声明现在来自 WCF 调用者,因此可以简单地将它们作为 WCF 方法调用中的参数传递,无论如何具有完全相同的安全级别。将它们添加到 WIF 身份令牌(正确地)的唯一好处是它们将在 ActAs/OnBehalfOf 情况下自动委托/共享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2015-08-23
      • 1970-01-01
      • 2017-02-20
      • 2012-08-18
      相关资源
      最近更新 更多