繁体   English   中英

如何将 ASP.net 中的角色从匿名提升到 Windows 身份验证?

[英]How to Elevate Role in ASP.net From anonymous to windows auth?

我有几个网站同时允许匿名和窗口身份验证用户。 基本上,如果您在 Windows 系统上使用基于 IE 或 Webkit 的浏览器访问该站点,服务器会立即识别您的活动目录用户和组。

在过去,我提供了一个链接到一个仅允许当前用户登录的 Windows 身份验证页面,或返回到他们开始的位置。

我发现这种管理令人沮丧,因为我需要在每次部署后确保 IIS 为该单个页面具有正确的安全设置。

有没有更好的方法可以让用户从匿名提升到经过身份验证?

没有其他方法可以自动进行该提升。 服务器无法知道当前用户是 Windows 用户并提升它们,或自动将它们重定向到 Windows auth only 页面。 另一方面,如果每个用户都通过 Windows auth only 页面,所有不在域内的用户都会看到质询/响应对话框(用户 + 密码)。

至于确保此特殊页面具有正确安全设置的管理部分,您可以(并且应该)以某种方式自动进行检查。 例如,通过在应用程序启动时(在 Global.asax 中)查询该设置的IIS 元数据库,如果该设置不存在,则将其记录为电子邮件等。

我个人更喜欢不同的态度 - 一个特殊的“集成/部署”页面,其中包含针对我的应用程序的一系列测试,因此我可以确保服务器上的一切设置正确,即对某些文件夹的 NTFS 写入权限,SMTP 服务器的可用性在 web.config 中设置以通过等方式发送电子邮件。

注意:您正在使用 Windows 身份验证和匿名访问。 请记住,如果您考虑在将来实施 Forms Authentication,IIS 7 的架构错误(我不知道是设计使然还是由于缺陷)不允许您将应用程序设置为 Forms Authentication 并设置一个特定页面是 Windows 身份验证。 覆盖只是不起作用,这非常令人沮丧。

祝你好运!

好的,我想出了一个相当不错的方法来做到这一点……但是它并不像我希望的那么优雅,因为它不能跨应用程序工作。

基本上,如果你在你的 Anon + Integrated Auth IIS6 网站或虚拟目录中创建一个页面,我们称之为 auth.aspx,那么你可以使用这个页面来提示身份验证。

进入 IIS 设置并指定 auth.aspx 是 Integrated Auth ONLY(无匿名)。 然后在页面上的某处创建一个隐藏的 iframe。 然后我创建了一个简单的 JavaScript 操作来将 iframe 的 src 属性更新到 auth.aspx 页面。 这会强制浏览器尝试使用 NTLM 进行身份验证。 输入有效凭据后,您已成功将当前用户提升到通用匿名用户之外。

最后一步是将 Response.Redirect 包含到 auth.aspx 中,以重新加载当前页面。 假设您的 ASP.net 会话令牌设置正确,页面将重新加载并且用户将通过身份验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM