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

WCF授权策略:模拟问题

  •  3
  • Juri  · 技术社区  · 15 年前

    我有以下情况(概述):

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

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

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

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

    这个 AuthorizationPolicy 内部调用“授权Web服务”。

    问题
    问题是我需要 冒充 我的“自定义业务Web服务”的调用者。客户端标识是正确的,但是WindowsIdentity是应用程序池用户的标识。
    注意,如果我使用 [OperationBehavior(Impersonation = ImpersonationOption.Required)] 但是 它没有 在授权政策范围内 Evaluate(...) 方法。

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

    任何人都可以在进入 IAuthorizationPolicy.Evaluate(...) 方法??

    1 回复  |  直到 15 年前
        1
  •  3
  •   Juri    15 年前

    回答我自己的问题时,总觉得有点奇怪,但为了和别人分享我所得到的,我将在这里发布“解决方案”。

    我会尽量简短:

    1. 无法在IAuthorizationPolicy.Evaluate(…)中模拟。(S4U2SELF可能会工作,因为我没有那个选项,所以没有测试它)

    正如我前面提到的,在WebService操作中模拟调用方,该操作通过将 [OperationBehavior(Impersonation = ImpersonationOption.Required)] . 因此,调用我的自定义WebService来检索主体作为我的服务操作中的第一条语句将始终有效。但我不喜欢这种方法。
    作为另一种选择,我试图在WCF服务操作的调用链中找到最新的可能点,模拟最终在其中起作用。这是我发现 OperationInvoker

    下图说明了在调用到达实际操作(从 here ):
    alt text

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

    更多信息 blog post I wrote .