这节我们主要介绍一下jwt在ASP.NET Core API中的应用,我们先来介绍一下什么是JWT,下面来自GPT的回答:
JSON Web Token(JWT)是一种开放的、基于 JSON 格式的标准,用于在网络上安全地传输信息,JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),这三部分通常使用点号(.)连接在一起,并以Base64编码的形式表示
  • 头部(Header):包含了令牌的元数据信息,如令牌类型(JWT)、签名算法(HS256、RS256等)等,头部通常采用JSON格式表示,并进行Base64编码
  • 载荷(Payload):包含了实际的数据信息,如用户ID、角色、权限等,载荷也是采用JSON格式表示,并进行Base64编码
  • 签名(Signature):由头部、载荷和一个密钥(或公钥)经过指定的算法计算得到,用于验证JWT的完整性和真实性
JWT被广泛应用于身份验证和授权机制中,特别是在分布式系统中,例如Web应用程序和API之间的身份验证,以及单点登录(SSO)系统中,由于JWT具有自包含性、轻量级、易于实现和跨平台等特点,因此在现代Web开发中得到了广泛应用
你可以参考这个网站https://jwt.io/ ,上面展示了如何签名的方法,我们也可以用它验证我们自己生成的JWT

新建一个项目命名为AspNetCore.API.JWT.Authentication,我们先做一个简单的用户注册,然后再用已经注册的用户来登录,最后拿着发行的token看是否能验证成功

1. 注册用户

为了方便我们直接将用户保存在内存中,创建一个UserController的控制器,添加一个Post方法用来新增用户,Post方法的参数为UserDTO,主要用来为用户输入信息,用户名和密码

方法的返回值为User,我们存储用户的密码需要加密,我们对密码做hash处理,并将hash值和salt返回给用户,简单一个注册就完成,代码如下所示:

HMACSHA512类使用了SHA-512哈希函数,使用Key来作为Salt来做加密,最后计算出密码的Hash值,到这里新增用户基本完成,我们将这个用户保存到内存中

2. 用户登录

由于我们将用户密码进行Hash处理,所以密码只有用户本人知道,我们只能将用户输入的密码和内存中存储的hash进行比较,如果相等的话,说明密码是正确的,否则密码错误,正确之后颁发token,生成token的代码如下:

声明Claim用户存储用户信息,使用SymmetricSecurityKey创建一个秘钥,接着使用秘钥来创建签名的凭证,最后生成token,再将这个token输出到客户端

3. 验证Token

接下来我们验证一下发型的token是否能访问我们action方法,我们注册一个用户:admin 密码:123456 ,结果返回用户名和salt和密码的hash值

接下来我们使用这个用户进行登录,我们在swagger上输入用户名和密码调用登录api,我们看到了发型的token:

接下来我们用这个token来验证我们的api,在没有输入之前我们调用api,发现401未授权:

在swagger上进行授权

我们发现授权成功:

接下来我们在网站上https://jwt.io/ 验证一下我们的token,我们把token输入到左侧,我们可以查看到token相关的信息:

源代码地址:

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/Fundamentals/AspNetCore.API.Auth/AspNetCore.API.JWT.Authentication

如果你能给我的 GitHub 仓库点个星,我会非常感激的!
0

评论0

请先
SH 104-2017 储罐区防火堤通用图.pdf
SH 104-2017 储罐区防火堤通用图.pdf
刚刚 有人购买 去瞅瞅看

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录网站