我有以下情况:
目前,大多数基于桌面的系统通过文件夹权限对用户进行身份验证(部署在使用ClickOnce的网络环境中,每个部署文件夹由单个用户授权)。但是,这并不适用于所有桌面系统;我们有两个桌面系统使用自己的嵌入式身份验证系统,如下所示:
对于这个特定的系统,数据列被归为组。因此,AD Group1中的用户可以看到列数据(1-5),Group2可以查看列数据(7-9)等等。但是,每个组的主管可以为其组看到一个额外的列( Group1的主管可以看到数据(1-5),data6 -让我们称它为组的“特殊列”);有些主管可以看到其他组列(包括“特殊列”或不包括),还有一般主管可以看到所有列,也有用户可以看到所有非特殊列。真是一团糟。
为了解决这个问题,ClickOnce还不够;因此,开发团队所做的基本上是嵌入一个特定的授权程序集,该程序集使用当前系统作为参数(它支持其他系统)查询数据库,并返回一组列名作为结果;然后,这些结果将用于另一个只检索特定用户列的查询中。
这个遗留系统即将被更新的系统所取代;经过大量的考虑(包括可维护性--系统架构是一团糟),因为它只是关于数据检索和显示,我们决定使用(一些)查询和重写数据检索逻辑。
最重要的是,现有的基于web的系统大多是硬代码许可的(if (sADLogin == "userA") {..});其中一些系统只依赖发送给特定用户的超乎直觉的URL。悲伤的。
我们希望对权限使用一种更抽象的方法(这样每个系统都可以使用相同的身份验证提供者)。使用web服务/WCF似乎是合适的(考虑到我仍然需要对基于桌面的系统和一些电子表格进行身份验证,也许使用名称);但是,我找不到合适的模式或体系结构模型。微软文档中有一种WCF Intranet模式可以解决大部分问题--只是我不能将组用作角色。然而,有一个因特网模式(http://msdn.microsoft.com/en-us/library/ff650091.aspx),它似乎处理角色问题(这就是我现在要做的),但是由于这是我第一次处理WCF安全问题,我想就这个问题有一些专家意见。
有什么想法吗?
谢谢,
发布于 2010-06-27 23:03:50
对于基于web的应用程序,可以使用内置的ASP.NET提供程序模型(请参阅:http://msdn.microsoft.com/en-us/library/aa478948.aspx),通过对Active的单点登录来简单地解决这一问题。您可以使用Active进行身份验证,也可以使用域组进行授权。有几种内置的方法--可以限制对页面的访问(使用web.config中的标记)、访问页面的某些部分(使用)和访问代码(使用User.IsInRole()或RolePermission属性)--它们都是自动工作的。对于web,这是一种标准(internet或intranet)。
对于非基于web的应用程序,您仍然可以使用相同提供者模型的特性。您还可以很容易地在Active中查找组成员。
如果你只需要知道某人在哪一组,这可能就是你应该怎么做的。如果您拥有的数据库表有一些更复杂的东西(比如委托授权),那么是的--您可能想在前面抛出一个WCF服务,并让您的所有应用程序使用它。但是,在ASP.NET的情况下,我仍然会使用提供者模型,只编写自己的RoleProvider,这样我仍然可以使用ASP.NET安全性的所有内置特性。希望这能有所帮助。
https://stackoverflow.com/questions/3127791
复制相似问题