请注意:
我理解这是一个有点模糊的问题。因此,非常感谢您的耐心等待。
请求:
一个抽象的高级概念,从哪里开始,因为我在这一点上完全无能为力。
背景:
我正在建立一个Intranet站点(ASP .NET),来自我们本地用户组的用户(也在我们的用户表中添加)将可以访问他们可以访问的Web应用程序。现在我正在从我的PC开发并使用SQL Server 2005 Express作为数据库,但最终站点将托管在IIS 6.0的应用程序服务器和SQL Server 2005实例上的数据库中。我是一个.NET新手,这是一项艰巨的任务,但经验值一百万美元。
详细信息:
我们正在为我们的Intranet站点使用Windows身份验证。因此,我没有使用ASP .NET的成员资格数据源。而是所有用户信息都将存储在两个表tblEmployee(我公司的所有员工)和tblUser(Intranet站点的所有用户)中。
tblEmployee 包含字段 - EmployeeID,FirstName,LastName,CostCentre,Role,ManagerName,UserID
tblUser 包含字段 - EmoployeeID,UserID,ApplicationID,AccessLevel,AddedBy,DateAdded
(我已经设置了这些表,我可以随时更改它们)。
我需要完成的任务 - 当用户访问内部网站点时,我可以获取他/她的域名用户名。我需要检查tblUser中是否存在此用户(域用户名与tblUser中的UserID相同)。如果用户存在,我们将显示他/她有权访问的所有应用程序,否则显示“无访问权限”页面。
具体问题:
我需要“学习”的一些内容是什么? (正如我之前所说的,我是一个.NET新手,但也是一个快速学习者)
我需要使用URLAuthorizationModule来验证页面请求。如何隐藏URL中的用户名?我正在考虑使用会话ID ...但是我怎么知道用户是谁?我确信这是加密UserID的一种方法,但却无法找到它。
感谢您的任何反馈。即使是最小的提示也会对我有所帮助。
答案 0 :(得分:2)
您不需要任何表格或任何单行代码。对于Intranet站点,最佳选择是使用HTTP Negotiate authentication并使用Active Directory组成员身份进行授权:
当网站页面从不关心所连接用户的身份时,这是一个完美的设置,但整个网站必须限制为一组受信任/授权用户。 IIS将负责身份验证和授权,您可以为未授权的用户配置403页面响应。整个身份验证过程发生在HTTP级别,URL中没有“用户”加密'或任何类型的“加密”。 IIS将通过SPNEGO身份验证挑战挑战浏览器,并且所有浏览器都知道如何处理该问题,通过在浏览站点的工作站上验证当前登录用户的协商进行响应(也称为集成身份验证) )。有关详细信息,请参阅Configuring URL Authorization Rules in IIS 7。
如果您不需要混淆,可以在这里停止阅读。
如果您想了解所有细节,请注意,不与ASP.Net URL授权模块相同,您可以找到大量参考资料,您可以从中进行配置.config文件。请参阅Differences Between ASP.NET URL Authorization and IIS 7.0 URL Authorization。
如果您的代码实际上需要调用者的身份(例如,出于审计目的),则必须添加将身份验证信息传递到您的appdomain的托管模块。此模块是UrlAuthorization托管模块。请注意,对于完美的1-2混乱,该模块名为UrlAuthorization,但它在名为UrlAuthorizationModule的托管模块中实现,该模块不与真正的IIS本机UrlAuthorizationModule模块相同...
如果您需要模拟调用者,那么事情会变得更复杂,因为您必须配置受信任的委派。为此,您配置ASP.Net Impersonation,然后启用约束委派以便能够从ASP.Net应用程序池访问SQL Server,请参阅How To: Use Protocol Transition and Constrained Delegation in ASP.NET 2.0(IIS 7.0类似)。
最后还有一个问题是,您希望应用程序代码根据调用者的身份(即显示管理员选项)表现不同,因此最好的选择是使用集成role membership provider与Active Directory一样,如WindowTokenRoleProvider。