【问题标题】:Windows Identity Foundation (WIF) - ClaimsAuthenticationManagerWindows 身份基础 (WIF) - ClaimsAuthenticationManager
【发布时间】:2012-04-14 15:22:32
【问题描述】:

我有类似于下面sn-p的代码(取自http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/

public class Transformer : ClaimsAuthenticationManager
{
    public override IClaimsPrincipal Authenticate(string endpointUri, IClaimsPrincipal incomingPrincipal)
    {
        var claimName = "customClaimType";
        // expensive operation
        var claimValue = [from expensive operation];

        incomingPrincipal.Identities[0].Claims.Add(new
          Claim(claimName, claimValue));

        return incomingPrincipal;

    }
}

在文章 (http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/) 中,Dominick 指出,如果我们不想在每次请求时从数据存储中检索这些(昂贵的)声明,那么我们可以使用 SAM(SessionAuthenticationModule)。但是,我们不能只检查该身份声明是否已经存在,然后仅在它不存在时获取该声明吗?这不能解决性能问题吗?

public class Transformer : ClaimsAuthenticationManager
{
    public override IClaimsPrincipal Authenticate(string endpointUri, IClaimsPrincipal incomingPrincipal)
    {
        var claimName = "customClaimType";
        if(incomingPrincipal.Identities[0].Claims.Where(x => x.ClaimType == claimName).Count() <= 0)
        {
            // expensive operation
            var claimValue = [from expensive operation];

            incomingPrincipal.Identities[0].Claims.Add(new
              Claim(claimName, claimValue));
        }

        return incomingPrincipal;

    }
}

我不明白为什么我们必须求助于 SessionAuthenticationModule。所以我在我的本地机器上尝试了上面的代码,并逐步验证了后续请求(在初始请求之后),不会调用昂贵的操作。现在我不确定这是在负载平衡环境(网络场)中还是在涉及共享单点登录结构的多个依赖方的真正联合组中的情况。

我非常感谢能帮助我更好地理解这一点的解释。

谢谢! -卡西。

【问题讨论】:

    标签: wif


    【解决方案1】:

    我认为你已经准确地回答了你自己的问题。与 Dominick 方法的简单区别在于,额外的“http://claims/expensive”声明被缓存在会话 cookie 中,但根据您提出的解决方案,它不是。

    【讨论】:

      【解决方案2】:

      我误解了 Dominick 的文章。他的文章是关于将 WIF 的 SessionAuthenticationModule 用于您的目的。如果您使用的是带有 WS-Fed 的 WIF,那么您可以立即使用此行为。

      只是想我会澄清这一点......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        • 2011-02-12
        相关资源
        最近更新 更多