我正在关注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,但现在......
我一直收到错误:
“申请校长许可失败。”
知道什么是错的吗?
答案 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应用程序中执行此操作。