一、什么JSON Web Tokens?
JSON Web Tokens是一种开放的行业标准 RFC 7519方法,用于在双方之间安全地表示索赔。
JWT.IO允许您解码,验证和生成JWT。其中。JWT 支持任何语言的解码。
二、JWT 的结构
JWT由三部分组成:
1.Header :头信息
标头通常由两部分组成:令牌的类型,即JWT,以及正在使用的签名算法
如:{ "alg": "HS256", "typ": "JWT"}
然后,这个JSON被编码为Base64Url,形成JWT的第一部分。
2.Payload :有效载荷
令牌的第二部分是有效负载,其中包含声明。声明是关于实体(通常是用户)和其他数据的声明。
示例有效负载可以是:{ "sub": "1234567890", "name": "John Doe", "admin": true}
然后,有效负载经过Base64Url编码,形成JSON Web令牌的第二部分。由于JWT 支持任何语言的解码,所以不要在Payload 中放置重要信息
3.Signature :签名
如:HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
签名由三部分组成,base64编码后的表头、base64编码后的有效载荷和秘钥,三者中间由 '.' 字符连接。这里举例的是采用HMACSHA256算法加密的。
其中secret秘钥是注册后创建app之后生成的(此秘钥非常重要,不要告诉别人哟)。
三、代码实现(以net core 为例):
1.首先引用 Microsoft.IdentityModel.Tokens.dll。net core 2.1版本中内置了这个库,其他版本要引用。
2.为了方便,我把整个jwt结构写了配置,并在项目中引用。
创建了对应的配置节点实体:using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace fwt.Models
{
///
/// jwt
///
public class JWTTokenModel
{
public JWTHeader header { get; set; }
public JWTPayLoad payLoad { get; set; }
public string secret { get; set; }
}
///
/// header
///
public class JWTHeader
{
public string alg { get; set; }
public string typ { get; set; }</