1

我需要为同时在 Intranet 和 Internet 上使用的应用程序实现类似 Single Sign On 的功能。现在,该应用程序使用自己的表来存储用户信息,并且拥有的用户比公司的 AD 中的用户多。示例合同工/第 3 方供应商等,因此许多不属于域的 Active Directory 的用户都列在用户表中。

该应用程序有点旧,目前它使用表单来验证用户。但奇怪的是,web.config 文件中的身份验证模式有以下身份验证条目。<authentication mode="None" />

我在 web.config 中将身份验证模式更改为 Windows,在 IIS 6 中选择了集成 Windows 身份验证并取消选中匿名访问。

现在我有以下两种情况。

#1 Intranet
用户使用存储在 AD 中的系统凭据登录系统现在,如果用户点击 Web 应用程序的链接,他应该登录。我已经通过在页面加载中使用 Page.User.Identity.name 实现了这部分login.aspx 检查用户是否存在于数据库中。

#2 Internet
如果我从外部网络检查它,浏览器会提示我输入凭据。
要求是不应提示用户输入凭据,而应显示当前登录页面

我用谷歌搜索,每次都在 stackoverflow 上结束。可悲的是,这些解决方案对我来说并不奏效。

我偶然发现了 Scott在 Intranet ASP.NET Web 应用程序中启用 Windows 身份验证的这篇文章,如果您查看评论,Scott 指的是评论者使用解决方案ripster,以防应用程序从 Internet 和 Intranet 访问。虽然它对我没有效果,或者可能是我没有正确地做到这一点。

4

1 回答 1

1

看来您需要混合使用 Windows 和 Forms 身份验证:要求是不应提示用户输入凭据,而应显示当前登录页面

想分享这个。可能它可以帮助你,因为我看到人们非常喜欢下面提到的第二个解决方案。(至少当他们读到它时。)

如果您处于经典模式 - 您可以同时拥有 Windows 和 Forms 身份验证。会弹出一个警报

Challenge-based and login redirect-based authentication cannot be used 
simultaneously

但是,您可以忽略此警告。CarlosAg 说:

we decided to leave it there was because it is still behavior that many user 
scenarios  would be consider incorrect, since most of the time forms 
authentication  uses anonymous  authentication and not windows.

在这里阅读

现在,当您想使用集成模式时,这个堆栈问题:iis7 Challenge-based and login redirect-based authentication cannot be 同时使用导致这个著名的链接: http: //mvolo.com/iis-70-twolevel-authentication-with -forms-authentication-and-windows-authentication/,允许更改页面的身份验证方式。使用 Windows 身份验证时管理此问题的另一种方法是使用代码管理用户名:

string user = Request.ServerVariables["LOGON_USER"];

请参阅此链接:http ://beensoft.blogspot.in/2008/06/mixing-forms-and-windows-authentication.html ,它提供了一种混合表单和 Windows 身份验证的不同方式。

于 2013-07-30T01:40:22.280 回答