NET-Core-WebAPI集成JWT实现身份验证

6次阅读

共计 1150 个字符,预计需要花费 3 分钟才能阅读完成。

前两篇文章给大家介绍了在.NET Core 中如何使用 Swagger 的文章,那今天给大家分享一下 JWT

在做接口开发的同学可能都有感受,我的接口如何保护的问题,如果没有身份验证,那不是接口完全暴露在外面,任意使人调用,这显然不是我们想要的一种结果。当然做身份验证的方式有多种,今天给大家讲一种比较流行了,标准的身份验证 JWT

什么是 JWT?

随着技术的发展,分布式 web 应用的普及,通过 session 管理用户登录状态成本越来越高,因此慢慢发展成为 token 的方式做登录身份校验,然后通过 token 去取 redis 中的缓存的用户信息,随着之后 jwt 的出现,校验方式更加简单便捷化,无需通过 redis 缓存,而是直接根据 token 取出保存的用户信息,以及对 token 可用性校验,单点登录更为简单。

JWT 的结构体是什么样的?

JWT 由三部分组成,分别是头信息、有效载荷、签名,中间以(.)分隔

(1)header(头信息)

由两部分组成,令牌类型(即:JWT)、散列算法(HMAC、RSASSA、RSASSA-PSS 等)

(2)Payload(有效载荷)

JWT 的第二部分是 payload,其中包含 claims。claims 是关于实体(常用的是用户信息)和其他数据的声明,claims 有三种类型:registered, public, and private claims。

Registered claims:这些是一组预定义的 claims,非强制性的,但是推荐使用,iss(发行人),exp(到期时间),sub(主题),aud(观众)等;

Public claims: 自定义 claims,注意不要和 JWT 注册表中属性冲突

Private claims: 这些是自定义的 claims,用于在同意使用这些 claims 的各方之间共享信息,它们既不是 Registered claims,也不是 Public claims。

(3)Signature

要创建签名部分,必须采用编码的 Header,编码的 Payload,秘钥,Header 中指定的算法,并对其进行签名。

JWT 使用流程:

JWT 在.NET Core 项目中的具体用法:

(1)在 ConfigureServices 方法中添加 JWT 相关代码:

(2)在 Configure 方法中添加 JWT 代码:

(3)创建一个 JWT 服务类:

(4)在接口类或方法上标记身份验证:

到此为止,JWT 的基本用法就结束,非常简单和方便,接下来我们用 postman 测试一下 JWT 是否生效:

(1)当我们在不登录的情况下,访问接口看看是什么现象:

我们发现接口返回提示:401 Unauthorized

(2)我们先调用登录接口,先计算得到 token,然后再来请求试试:

登录成功后,接口返回了 token 值

(3)将 token 复制粘贴到下方,请求业务接口,成功调用:

正文完
 0