什么是不同类型的Windows令牌以及它们有何不同?

时间:2012-02-05 14:15:13

标签: windows windows-authentication windows-security

最近我一直在处理Windows LogonUser API。 LogonUser api根据传递给API的dwLogonType返回不同​​的令牌。该文件提到:

  

•该函数返回模拟令牌,而不是主令牌。您   不能直接在CreateProcessAsUser函数中使用此标记。   但是,您可以调用DuplicateTokenEx函数来转换   令牌到主令牌,然后在CreateProcessAsUser中使用它。

     

•如果您将令牌转换为主令牌并在其中使用它   CreateProcessAsUser启动一个进程,新进程无法访问   其他网络资源,如远程服务器或打印机,通过   重定向器。例外情况是,如果网络资源不是   访问受控,然后新进程将能够访问它。

我对不同的令牌类型感到困惑。我想了解什么是不同的Windows令牌类型以及它们有何不同?

1 个答案:

答案 0 :(得分:2)

历史上(如17年前):

如果作为用户U在服务器B上运行的进程想要以同一用户身份连接到服务器C,则服务器之间的身份验证协议要求服务器B知道用户U的密码。

如果用户U在服务器B上登录,则这不是问题(用户必须输入密码)。

但是,假设用户U实际上是在客户端A上登录并且正在连接到服务器B(可能是邮件服务器)。然后服务器B可以安全地确定它确实是用户U连接,但服务器B从未看到U的密码,因此它无法代表U连接到服务器C.

这种区别自然会产生两种用户标记:

  • 表示“真正”登录并可以连接到其他网络资源的用户的主要令牌。
  • 表示实际登录到另一台计算机的经过身份验证的用户的模拟令牌,因此该令牌不能用于访问其他网络资源(因为操作系统不知道密码,而且服务器间身份验证协议需要该密码)。

回到今天,事情变得更加复杂,例如,Kerberos身份验证支持跨多个服务器的委派,但除非您明确启用此功能,否则上述相同的限制仍然适用。

回到你的问题,你提到的限制只适用于你要求LOGON32_LOGON_NETWORK令牌的情况。正如文档所说,这是一个快速登录网络服务器,不需要访问其他网络资源;如果确实需要此访问权限,请选择其他登录类型。

如需进一步阅读,this article已过期,但涵盖了各种假冒和授权选项。