我有一个ASP.NET MVC应用程序,可以针对Active Directory对用户进行身份验证 .
据我所知,这是当用户登录到他的计算机时发生的过程:
-
用户在本地计算机上输入凭据 .
-
本地计算机检查它是否已具有这些凭据的身份验证票证 .
-
如果没有,它会联系它可以找到的第一个提供kerberos身份验证功能的ADS服务器
-
ADS机器根据LDAP数据库检查凭据 .
-
如果他们结账,kerberos会向客户端计算机返回TGT(票证授予票证)
-
对于在AD中设置的特定持续时间(通常为8到10个小时),如果本地计算机用户希望连接到需要其裸用户帐户中不存在的权限的资源(即组成员身份,附加计算机),则此TGT将绕过任何凭据检查和共享访问等)
我的问题是当浏览器为我的应用程序发出请求时,IIS如何知道TGT?操作系统是否将每个出站http请求发送到每个网站?
1 回答
服务器(IIS)将通过返回带有
WWW-Authenticate
标头的HTTP 401错误代码向客户端(浏览器)指示它需要进行身份验证 . 客户端检测到此情况并确定它是否可以正确进行身份验证 . 这种方式的工作方式如下:通过检查请求者的服务主体名称来确定请求者是谁 . 它以
{type}/{fully.qualified.domain}
存在,例如HTTP/resource.domain.com
. 此SPN映射到AD中的计算机或服务帐户 . 如果此SPN未注册,则客户端会回退到较小的协议,如NTLM .本地计算机使用TGT从AD请求服务票证 . AD验证TGT并在请求中查找SPN,如果找到则创建根据与SPN关联的帐户的密码加密的服务票证 .
客户端通过
Authorization: Negotiate YII...
标头将服务票证发送到服务器 .服务器使用提供的密码解密服务票证,通过域加入,Windows服务运行方式配置或密钥表 .
Server将解密的服务票证的内容转换为Windows标识 .
身份将显示给应用程序 .
此流程本质上不是特定于Web的 . 这是所有服务在使用Kerberos时进行身份验证的方式 .