代码之家  ›  专栏  ›  技术社区  ›  stucampbell

为什么我的IAuthorizationPolicy没有用我的CustomPrincipal设置Thread.CurrentPrincipal?

  •  5
  • stucampbell  · 技术社区  · 14 年前

    在Evaluate()方法中,我设置了如下自定义主体:

    evaluationContext.Properties["Principal"] = myCustomPrincipal;
    

    但是,调用服务时,Thread.CurrentPrincipal是GenericPrincipal!

    我的服务行为配置如下:

    <serviceAuthorization principalPermissionMode="Custom">
        <authorizationPolicies>
            <add policyType="MyNamespace.MyPrincipalAuthorizationPolicy, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </authorizationPolicies>
    </serviceAuthorization>
    

    我试着用反射器看发生了什么,但没有看到任何有用的东西。

    1 回复  |  直到 14 年前
        1
  •  5
  •   stucampbell    14 年前

    原来问题是我用的是定制的 IInstanceProvider

    诀窍是抓住我在学校里安排的校长 IAuthorizationPolicy OperationContext.Current .

    public object GetInstance(InstanceContext instanceContext, Message message)
    {
        var principal =
            OperationContext.Current.ServiceSecurityContext.AuthorizationContext.Properties["Principal"] 
                as MyPrincipal;
        if (principal != null)
            Thread.CurrentPrincipal = principal;
        return ObjectFactory.GetInstance(_serviceType);
    }
    

    当然,我很想知道是否有更优雅的解决方案。