操作系统中的访问令牌是什么?

2025年4月23日 | 阅读 6 分钟

访问令牌是一个描述进程或线程安全上下文的对象。令牌用于进行安全决策,并存储有关某个系统实体的防篡改信息。虽然令牌通常只用于表示安全信息,但它也可以在令牌创建时附加额外的自由格式数据。

令牌可以无需特殊权限即可复制,例如,创建具有较低访问权限的新令牌以限制已启动应用程序的访问。当进程或线程尝试与具有安全描述符的对象交互时,Windows 会使用访问令牌。在 Windows 中,访问令牌由令牌类型的系统对象表示。

令牌中包含与进程或线程关联的用户帐户的身份和权限信息。访问令牌由用户登录系统时由登录服务生成,并根据身份验证数据库验证用户提供的凭据。身份验证数据库包含构造登录会话的初始令牌所需的凭据信息,包括其用户 ID、主组 ID 以及其他信息。

令牌附加到用户会话中创建的初始进程,并由初始进程创建的后续进程继承。每当进程打开一个具有访问控制启用的资源句柄时,Windows 就会将目标对象的安全描述符中的数据与当前有效访问令牌的内容进行协调。此访问检查评估的结果表明是否允许任何访问,如果允许,则调用应用程序可以执行哪些操作(读取、写入/修改等)。

访问令牌的用途

当线程与可保护对象交互或尝试执行需要权限的系统任务时,系统会使用访问令牌来标识用户。

访问令牌是应用程序代表用户发出 API 请求的内容。访问令牌表示特定应用程序访问用户特定数据部分的授权。访问令牌包含以下信息:

  • 用户帐户的安全标识符 (SID)。
  • 用户所属组的 SID。
  • 标识当前登录会话的登录 SID。
  • 用户或用户组所拥有的权限列表。
  • 系统使用默认的 DACL 是当用户创建可保护对象而不指定安全描述符时。

访问令牌示例

此示例显示了访问令牌的内容。该令牌仅包含有关应用程序在 API 上的操作的授权信息,并且这些权限被称为范围。

{
  "iss": "https://my-domain.auth0.com/",
  "sub": "auth0|123456",
  "aud": 
  [
    "https://example.com/health-api",
    "https://my-domain.auth0.com/userinfo"
  ],
  "azp": "my_client_id",
  "exp": 1311281970,
  "iat": 1311280970,
  "scope": "openid profile read:patients read:admin"
}

访问令牌的元素

一个典型的访问令牌包含三个不同的部分,它们共同作用以验证用户访问资源的权限。大多数访问令牌包含以下三个关键元素。

What is Access Token in Operating System
  1. Header: 包含有关令牌类型和用于生成它的算法的数据。
  2. Payload: 包含有关用户的信息,包括权限和过期时间。Payload 也称为claims section,它对令牌的成功至关重要。如果您想访问特定服务器资源但未在 Payload 中获得适当的权限,您将无法访问。开发人员也可以在 Payload 中放置各种自定义数据。
    例如,来自 Google 的访问令牌可以授予对多个应用程序 (API) 的访问权限,并且所有这些凭据都通过一个访问令牌指定。
  3. Signature: 包含验证数据,以便接收者可以确保令牌的真实性。此签名通常经过哈希处理,因此很难被黑客攻击和复制。

访问令牌的类型

操作系统中提供两种类型的访问令牌:主令牌模拟令牌。每个进程都有一个主令牌,该令牌描述与该进程关联的用户帐户的安全上下文。默认情况下,当进程线程与可保护对象交互时,系统会使用主令牌。此外,线程可以模拟客户端帐户,模拟允许线程使用客户端的安全上下文与可保护对象进行交互。模拟客户端的线程同时拥有主令牌和模拟令牌。

What is Access Token in Operating System

1. 主令牌

主令牌只能与进程关联,它们代表进程的安全主体。主令牌的创建以及它们与进程的关联都是特权操作,需要在权限分离的名义下执行两种不同的特权。典型场景是身份验证服务创建令牌,登录服务将其与操作系统 shell 相关联。进程最初会继承父进程主令牌的副本。

2. 模拟令牌

模拟是 Windows NT 中实现的一种安全概念,它允许服务器应用程序在访问安全对象方面暂时充当客户端。模拟有四种可能的级别:

  • 匿名是授予服务器对匿名或未识别用户的访问权限。
  • 标识允许服务器检查客户端的身份,但不能使用该身份访问对象。
  • 模拟,允许服务器代表客户端进行操作。
  • 以及委派,它与模拟相同,但扩展到服务器连接的远程系统(通过保留凭据)。

客户端可以在连接参数中选择可供服务器使用的最高模拟级别(如果有)。委派和模拟是特权操作。模拟令牌只能与线程关联,它们代表客户端进程的安全主体。模拟令牌会通过 DCE RPC、DDE 和命名管道等 IPC 机制隐式创建并与当前线程关联。

访问令牌如何工作?

用户不需要编写自己的访问代码。服务器与设备通信,所有工作都在短时间内轻松完成。您需要遵循以下一系列步骤,例如:

  1. 登录: 使用已知的用户名和密码来证明您的身份。
  2. 验证: 服务器会验证数据并 issuing 一个令牌。
  3. 存储: 令牌会发送到您的浏览器进行存储。
  4. 通信: 每次您访问服务器上的新内容时,都会再次验证您的令牌。
  5. 删除: 当您的会话结束时,令牌将被丢弃。

您还可以使用访问令牌进行单点登录 (SSO)。一个站点的凭据将成为您进入另一个站点的密钥。您只需要遵循以下步骤,例如:

  1. 授权: 您同意使用一个站点的凭据进入另一个站点。
  2. 连接: 第一个站点连接第二个站点并寻求帮助。第二个站点创建一个访问令牌。
  3. 存储: 访问令牌存储在您的浏览器中。
  4. 进入: 第二个站点的访问令牌让您进入第一个站点。

SSO 请求会快速过期。大多数请求会在大约 10 分钟内过期,但有些请求会在 60 秒后停止进程。

访问令牌的安全性

访问令牌在互联网上的传输过程中应受到保护。不使用加密或受保护通信渠道的公司可能会允许第三方获取令牌,这意味着未经授权即可访问非常敏感的数据。谨慎是值得的。

大多数访问令牌也会过期。这个简单的步骤允许网站确保用户仍然在线和活跃,这有助于避免大规模复制或删除。过期日期可能因公司而异。