gpt4 book ai didi

c# - WCF 授权策略 : Impersonation Problem

转载 作者:行者123 更新时间:2023-11-30 16:32:22 24 4
gpt4 key购买 nike

我有以下情况(大纲):

授权网络服务
此服务被调用并验证(通过执行给定的业务逻辑)用户是否有效。

自定义业务网络服务
这是为商业应用程序创建的一些网络服务,它在内部调用“授权网络服务”以验证调用商业网络服务的帐户。

我通过在“自定义业务 Web 服务”中使用 WCF 服务授权实现了这个逻辑。基本上我配置

<serviceAuthorization principalPermissionMode="Custom">
<authorizationPolicies>
<add policyType="MyCompany.Authorization.WCF.AuthorizationPolicy, MyCompany.AuthorizationDll"/>
</authorizationPolicies>
</serviceAuthorization>

AuthorizationPolicy 在内部调用“Authorization Webservice”。

问题
问题是我需要模拟我的“自定义业务 Web 服务”的调用者。客户端身份是正确的,但 WindowsIdentity 是应用程序池用户的身份。
请注意,如果我使用 [OperationBehavior(Impersonation = ImpersonationOption.Required)],模拟会在服务本身内运行,但在 AuthorizationPolicy 的 Evaluate(... ) 方法。

(显然,我使用使用 Windows 身份验证凭据的传输级安全性)

有人对我如何在进入 IAuthorizationPolicy.Evaluate(...) 方法之前模拟调用者有任何提示吗??

最佳答案

总是感觉有点奇怪,回答我自己的问题,但为了与他人分享我得到的东西,我将在这里发布“解决方案”。

我会尽量简短:

  1. 在 IAuthorizationPolicy.Evaluate(...) 中模拟是不可能的。 (S4U2Self 可能有效,但没有测试,因为我没有那个选项)

正如我已经提到的,通过放置 [OperationBehavior(Impersonation = ImpersonationOption.Required)] 在 web 服务操作中模拟调用者。因此,调用我的自定义 web 服务来检索委托(delegate)人作为我的服务操作中的第一条语句将始终有效。但是我不喜欢这种方法。
作为替代方案,我尝试在 WCF 服务操作的调用链中找到模拟最终起作用的最新可能点。这是我找到 OperationInvoker 的地方。

下图说明了调用到达实际操作之前完成的调度顺序(取自 here ):
alt text

Parameter Inspection 还为时过早,模拟还没有起作用,但幸运的是它在 Operation Invoker 中起作用了。因此,通过编写自定义操作调用程序并将所有内容包装到自定义操作行为属性中,我能够优雅地解决问题。

有关根据 blog post I wrote 的更多信息.

关于c# - WCF 授权策略 : Impersonation Problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4085879/

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