通过Angular 2访问Windows Authenticated Web API,无需登录提示

时间:2018-02-12 11:26:07

标签: asp.net angular asp.net-web-api windows-authentication

我已经在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]; 

这是一个示例TS脚本从Angular Services向Windows Authenticated Web API发送请求。

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

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

enter image description here

我想通过此登录访问它们......

2 个答案:

答案 0 :(得分:1)

实际上,发生此登录提示的原因是,通过传递Windows Windows凭据,两种技术(ASP.net和Angular 2)之间存在通信。因此,在调用Windows身份验证的API时需要握手验证。

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

这是这样做的方法。

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

Screenshot is here...

在此处,您可以添加域,在该域​​中已经托管了您的后端API,如示例所示。 之后,它将作为受信任的域,并且进一步没有任何登录提示出现。

答案 1 :(得分:0)

我花了很多时间在这上面,我不确定是否可以做到。如果启用Anon Access,则控制器上的[授权]工作正常。但是您无法检测到用户名。

如果您禁用Anon Access,则可以获取用户名NETWORK // USERNAME,但如果您使用[Authorize]属性访问方法,则会获得您已获得的弹出对话框。

我真的不想回到用户名/密码解决方案,但看起来我不得不这样做。