gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:18:57 24 4
gpt4 key购买 nike

对于我的 WCF 服务,我已经实现了一个 IAuthorizationPolicy 并将其连接(并且可以确认它正在被使用)。

在 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>

我尝试使用反射器查看发生了什么,但没有看到任何有用的信息。

我做错了吗?是否缺少某些配置?

最佳答案

对于围绕这个问题的风滚草,我并不感到惊讶。我在问题中详述的方法没有任何问题。

原来问题是我使用的是自定义 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);
}

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

关于c# - 为什么我的 IAuthorizationPolicy 没有使用我的 CustomPrincipal 设置 Thread.CurrentPrincipal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3364921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com