我的后端是在IIS下运行的ASPNet WebApi2并使用Windows Authentification
。
我有2个客户:
的WinForms: 传递凭证很简单。我做了以下事情:
var credentialCache = new CredentialCache();
credentialCache.Add(new Uri(uri.GetLeftPart(UriPartial.Authority)), "NTLM", credentials);
WebRequestHandler handler = new WebRequestHandler()
{
AuthenticationLevel = AuthenticationLevel.MutualAuthRequested,
Credentials = credentialCache,
PreAuthenticate = true,
UseDefaultCredentials = false
};
client = new HttpClient(handler, true)
{
BaseAddress = uri,
};
角: 由于最终用户将使用非Windows系统中的Angular应用程序访问WebApi后端,如何通过他/她的Windows凭据? (我有一个登录界面,用户必须输入他的域名/密码)。
我想通过代码传递用户凭据。像typed_rest-client这样的东西。不幸的是,这个lib导致了构建错误,无法使用。
答案 0 :(得分:1)
您可以在此找到图书馆:https://github.com/zorgoz/Http.BasicWindowsAuthentication
注意:它尚未“发布”,它是使用自主机设计和测试的,而不是IIS集成,并且从未考虑过并行使用多种身份验证方法。不过,它甚至可以不加修改地工作。
如评论中所述,您可以尝试仅使用IIS。即使只启用了Windows身份验证而基本没有启用,如果ntlm / keberos失败,它将回退到某种基本版本。浏览器将显示登录对话框。如果您传递用户名和密码,它将进行身份验证,因为它将是常规Windows身份验证。 正如我所说,你可以在你的ajax请求中预先添加正确的标题,然后你不应该看到挑战。更多here。上述机制应该透明地工作 - 尽管我从未尝试过。
如果您想使用我的中间件,您必须决定将其放在管道中的哪个位置。使用UseStageMarker(更多here)。您会注意到,中间件可以提供有关登录失败原因的反馈。如果需要,它会在响应中添加两个标题条目,您可以在Angular客户端中检查并显示给用户。