在没有登录提示的情况下,通过角度2访问经过Windows身份验证的Web API

人气:512 发布:2022-10-16 标签: asp.net asp.net-web-api windows-authentication angular

问题描述

我已经在Angular2中开发了前端应用程序,在ASP.net web API中开发了后端应用程序。我已将Windows身份验证设置为启用,因为我希望检测发出请求的用户。这两个应用程序都托管在IIS服务器(Windows Server 2012)中。 当我加载角度应用程序时,它加载登录提示,当提供正确的用户凭据时,数据加载正确发生。 但我想知道一种方法,可以在没有登录提示的情况下加载它们,自动进行验证。

这是我在Web API中检测请求用户的方式。

string user = HttpContext.Current.Request.ServerVariables["LOGON_USER"]; //Get the current user...
userID = user.Split('\')[1]; 

这是从角度服务向Windows身份验证的Web API发送请求的TS脚本示例。

getPersonalInfo(): Observable<IPersonalInfo> {
        return this._http.get(localStorage.getItem('WebApiURL') +"api/PersonalInfo/" , { withCredentials: true })
            .map((response: Response) => <IPersonalInfo>response.json())
            .catch(this.handleError);
    }

重新启动浏览器时,此登录每次都会询问。

我想在不使用此登录名的情况下访问它们...

推荐答案

实际上,之所以会出现此登录提示,是因为两种技术(ASP.net和角度2)之间通过传递Windows凭据进行通信。因此在调用Windows认证的API时需要握手认证。

我很幸运地通过浏览器更改隐私设置找到了解决方案。因此,我能够在没有登录提示的情况下调用API。

以下是实现这一点的方法。

设置->打开代理设置->隐私->站点

在这里,您可以添加已经托管后端API的域,如示例所示。 在此之后,它将被视为受信任域,并且不会出现任何登录提示。

194