在搜索Windows身份验证方法和协议之后,我决定在使用IIS和Web身份验证之前了解简单可执行文件中使用的Negotiate,Kerberos和NTLM之间的确切区别.
我达到了很好的效果,但我还需要有关Negotiate和Kerberos的更多细节.
我有以下场景:
我创建了非常简单的C#窗体表单应用程序,它显示了一个消息框显示的值:
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
Run Code Online (Sandbox Code Playgroud)
请注意,我是在本地计算机上具有管理员权限的域用户,我有以下结果:
当我在主动连接到DC时运行exe文件(双击)时,我得到了"Negotiate".
当我运行exe文件(作为varynet用户/使用本地用户运行),而我主动连接到DC时,我得到了"NTLM".
当我使用"以管理员身份运行"或"以不同用户身份运行"运行exe文件时,我得到了"Kerberos".
当我使用本地帐户本地登录时运行exe文件时,我得到了"NTLM".
我知道LSA会将NTLM用于本地帐户.另外我知道Active Directory使用Kerberos来验证域用户和计算机.
我的问题是,当我使用我的帐户(双击)或使用我的同一帐户"以不同用户身份运行"运行exe时,为什么我会获得协商身份验证类型?
更新:我注意到以下内容:
- 如果本地用户正在运行exe,那么它是NTLM
- 如果域用户运行exe然后它是Negotiate(如果该用户是本地管理员)但是是Kerberos(如果该用户不是本地管理员) )
- 如果域管理员运行exe,那么它是Kerberos
我只是澄清了这种行为.
ntlm kerberos windows-authentication windows-security negotiate