工作流程如下
- 我在 IIS 中使用 webapi 将应用程序设置为窗口身份验证
- 使用 ajax 访问这个 webapi,
- 弹出登录对话框(window system dialog),我认为是匿名请求到IIS,然后响应401错误给客户端,浏览器弹出对话框。
- 我输入正确的域帐户,它通过了 IIS 窗口身份验证
请求转到 Web API,我展开“AuthorizationFilterAttribute”以验证它是否具有指定的角色。但这个帐户没有。
一个。如果我也将其响应为 401 状态。结果是登录对话框一次又一次地弹出。但期望是对话消失并进入错误页面。
湾。如果我用错误消息向客户端响应 200 状态。我无法再次弹出对话框。我猜它是由标题“Persistent-Auth:true”引起的
我从互联网上搜索并获得以下信息。
当同时满足以下两个条件时,浏览器会弹出登录提示:
HTTP 状态为 4xx WWW-Authenticate 标头存在于响应中
因此,我尝试删除“WWW-Authenticate”,但从未成功。只要我设置
“HttpResponseMessage”的“StatusCode = System.Net.HttpStatusCode.Unauthorized”,客户端浏览器总是得到“WWW-Authenticate”。似乎 IIS 中的窗口身份验证模块涵盖了这些信息。
//responseMessage.Content.Headers.Remove("WWW-Authenticate"); //responseMessage.Content.Headers.Remove("Persistent-Auth");
所以,我的问题是
如何删除“WWW-Authenticate”或“Persistent-Auth”?或者
状态为200时如何弹出登录对话框?谢谢。
乔伊