加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何将Windows凭据从Angular客户端传递到WebAPI?

发布时间:2020-12-14 02:21:34 所属栏目:Windows 来源:网络整理
导读:我的后端是在IIS下运行的ASPNet WebApi2,它使用 Windows Authentification. 我有2个客户: WinForms: 传递凭证很简单.我做以下事情: var credentialCache = new CredentialCache(); credentialCache.Add(new Uri(uri.GetLeftPart(UriPartial.Authority)),"
我的后端是在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,};

> Angular:
由于最终用户将使用非Windows系统中的Angular应用程序访问WebApi后端,如何通过他/她的Windows凭据? (我有一个登录界面,用户必须输入他的域名/密码).

我想通过代码传递用户凭据.像typed_rest-client这样的东西.不幸的是,这个lib导致了构建错误,无法使用.

解决方法

在这里您可以找到图书馆: https://github.com/zorgoz/Http.BasicWindowsAuthentication

注意:它尚未“发布”,它是使用自主机设计和测试的,而不是IIS集成,并且从未考虑过并行使用多种身份验证方法.尽管如此,它甚至可以不加修改地工作.

如评论中所述,您可以尝试仅使用IIS.即使只启用了Windows身份验证而基本没有启用,如果ntlm / keberos失败,它将回退到某种基本版本.浏览器将显示登录对话框.如果您传递用户名和密码,它将进行身份验证,因为它将是常规Windows身份验证.
正如我所说,你可以在你的ajax请求中预先添加正确的标题,然后你不应该看到挑战.更多here.上述机制应该透明地工作 – 尽管我从未尝试过.

如果您想使用我的中间件,您必须决定将它放在管道中的哪个位置.使用UseStageMarker(更多here).您会注意到,中间件可以提供有关登录失败原因的反馈.如果需要,它将在响应中添加两个标题条目,您可以在Angular客户端中检查并显示给用户.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读