我有一个公开某些方法的网络服务。我想限制某些方法对特定用户组的访问。在通过互联网搜索时,我发现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。
我知道,我在这里遗漏了一些东西。任何帮助表示赞赏。
谢谢,
答案 0 :(得分:1)
这听起来像是用户身份验证问题。如果您不知道谁是该用户,您将无法使用WindowsPrincipal了解权限。
请确保您的网站 不 使用Asp.Net模拟并启用了表单身份验证。
IIS - &gt;网站 - &gt;认证
此致