token详解

token详解token 详解 token

大家好,欢迎来到IT知识分享网。

token(令牌) 是一种在计算机系统中用于标识用户身份、授权访问权限或传递安全信息的数字签名凭证,以下详细阐述Token的组成,以及在身份验证、授权和Web服务这三个方面的作用与实践:

目录

一、token的组成

1、JWT (JSON Web Token)

2、非JWT Token

3、加密Token

二、身份验证(Authenticatin)

三、授权(Authorization)

四、Web服务


token详解

一、token的组成

1、JWT (JSON Web Token)

JWT是最常用的Token格式之一,其组成非常明确且标准化。一个JWT由三部分组成,各部分之间用.(点号)分隔:

1、Header(头部)

描述Token的基本元数据,通常包含:

  • typ (type): 标识Token的类型,对于JWT,通常是 “JWT”。
  • alg (algorithm): 指定用于签名Token所使用的加密算法,如 “HS256″(HMAC SHA-256)、”RS256″(RSA with SHA-256)等。

Header通常以Base64 URL安全编码表示。

2、Payload(载荷)

存储实际的声明(claims),即携带的用户信息和额外数据。常见的标准声明包括:

  • iss (issuer): 发行Token的实体。
  • sub (subject): Token所代表的主体(如用户ID)。
  • aud (audience): 接收Token的受众(如服务端API)。
  • iat (issued at): Token的发行时间。
  • exp (expiration time): Token过期时间,以Unix时间戳表示。
  • jti (JWT ID): Token的唯一标识符,有助于防止重放攻击。

除此之外,还可以包含自定义声明,用于传递特定应用所需的信息。Payload同样以Base64 URL安全编码表示。

3、Signature(签名)

假设我们有一个使用HS256算法签名的JWT,其内容如下:

Header:

{ "alg": "HS256", "typ": "JWT" }

Payload:

{ "sub": "", // 用户ID "name": "John Doe", "email": "", "iat": , // 发行时间(Unix时间戳) "exp": , // 过期时间(Unix时间戳) "role": "user" // 用户角色 }

Signature: (由Header和Payload经过HS256算法与密钥secret计算得出,此处省略实际计算过程)

将上述三个部分分别Base64 URL安全编码后,以.连接,得到完整的JWT:

eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImVtYWlsIjogImpvaG4uZG9lQGV4YW1wbGUuY29tIiwgImlhdCI6IDE1MTYyMzkwMjIsICJleHAiOiAxNTE2MjM5MzIyLCAicm9sZSI6ICJ1c2VyIn0.(此处为Base64编码后的Signature)

2、非JWT Token

对于非JWT类型的Token,其组成可能更为灵活,但通常仍包括以下核心元素:

1、身份标识符

用户的唯一标识符,如用户ID(uid)。这是识别Token关联用户的最基本信息。

2、时间戳

发行时间(iat)和/或过期时间(exp),用于判断Token的有效期。过期时间有助于确保短期访问权限,并减少长期未使用的Token带来的安全风险。

3、签名或哈希

使用密钥和特定算法(如HMAC、RSA等)对Token的其他部分或部分信息进行签名或哈希运算,生成一个验证Token完整性和来源的值。这可以防止Token被篡改。

4、附加信息(可选)

角色、权限、会话ID、设备信息等附加数据,根据应用需求可能包含在Token中,用于更精细的访问控制和上下文识别。

例如,一个简单的基于HMAC-SHA256签名的自定义Token格式可能如下:

Token内容:

uid=&iat=164¾&exp=&hmac=(此处为HMAC-SHA256签名)

其中:

  • uid= 表示用户ID。
  • iat= 表示发行时间(Unix时间戳)。
  • exp= 表示过期时间(Unix时间戳)。
  • hmac= 后跟的是对uid=&iat=&exp=这部分内容,使用HMAC-SHA256算法与密钥计算出的签名。

3、加密Token

对于需要更高安全级别的场景,Token可能会采用加密方式来保护敏感信息。加密Token除了包含上述组成部分外,还会对载荷(Payload)部分进行加密处理,使得未经解密无法直接读取其中的内容。解密通常需要持有对应的解密密钥。

加密Token通常会对Payload进行加密处理,以保护敏感信息。例如,使用AES对称加密算法加密Payload:

加密前Payload:

{ "sub": "", "name": "Jane Smith", "email": "", "iat": , "exp": , "sensitiveInfo": "Confidential data" }

加密后Payload:

(此处为AES加密后的密文)

Token整体可能包含加密后的Payload、加密算法标识、IV(初始化向量,对于某些加密模式是必需的)、以及用于解密的密钥标识(如密钥ID)。实际格式取决于系统设计,但关键在于,未经解密密钥,无法直接读取Payload中的敏感信息。

二、身份验证(Authenticatin)

token在网络通信中的身份验证过程通常包括以下步骤:

1、用户登录:

用户向服务器提供有效的身份凭证(如用户名、密码),经过服务器验证通过后,表明用户身份已得到确认

2、token生成:

服务器在用户身份验证成功后,生成一个Token。这个Token通常包含用户标识符、过期时间、可能还有一些其他安全属性(如发行时间、会话ID等)。对于某些Token类型(如JWT),还可能包含用户的角色、权限等附加信息。

3、token发放

服务器将生成的Token返回给用户端(如浏览器、移动端应用)。用户端可以将其存储在Cookie、LocalStorage、HTTP Only Cookie、内存中,或者作为HTTP请求头的一部分发送。

4、token携带:

5、服务器验证:

服务器接收到请求后,首先提取请求中的Token。然后,根据Token的类型和配置,服务器执行相应的验证逻辑,如:

  • 验证Token的签名以确保其未被篡改。
  • 检查Token是否已过期。
  • 核实Token中的用户标识符是否存在且有效。
  • 解析Token中的附加信息,如角色、权限等。

如果Token验证通过,服务器认为请求发起者的身份已得到确认,从而完成身份验证过程。

三、授权(Authorization)

Token在网络通信中实现授权的主要方式如下:

权限编码:

Token可以内嵌用户的权限信息,如角色、操作权限、访问资源的范围等。这些信息通常在Token生成时被服务器写入,并在验证Token时被解析和使用。

访问决策:

当服务器接收到带有Token的请求时,除了验证Token以确认用户身份外,还会进一步检查Token中包含的授权信息,以确定用户是否有权执行请求的操作或访问请求的资源。这一步骤可能涉及:

  • 解析Token载荷中的权限字段(如scope、roles等)。
  • 将Token中的权限与请求所需的权限进行比较。
  • 根据比较结果决定是否允许请求继续执行。

细粒度控制:

Token可以支持细粒度的访问控制策略,如基于资源的访问控制(RBAC)、基于属性的访问控制(ABAC)等。服务器可以根据Token中编码的权限数据,精确控制用户对特定资源的操作权限,如读、写、删除等。

四、Web服务

Token在Web服务场景中的应用包括:

无状态服务:

使用Token可以实现无状态的Web服务。因为Token自身包含了必要的身份和权限信息,服务器无需在本地存储会话状态(如传统Session)。这样不仅简化了服务端架构,提高了可扩展性,还利于跨域通信和微服务架构下的身份验证。

API访问控制:

对于RESTful API和微服务架构,Token是实现API访问控制的标准手段。客户端(如移动应用、第三方服务)通过提供有效的Token来访问受保护的API资源。服务器通过验证Token,确保只有授权的客户端才能访问相应的API。

跨域支持:

Token不受同源政策限制,可以在不同域名或子域之间自由传递,因此非常适合实现跨域的身份验证和授权。这对于构建多客户端、多平台的Web服务至关重要。

OAuth 2.0 & OpenID Connect:

Token在OAuth 2.0协议中起着核心作用,用于授权第三方应用访问用户在授权服务器上的资源。OAuth 2.0定义了多种Token类型,如Access Token(用于访问资源)、Refresh Token(用于刷新Access Token)等。OpenID Connect则在OAuth 2.0基础上扩展了身份验证功能,使用ID Token传递用户身份信息。

单点登录(SSO):

Token使得用户在一个系统中登录后,能够无缝访问多个相关系统,无需重新验证身份。SSO系统通过Token在各个子系统间传递用户身份信息,实现统一的身份验证和授权管理。

总的来说,Token在网络通信中充当了身份验证的凭证、授权决策的基础和Web服务安全交互的关键纽带。它通过封装和传递用户身份、权限信息,实现了用户身份的远程验证、资源访问的精细化控制以及无状态、跨域的Web服务安全交互。无论是简单的Web应用登录验证,还是复杂的API访问授权,Token都在其中起到了至关重要的作用。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113457.html

(0)
上一篇 2025-12-14 13:20
下一篇 2025-12-14 13:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信