通过本地Windows组授予WCF RIA权限

时间:2011-09-13 14:06:35

标签: c# silverlight authorization wcf-ria-services

我目前正在为我的公司开发基于WFC RIA的Silverlight业务应用程序(仅限内联网)。在尝试授权用户时遇到了一些问题。情况如下:

该应用程序在我们的Windows域中运行,因此使用Windows身份验证,该身份验证已经运行良好。对某些域服务操作的访问应限于某个组的成员(假设“管理员”)。该组在托管应用程序的服务器上本地可用,并且已用于限制对SQL Server实例的访问。无法将此组添加到域中并使其在全局中可用。

我知道我可以通过RequiresRole[]属性限制对域服务方法的访问。但问题是,用户的本地组成员身份未加载到通过WebContext.Current.User可用的用户对象中,因此授权失败。

有没有解决方法或更好的方法来做到这一点?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您是否尝试在要限制的服务方法上设置“PrincipalPermission”属性?

[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
public string GetResult()
{
   return "result";
}

祝你好运, 罗

答案 1 :(得分:0)

我解决了我的问题。

我所做的是将AspnetDb数据库复制到服务器计算机上的SQL Server实例。此数据库包含有关用户,角色等的所有信息,并由ASP.NET角色管理器用于授权目的。此数据库通常位于Web项目的项目文件夹中(在App_Data目录中)。要使新配置生效,必须更改Web.config中的连接字符串 (更多详情:http://weblogs.asp.net/scottgu/archive/2005/08/25/423703.aspx)。

我手动将新用户添加到数据库中。您在此处输入的用户名必须与Windows用户名匹配(例如DOMAIN \ USER_NAME)。然后,您可以向数据库添加新角色,并为所有用户提供其特定角色。

ASP.NET角色管理器会在应用程序启动时自动加载角色/用户,您可以通过RequiresRole[]属性限制对域服务方法的访问。

此外,还有一种基于角色成员资格动态显示/隐藏/启用/禁用用户控件的方法,请参见此处:http://blogs.msdn.com/b/kylemc/archive/2010/05/04/authorization-sample-201.aspx