WCF中的PrincipalPermission身份验证出错

时间:2012-03-08 08:42:06

标签: c# asp.net wcf security

我正在关注Pluralsight video on Authentication

我正在尝试将简单的PrinciplePermission身份验证添加到我的Web服务中:

    [PrincipalPermission(SecurityAction.Demand, Role = "Computer\\Group")]
    public String testDBConnection()
    {
        return "success";  
    }

在我发送的WCF客户端中:

    client.ClientCredentials.UserName.UserName = "Alice";
    client.ClientCredentials.UserName.Password = "alice";

我创建了这个组,并根据视频添加了Alice,但现在......

我一直收到错误:

“申请校长许可失败。”

知道什么是错的吗?

2 个答案:

答案 0 :(得分:3)

当请求到达时,您需要一些代码在服务器上创建IPrincipal

执行此操作的最简单方法可能是使用ASP.NET RoleProvider,您需要为其配置行为,例如:

<system.serviceModel>
  ...
  <behaviors>
     <serviceBehaviors>
       <behavior name=...>
           ...
          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
                        roleProviderName="MyRoleProvider" />
        </behavior>
     </serviceBehaviors>
     ...

<system.web>
  ...
  <roleManager enabled="true" defaultProvider="MyRoleProvider">
    <providers>
      <clear/>
      <add name="MyRoleProvider" 
      ...

如果您以这种方式正确配置RoleProvider,那么Thread.CurrentPrincipal将自动设置,并且它应该有效。

答案 1 :(得分:1)

主要对象是一个只读对象,在加载时将其设置为应用程序安全设置的一部分。我能够绕过它的方式是创建一个继承IPrincipal的类。您需要在WCF应用程序中执行此操作。