天天看点

JWT(json web token)--.JwtBearer jwt

1、新建ASP .NET Core Web Api ,名称Linjie.JWT

2、右键项目 NuGet程序包管理工具 添加Microsoft.AspNetCore.Authentication.JwtBearer,System.IdentityModel.Tokens.Jwt

3、添加类 JWTHelper,代码如下:

4、添加类 TokenController,代码如下:

5、修改类 Startup,代码如下:

6、运行项目,获取token,代码如下:

打开浏览器输入:https://localhost:5001/token

或者使用postman 请求地址,也可以,如下图

JWT(json web token)--.JwtBearer jwt
JWT(json web token)--.JwtBearer jwt

7、解析token,

获取Token值后可以使用https://jwt.io/ 来解析,看看token里面包含哪些信息,解析出来的包括header,payload,signature

token包括三部分 header.payload.signature

1、token是一个很长的字符串,中间用点(.)分隔成三个部分。注意,JWT内部是没有换行的,并且都使用Base64编码

2、JWT token的三个部分依次如下。Header(头部)、Payload(负载)、Signature(签名)

Header

Header部分是一个JSON对象,描述JWT最基本的信息,例如,其类型及签名所用的算法等。通常是下面的样子

例子:

{

"alg": "HS256",

"typ": "JWT"

}

注:

alg属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);

typ属性表示这个令牌(token)的类型(type),JWT令牌统一写为JWT。然年将上面的JSON对象使用Base64URL算法转成的Base64字符串。

Payload

Payload部分也是一个JSON对象也是使用Base64URL算法转成的Base64字符串,用来存放实际需要传递的数据。JWT规定了7个官方字段,供选用。

JWT规定了7个官方字段

iss (issuer) 该JWT的签发者

aud (audience): 接受该JWT的一方

iat (Issued At) 签发时间

nbf (Not Before) 生效时间

exp (expiration time) 过期时间(为一个UNIX时间戳)

sub (subject) 该JWT所面向的用户

jti (JWT ID) 编号

除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。

"abc": "1234567890",

"name": "Jckxiongsi",

"admin": true

完整例子:

"iss":"issuer",

"aud":"audience",

"sub":"jwt sub",

"iat":"2020-1-2 08:09:09",

"nbf":"2020-1-2 10:10:00",

"exp":"2020-1-2 10:11:00",

注意,JWT默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。

签名Signature

将上面的header和payload两个部分编码后的base64字符串都用点号连接在一起(头部在前),

就形成了要加密的base64,如base64UrlEncode(header) + "." + base64UrlEncode(payload)

例如:headerbase64.payloadbase64,将上面拼接完的字符串用HS256算法进行加密。

在加密的时候,需要提供一个密钥(secret),加密后的内容为headerpayloadbase64这一部分又叫做签名。

最后将这一部分签名也拼接在被签名的字符串后面,这样就得到了一个token了

完整的JWT:headerbase64.payloadbase64.headerpayloadbase64,

加密如下:

HMACSHA256(

base64UrlEncode(header) + "." +

base64UrlEncode(payload),

your-256-bit-secret

)

具体解析可以访问地址      https://jwt.io/

JWT(json web token)--.JwtBearer jwt

龙腾一族至尊龙骑