通过搜索 Windows 身份验证方法和协议,我决定了解在一个简单的可执行文件中使用的 Negotiate、Kerberos 和 NTLM 之间的确切区别,然后再将其与 IIS 和 Web 身份验证一起使用。
我取得了很好的结果,但我仍然需要有关 Negotiate 和 Kerberos 的更多详细信息。
我有以下情况:
我创建了一个非常简单的 C# windows 窗体应用程序,它显示一个消息框,显示以下值:
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
请注意,我是本地计算机上具有管理员权限的域用户,我有以下结果:
当我在主动连接到 DC 时运行 exe 文件(双击)时,我得到了“协商”。
当我在主动连接到 DC 时运行 exe 文件(以不同用户身份运行/使用本地用户)时,我得到了“NTLM”。
当我使用“以管理员身份运行”或“以不同用户身份运行”运行 exe 文件时,我得到了“Kerberos”。
当我使用本地帐户在本地登录时运行 exe 文件时,我得到了“NTLM”。
我了解 LSA 将对本地帐户使用NTLM。此外,我了解 Active Directory 使用Kerberos对域用户和计算机进行身份验证。
我的问题是,为什么当我通过(双击)使用我的帐户运行 exe 或使用我的相同帐户“以不同用户身份运行”时,我得到协商身份验证类型?
更新:我注意到以下内容:
- 如果本地用户正在运行 exe,那么它是NTLM
- 如果域用户运行 exe,那么它是Negotiate(如果该用户是本地管理员)但是是Kerberos(如果该用户不是本地管理员)
- 如果域管理员运行 exe,那么它是Kerberos
我只是澄清一下这种行为。