WCF中的PrincipalPermission身份验证出错

本文关键字:出错 身份验证 PrincipalPermission 中的 WCF | 更新日期: 2023-09-27 18:27:18

我正在关注一个关于身份验证的Pluralsight视频。

我正在尝试为我的web服务添加简单的PrinciplePermission身份验证:

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

在我的WCF客户端中,我正在发送:

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

我已经创建了这个小组,并根据视频将Alice添加到其中,但现在。。。。

我一直收到错误:

"请求主体权限失败。"

知道怎么了吗?

WCF中的PrincipalPermission身份验证出错

当请求到达时,您需要一些代码来在服务器上创建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将自动设置,并且它应该可以工作。

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