在ASP.NET Windows Authentication 401响应中包含自定义内容
我们有一个内部系统,用户可以使用Windows身份验证进行身份验证,但是我们希望在401 repsonse中包含一些自定义内容,如果取消Windows身份验证对话框,则会将用户带到自定义用户名/密码身份验证页面。
当未经身份验证的用户访问某个页面时,Windows身份验证会使用401未经授权的响应和头文件进行响应
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
这会提示浏览器显示一个询问Windows凭据的对话框。 如果用户输入他们的凭证,则会有另一个握手请求 - 响应,然后用户通过身份验证并显示请求的页面。
如果用户取消该对话框,则浏览器显示原始401未授权响应的内容。 我们在Global.asax中使用Application_EndRequest来返回一些自定义内容,它将用户带到我们的自定义登录系统。
/// <summary>
/// If we are about to send the NTLM authenticate headers, include this content. Then, if the user cancels off the
/// windows auth dialog, they will be presented with this page and redirected to the username / password login screen
/// </summary>
void Application_EndRequest(object sender, EventArgs e)
{
Logger.DebugFormat("in Application_EndRequest. Response.StatusCode: {0}", Response.StatusCode);
if (Response.StatusCode == 401)
{
Response.ContentType = "text/html";
var redirectUrl = string.Format("https://mycompany.com/SSO/Login?encryptedSessionRequestId={1}",
HttpUtility.UrlEncode(Request.QueryString["encryptedSessionRequestId"]));
var text = File.ReadAllText(Server.MapPath("~/UnauthorizedError.html"));
text = text.Replace("[USERNAME_PASSWORD_LOGON_REDIRECT]", redirectUrl);
Response.Write(text);
Logger.Debug("Done writing response");
Response.End();
}
}
UnauthorizedError.html包含以下转发用户的脚本
<script language="javascript" type="text/javascript">
window.location = "[USERNAME_PASSWORD_LOGON_REDIRECT]";
</script>
当在(Win7 / IIS7.5)中本地运行时,这很好,我们使用Response.Write()发送内容,当用户取消对话框时,用户可以看到它。
但是,当远程访问站点时,例如当它在我们的开发环境中运行时,尽管我们可以从日志中看到Application_EndRequest被调用,并且我们的内容写入响应,但它在某个时刻被覆盖,所有到达浏览器的是验证标题和文本You do not have permission to view this directory or page.
1)我们如何防止这些内容被覆盖?
2)在管道中哪里可能发生这种情况?
3)有没有人有任何其他方式来实现这种行为的建议,例如与HTTP模块?
谢谢!
我浪费了很多东西来解决这个问题,但没有直接的解决方案。 这是因为win身份验证适用于iis而非站点级别,您无法控制如何验证当前请求。 根据IP,在不同的登录页面上使用重定向有几种方法。
我知道这是一个旧帖子,但我想分享这个问题的解决方案。
当更改远程请求的响应消息(读取:非本地主机)时,您需要将以下内容添加到您的配置文件中:
<system.webServer>
<httpErrors existingResponse="PassThrough"></httpErrors>
</system.webServer>
如果您不允许响应“通过”,则远程客户端将获得默认的"You do not have permission to view this directory or page"
。
我从以下地址获取了此信息:https://stackoverflow.com/a/17324195/3310441
链接地址: http://www.djcxy.com/p/71841.html上一篇: Include custom content in ASP.NET Windows Authentication 401 response