我已经在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);
}
重新启动浏览器时,每次都会询问此登录信息。
我想通过此登录访问它们......
答案 0 :(得分:1)
实际上,发生此登录提示的原因是,通过传递Windows Windows凭据,两种技术(ASP.net和Angular 2)之间存在通信。因此,在调用Windows身份验证的API时需要握手验证。
我很幸运通过浏览器更改隐私设置来找到解决方案。因此,我可以在没有登录提示的情况下调用API。
这是这样做的方法。
设置->打开代理设置->隐私->网站
在此处,您可以添加域,在该域中已经托管了您的后端API,如示例所示。 之后,它将作为受信任的域,并且进一步没有任何登录提示出现。
答案 1 :(得分:0)
我花了很多时间在这上面,我不确定是否可以做到。如果启用Anon Access,则控制器上的[授权]工作正常。但是您无法检测到用户名。
如果您禁用Anon Access,则可以获取用户名NETWORK // USERNAME,但如果您使用[Authorize]属性访问方法,则会获得您已获得的弹出对话框。
我真的不想回到用户名/密码解决方案,但看起来我不得不这样做。