Windows本地及Active Directory环境下凭据身份验证流程问询
Windows本地及域环境下的身份验证流程解析
嘿,这个问题问得很关键,正好触及Windows身份验证机制的核心,我给你拆解得明明白白:
一、Windows本地机器的身份验证流程
当你在本地登录界面输入用户名和密码后,整个验证流程是这样的:
- 系统首先会对输入的密码进行哈希处理(默认采用NTLM哈希算法,现在也支持更安全的变体,但本地场景下默认还是NTLM)
- 接着系统会调取本地的身份验证数据库,查找对应用户名的存储条目,取出其中加密保存的密码哈希值
- 最后把输入密码生成的哈希和数据库里存储的哈希做比对:如果完全匹配,就授予登录权限;不匹配则直接提示密码错误
二、Windows的本地身份验证数据库
当然有!Windows本地的身份验证核心数据库就是安全账户管理器(SAM):
- 它的物理存储路径是
C:\Windows\System32\config\SAM - SAM是加密的数据库,里面存储了本地用户的账户信息、加密后的密码哈希(绝对不能直接读取明文)、权限配置等关键数据
- 这个数据库受系统严格保护,哪怕是管理员权限也不能直接打开编辑,只能通过「用户账户」控制面板、
net user命令或者PowerShell cmdlets这类官方渠道来管理账户
三、接入Active Directory后的身份验证流程
当机器加入AD域后,身份验证体系会切换到域级模式,默认使用Kerberos协议(比NTLM更安全),流程大致如下:
- 用户输入域用户名和密码后,本地机器会向域控制器(DC)发送身份验证请求,附带用户的身份标识
- 域控制器首先验证该用户是否为域内合法账户,随后生成一个会话密钥和票据授予票据(TGT),用用户的密码哈希加密后返回给本地机器
- 本地机器用用户输入的密码哈希解密TGT,再用这个TGT向域控制器请求服务票据(ST)——这个票据是用来访问域内特定资源(比如文件服务器、域内其他机器)的凭证
- 拿到服务票据后,本地机器就可以和目标资源建立安全会话,完成身份验证
- 补充:如果Kerberos协议无法正常工作(比如域控制器不可达、DNS解析出错),系统会自动降级到NTLM协议,此时验证逻辑类似本地验证,但验证请求会发送到域控制器的域级账户数据库(也就是AD的核心账户存储)
内容的提问来源于stack exchange,提问作者jasmine




