IIS Authentication 和 ASP.NET Authentication

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIS Authentication 和 ASP.NET Authentication相关的知识,希望对你有一定的参考价值。

参考技术A 用户的请求首先到达IIS服务器,在服务器允许访问的条件下,IIS将首先检查当前请求服务的用户,将请求映射到Windows用户,然后,根据这个Windows用户的身份继续后继的请求处理,在IIS中提供了多种验证请求用户身份的方式

HttpContext.Current.User.Identity.Name: [empty]
WindowsIdentity.GetCurrent().Name: IIS APPPOOL\DefaultAppPool

HttpContext.Current.User.Identity.Name: Richard-PC-01\winauth
WindowsIdentity.GetCurrent().Name: IIS APPPOOL\DefaultAppPool

但这里需要提到一个笔者在Windows docker container 里面发现的一个问题,
在container enable了IIS BasicAuthentication以后, 客户端的浏览器提交请求了以后, 并不会弹出弹出对话框要求用户输入账号

当浏览器访问设为WinAuthticaiton的IIS资源时,IIS发送两个WWW身份验证头: Negotiate和NTLM
客户端认识Negotiate 头,将选择使用Negotiate 头,之后浏览器可以选择NTLM 或Kerberos两种验证方式。

如果客户端不认识Negotiate头,只能选择NTLM头,就只能使用NTLM验证方式. NTLM验证的主要过程如下:
1)客户端首先在本地加密自己的密码成为密码散列
2)客户端向服务器发送自己的账号,这个账号是没有经过加密的,明文直接传输
3)服务器产生一个16位的随机数字发送给客户端,作为一个challenge
4 ) 客户端再用加密后的密码散列来加密这个challenge,然后把这个返回给服务器,作为response。
5)服务器把用户名、给客户端的challenge、客户端返回的response这三个东西,发送给域控制器
6)域控制器用这个用户名在SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密challenge
7)域控制器比较两次加密的challenge,如果一样,那么认证成功

IIS 的authentication 会在ASP.NET的authentication之前发生,如果认证不通过,直接会返回如401 Unauthorized此类response, 当IIS 的验证通过,那么下面将进入ASP.NET 的Authentication

ASP.NET的authentication主要有下面几种方式:

以上是关于IIS Authentication 和 ASP.NET Authentication的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IIS 中将 WCF 与 basichttpbinding only 、 SSL 和 Basic Authentication 一起使用?

如何使用 powershell 设置 IIS 的表单身份验证(system.web/authentication)的 overrideMode?

`FormsAuthentication.SignOut();` 不适用于 IIS `Windows Authentication` 选项已启用

Asp.Net Core:IAuthorizationFilter 和 Authentication Service 的执行顺序

ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null

ASP.NET Core框架探索之Authentication