【问题标题】:Basic questions on setting up an access controlled intranet site - ASP .NET有关设置访问受控 Intranet 站点的基本问题 - ASP .NET
【发布时间】:2010-01-26 15:56:51
【问题描述】:

请注意:

我知道这是一个有点模糊的问题。因此,非常感谢您的耐心。

请求:

关于从哪里开始的抽象高级想法,因为此时我完全一无所知。

背景:

我正在建立一个 Intranet 站点 (ASP .NET),我们本地用户组中的用户(也被添加到我们的用户表中)将可以访问他们有权访问的 Web 应用程序。现在我正在从我的 PC 上开发并使用 SQL Server 2005 Express 作为数据库,但最终站点将托管在具有 IIS 6.0 的应用程序服务器上,并且数据库位于 SQL Server 2005 的实例上。我是一个 .NET 新手,并且这是一项艰巨的任务,但经验值一百万美元。

详情:

我们正在为我们的 Intranet 站点使用 Windows Athentication。因此,我没有使用 ASP .NET 的成员数据源。而是将所有用户信息存储在两个表 tblEmployee(我公司的所有员工)和 tblUser(内网站点的所有用户)中。

tblEmployee 具有字段 - EmployeeID、FirstName、LastName、CostCentre、Role、ManagerName、UserID

tblUser 具有字段 - EmoployeeID、UserID、ApplicationID、AccessLevel、AddedBy、DateAdded

(我已经设置了这些表格,我可以随时更改它们)。

我需要完成的事情 - 当用户访问 Intranet 站点时,我可以获得他/她的域用户名。我需要检查 tblUser 中是否存在此用户(域用户名与 tblUser 中的 UserID 相同)。如果用户存在,我们显示他/她可以访问的所有应用程序,否则显示“无访问”页面。

具体问题:

  1. 我需要“学习”哪些东西? (正如我之前所说,我是 .NET 新手,但也是一个快速学习者)

  2. 我需要使用 URLAuthorizationModule 来验证页面请求。如何从 URL 中隐藏用户名?我一直在考虑使用会话 ID ......但是我怎么知道用户是谁?我确信这是一种加密 UserID 的方法,只是找不到。

感谢您的任何反馈。即使是最小的小费也会对我有很大帮助。

【问题讨论】:

    标签: c# asp.net sql-server iis


    【解决方案1】:

    您不需要任何表格,也不需要任何一行代码。对于 Intranet 站点,最好的选择是使用 HTTP Negotiate authentication 并使用 Active Directory 组成员身份进行授权:

    • 为有权访问该站点的用户创建域安全组
    • 将授权用户添加到此组
    • 在您的 IIS 服务器上,将 UrlAuthorizationModule 添加到 IIS(通过添加/删除程序功能)
    • 您的网站上将出现一个新图标“授权规则”,使您可以为您的网站配置安全性
    • 修改站点安全性以仅允许您之前创建的组的成员查看您的站点
    • 享受

    当网站页面从不关心连接用户的身份时,这是一个完美的设置,但整个网站必须仅限于一组受信任/授权的用户。 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。

    如果您的代码确实需要调用者的身份(例如,出于审计目的),那么您必须添加一个托管模块,将身份验证信息传递到您的应用程序域。该模块是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 类似)。

    最后还有一个问题是您希望您的应用程序代码根据调用者的身份(即显示管理选项)表现出不同的行为,因此最好的选择可能是使用与 Active 集成的 role membership provider WindowTokenRoleProvider 之类的目录。

    【讨论】:

    • 您好 Remus,非常感谢您提供如此详尽的回答。在我们的例子中,页面的内容会根据用户是谁而改变。我必须为没有明确表示而道歉。但幸运的是,您已经对如何处理这种情况(角色会员提供者)给出了一些想法。我会对此做一些研究,然后发回我的设计理念。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多