JWT | json web token 是一种开放标准(RFC 7519),是指定一种数据格式(json) 和数据结构 (header, payload, signature) , 用于网络应用间信息传输,一般是用于客户端与服务器之间的安全校验 |
authentication | 鉴权;可以为用户创建 token,可以校验 token 有效性 |
authorization | 批准 / 授权;是一种配置,约束访问条件,比方: [Authorize(Roles = "Admin")] // 管理员才可访问 [Authorize(Policy = "EmployeeWithDepartment")] // 符合特定策略才可访问 |
bearer | 持票人,使用场景在于请求时,header 的格式 比方请求头部的参数 "Authorization" : "Bearer tokenString" |
| token part | decode (by base64) | remark |
header | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 | { "alg" : "HS256", "typ" : "JWT" } | token metadata 说明用于加密的算法范例 |
payload (有效载荷) | eyJuYW1lIjoidXNlcjEyMyIsIm5iZiI6MTczMTM5MzYzNiwiZXhwIjoxNzMxMzk3MjM2LCJpYXQiOjE3MzEzOTM2MzYsImlzcyI6InlvdXJkb21haW4uY29tIiwiYXVkIjoieW91ci1hcGktYXVkaWVuY2UifQ | { "name": "user123", "nbf": 1731393636, "exp": 1731397236, "iat": 1731393636, "iss": "yourdomain.com", "aud": "your-api-audience" } | 自定义的用户信息(claims), 以及一些须要信息: nbf : not before, token 生效时间 exp : expiration time, token 过期时间 iat : issued at 签发时间 iss : issuer of the token 签发者(比如服务端名字) aud : audience,该 token 的受众,可以是服务名称 或者 api 名称等等 |
signature | q2zUeZ3RAVIxg5CVNI2Pjq9Nfvue3_tCQagDRJmStYI | N/A | signature:是根据 header 中指定的算法以及在服务端密钥,对 payload 加密得到的哈希值; 用于服务端校验 token 是否签发自服务端。 (请求时 token 的 payload 与解密 signature 后得到的payload 需要一致,以是擅改 payload 会导致token 无效) 无状态(stateless):指服务端不需要存储任何关于用户会话的信息。 signature 的计划包管了 token 的安全性,以是不再需要另外存储用户会话状态,以此淘汰服务端压力和复杂性,做到“无状态”化。 |
Authentication 中心件主要负责验证 token ,比如检查签名是否正确,检查 token 有效期。 当 Authentication 中心件成功验证令牌后,它会将 token 中的用户信息(像是用户ID、角色等)写入到 httpContext,再传递给 Authorization 中心件。此时,Authorization 会拿到有效的 httpContext.User 属性,这是一个 ClaimsPrincipal 对象,包含了用户信息声明(claims); 若绕开了 Authentication 中心件,httpContext 直接到 Authorization ,此时会找不到正当的 httpContext.User,以是返回 401 Unauthorized 错误。 |
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |