我正在为我的公司开发一个 ASP.net Web 应用程序。有些用户在内部网络(Intranet)中使用这个站点,有些用户使用 Internet 站点。我正在使用 Windows 身份验证模式。
我需要找到一种方法,不对Intranet 用户提示Windows 身份验证模式,而对 Internet 用户提示 Windows 身份验证模式。
我怎样才能做到这一点?
我正在为我的公司开发一个 ASP.net Web 应用程序。有些用户在内部网络(Intranet)中使用这个站点,有些用户使用 Internet 站点。我正在使用 Windows 身份验证模式。
我需要找到一种方法,不对Intranet 用户提示Windows 身份验证模式,而对 Internet 用户提示 Windows 身份验证模式。
我怎样才能做到这一点?
根据您的描述,IIS 中的 Windows 身份验证可以解决问题。
首先是一些链接:
但是请注意以下几点:
如果满足以下所有条件,将发生单点登录 (SSO)(即在不提供用户名和密码的情况下访问应用程序):
在任何其他情况下,系统都会提示用户输入 Active Directory 域中帐户的凭据(用户名和密码)。因此,从互联网访问您的网络服务器的用户会收到一个弹出窗口,要求他们提供用户名和密码。
请注意,对于不使用单点登录的用户(提示用户输入用户名和密码),HTTP 身份验证模式很可能是 BASIC,这意味着任何可以拦截该连接的人都可以看到正在交换的用户名和密码。如果您使用这种技术,请确保客户端和服务器之间的连接是加密的(HTTPS 或者可能是 VPN)。
确保您的 Web 服务器在域上运行,并且您的所有 Intranet 用户都具有对 Web 服务器上包含您的网站的文件夹的读取权限。
然后,确保您的 web.config 中有(假设您想检测哪个域用户正在访问您的站点。
最后,打开 IIS 管理器并右键单击该网站并选择“属性”。从那里单击“目录安全”选项卡,然后单击“身份验证和访问控制”中的“编辑”。取消选中“匿名访问”并确保选中“集成 Windows 身份验证”。这应该使网站按预期运行(假设您的 Intranet 客户端使用 IE)
据我所知,Windows 身份验证只能用于 Intranet,但您也可以包括表单身份验证来对 Internet 用户进行身份验证。此页面包含一些信息和有关如何执行此操作的教程的链接。
我可能会将应用程序部署在两个不同的服务器上。防火墙内的服务器上的 Windows 身份验证,Windows 身份验证用户可以访问和使用该服务器。在公众面前,您将 Web 配置设置为使用表单身份验证,然后担心保护与后端的连接。
但是,如果您想为此使用单个服务器,您可能需要阅读此 MSDN 文章:Mixing Forms and Windows Security in ASP.NET