Windows Angular 2 应用程序的 Microsoft Edge 浏览器中的身份验证不起作用
Windows Authentication doesn't work in Microsoft Edge browser for Angular 2 application
在我的 Angular 2 项目中,客户端调用 Web API 方法,该方法要求用户使用 Windows 身份验证获得授权。此调用在 Internet Explorer 11、Firefox 和 Chrome 中运行良好,但在 Microsoft Edge 中运行不正常,Microsoft Edge 不显示登录对话框,但在控制台中显示 "Response with status: 401 Unauthorized for URL"。如果我尝试直接在 Edge 中打开 API Url,它会正确显示对话框,所以如果我理解正确,问题出在 Angular 2 call.
有人在使用 Microsoft Edge 浏览器时遇到过同样的问题吗?是否需要一些特殊的 header 或 Web API 配置才能解决问题?
Angular 2 服务:
let headers = new Headers();
let options = new RequestOptions({ headers: headers, withCredentials: true });
return this._http.get(this._productUrl, options)
.map((response: Response) => <IProduct[]> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
Web.Config 在 WebApi 2 项目中:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
WebApiConfig:
var cors = new EnableCorsAttribute("http://localhost:3000", "*", "*") {SupportsCredentials = true};
config.EnableCors(cors);
Global.asax:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:3000");
Response.Headers.Add("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token");
Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS");
Response.Headers.Add("Access-Control-Allow-Credentials", "true");
Response.Headers.Add("Access-Control-Max-Age", "1728000");
Response.End();
}
}
我知道这个问题很老了,但从来没有人回答过,所以这里是答案。
这是 Microsoft Edge 的 "By design" 故障。
它不适用于本地主机或机器名。
问题请看这里
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4776775/
在我的 Angular 2 项目中,客户端调用 Web API 方法,该方法要求用户使用 Windows 身份验证获得授权。此调用在 Internet Explorer 11、Firefox 和 Chrome 中运行良好,但在 Microsoft Edge 中运行不正常,Microsoft Edge 不显示登录对话框,但在控制台中显示 "Response with status: 401 Unauthorized for URL"。如果我尝试直接在 Edge 中打开 API Url,它会正确显示对话框,所以如果我理解正确,问题出在 Angular 2 call.
有人在使用 Microsoft Edge 浏览器时遇到过同样的问题吗?是否需要一些特殊的 header 或 Web API 配置才能解决问题?
Angular 2 服务:
let headers = new Headers();
let options = new RequestOptions({ headers: headers, withCredentials: true });
return this._http.get(this._productUrl, options)
.map((response: Response) => <IProduct[]> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
Web.Config 在 WebApi 2 项目中:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
WebApiConfig:
var cors = new EnableCorsAttribute("http://localhost:3000", "*", "*") {SupportsCredentials = true};
config.EnableCors(cors);
Global.asax:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:3000");
Response.Headers.Add("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token");
Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS");
Response.Headers.Add("Access-Control-Allow-Credentials", "true");
Response.Headers.Add("Access-Control-Max-Age", "1728000");
Response.End();
}
}
我知道这个问题很老了,但从来没有人回答过,所以这里是答案。
这是 Microsoft Edge 的 "By design" 故障。
它不适用于本地主机或机器名。
问题请看这里
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4776775/