如何使用PrincipalPermissionAttribute类

时间:2011-06-17 01:34:53

标签: c# web-services restful-authentication

我有一个公开某些方法的网络服务。我想限制某些方法对特定用户组的访问。在通过互联网搜索时,我发现PrincipalPermissionAttribute类是我需要的,但我没有得到足够好的例子。任何人都可以解释这是如何工作的吗?

这就是我的web.config文件的样子:

<System.Web>
 <authentication mode="windows">
 <authorization>
   <allow user="domain\group" />
 </authorization>
</System.Web>

现在我想限制访问的webservice方法(C#Rest Webservice)是:

public void DeleteAction(string resourceId)
{
}

我做了两件事:

1)

[PrincipalPermission(SecurityAction.Demand, role="domain\\group")]
   public void DeleteAction(string resourceId)
   {
      // delete action
   }

我收到以下错误消息:“请求主体权限失败”,第二件事是我如何使角色的值变为动态,即从Web.config文件中选择它而不是硬编码。

2)

public void DeleteAction(string resourceId)
   {
     WindowsIdentity wi = new WindowsIdentity.GetCurrent();
     WindowsPrincipal wp = new WindowsPrincipal(wi);

     if(wp.IsInRole("domain\\group"))
     {
       // delete action
     }
   }

在这种方法中,当我使用控制台程序来托管web服务时,它可以正常工作。当此服务在IIS中托管时,我无法使其正常工作。永远不会识别用户,即wp.IsInRole(“domain \ group”)返回false。

我知道,我在这里遗漏了一些东西。任何帮助表示赞赏。

谢谢,

1 个答案:

答案 0 :(得分:1)

这听起来像是用户身份验证问题。如果您不知道谁是该用户,您将无法使用WindowsPrincipal了解权限。

请确保您的网站 使用Asp.Net模拟并启用了表单身份验证。

IIS - &gt;网站 - &gt;认证

查看IIS Authentication

此致