我们有一个托管在 IIS 中的 Web 应用程序,任何在我们的事件目录中拥有帐户的人都可以公开访问它(我们使用 AD 对用户进行身份验证)。
有一种 aspx 表单不应从公共(public)互联网访问。如果用户计算机连接到我们的域,那么该用户应该能够访问该特定表单。否则,将提示用户未授权访问页面。
我怎样才能做到这一点?
最佳答案
因此,为了确保我理解正确,您有一个网站,访问任何内容的唯一方法是通过 Windows 安全(在您的情况下为事件目录)进行验证。您没有在 web.config 或数据库中使用明确定义的用户和角色。所以我假设可以肯定地说您已经弄清楚了您的身份验证,并且它已应用于所有页面。
现在,您有一个特定的 .aspx 页面,您希望在其中限制对实际在您公司办公室的人员的访问。这些人已经拥有 AD 帐户并在现场工作并通过 VPN 连接时从他们公司发放的笔记本电脑访问您的站点,因此 AD 仍然可以做它的事情。但是您希望上述这些人在办公室里处理这个特定页面。
如果上述情况属实,那么您可以从 .aspx 中的代码隐藏文件(如果使用网络表单)中读取 IP 地址:
Console.WriteLine(Request.UserHostAddress);
如果您将 MVC 与 aspx 样式呈现引擎一起使用,则同样适用。
如果您读取地址并且它遵循以下模式之一,则它是一个内部地址:
10.x.x.x
172.16.x.x
192.168.x.x
由您来决定哪个子网是合适的。
现在,假设您的问题是您碰巧使用 Active Directory 来存储所有应用程序用户,无论他们是否实际受雇于您的公司。在那种情况下,我会想象您的用户输入一些信用,然后您通过 System.DirectoryServices(或任何您想要的)将这些输入 AD,但是您有一个特定页面应该只适用于实际员工而不适用于更大的用户群这恰好在 AD 中共存。在这种情况下,您可以为登录用户启动 DirectorySearcher 并检查他们是否属于您的 Employees 安全组(您有一个,对吗?),或者您仍然可以按照前一种情况使用基于 IP 的过滤器.
通过内部 IP 限制闻起来不对。在仅可在内部路由的特定服务器上的 IIS 中,将这一页拆分为单独的网站是否会更好?
关于c# - 限制访问部分 ASP.Net web 应用程序(只允许来自同一域的计算机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37445247/