WCF 4.0:在ServiceAuthorizationManager之后调用的IAuthorizationPolicy Evaluate()CheckAccessCore():为什么?

时间:2010-12-13 10:29:36

标签: wcf

我正在处理通过Windows服务托管的WCF服务。我已经添加了自定义授权管理器和授权策略,并且我已经看到授权策略的Evaluate()方法实际上是在授权管理器的CheckAccessCore()之后调用的:不应该相反吗?

我一直在谷歌搜索并找到了一些提示,但对我没有用 (例如:link

以下是app.config的剪辑:

 <userNameAuthentication userNamePasswordValidationMode="Custom"

      customUserNamePasswordValidatorType="Reply.Platform.IoTAccessControlLibrary.IoTPwdValidator, Reply.Platform.IoTAccessControlLibrary" />

      </serviceCredentials>

      <serviceAuthorization serviceAuthorizationManagerType="Reply.Platform.IoTAccessControlLibrary.IoTServiceAuthorizationManager, Reply.Platform.IoTAccessControlLibrary">

        <authorizationPolicies>

          <add policyType="Reply.Platform.IoTAccessControlLibrary.IoTAuthorizationPolicy, Reply.Platform.IoTAccessControlLibrary" />

        </authorizationPolicies>

      </serviceAuthorization>

有人可以帮助我吗?

此致

Gianpaolo

1 个答案:

答案 0 :(得分:1)

它完全符合预期。它归结为这个简单的等式 - 如果不应该授予访问权限,那么就不需要检查访问是否应该被授权。对于您在此处提供的示例,您首先要验证用户名/密码对的正确组合,然后检查他们是否有权访问系统。在检查他们是否有权访问系统之后,您可以根据定义的策略评估他们是否获得授权。

考虑这个基本的例子:

1)用户名和密码是否与已知用户匹配?是。 (服务凭证)
2)系统上是否已启用该已知用户?是。 (服务授权)
3)该已知用户是否具有“X”的角色?是。 (IAuthorizationPolicy)

因此由WCF定义的工作流程。