司文痞子全集,垂头丧气的意思,儿歌mp3下载
既然选择了远方,便只顾风雨兼程 __ hans许
引言:挺久没更新了,之前做了vue的系列,后面想做做服务端的系列,上下衔接,我们就讲讲webapi(网络应用程序接口),接口免不了用户认证,所以接下来我们的主题系列文章便是“ core的用户认证”,分为市面上流行的jwt(json webtoken)与oauth2(开放授权)
什么叫jwt
json web token(jwt)是目前最流行的跨域身份验证解决方案。
一般来说,互联网用户认证是这样子的。
1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 cookie。
4、用户随后的每一次请求,都会通过 cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
服务器需要保存session,做持久化,这种模式没有分布式架构,无法支持横向扩展,如果真的要的话就必须采用分布式缓存来进行管理seesion。那jwt相反,它保存的是在客户端,每次请求都将jwt代入服务器,进行签名,权限验证。jwt由客户端请求,服务端生成,客户端保存,服务端验证。
jwt的原理与格式
原理
在上面,我们也讲过了,简单的来说,我们将服务器需要验证我们的条件(账户,密码等等),发给服务器,服务器认证通过,生成一个json对象返回给我们,例如下面。当然,为了防止被篡改,所以我们会将对象加密,再次请求服务器,需要将jwt放在请求头部,传递给服务器,来判断权限等等。
格式
它是一个很长的字符串,中间用点(.)分隔成三个部分。注意,jwt内部是没有换行的,这里只是为了便于展示,将它写成了几行。jwt 的三个部分依次如下。
- header(头部)
- payload(负载)
- signature(签名)
简单讲下,header
描述加密算法与token类型,payload
描述的是实际需要传递的数据,如失效时间,签发人等等,signature
描述的是一段对于前面两部部分的签名,当然秘钥只有服务器才知道。
简单的介绍下jwt,更多的话,可以这边看看。我们着重讲下实现。
创建jwt
首先我们要先创建token,毕竟这个是最重要的。core自带jwt帮助类,所以我们按照帮助类的意思来写个方法创建token。
从方法我们看到,我们传入的是负载这个片段,而失效时间与秘钥我们是放在了appsettings.json
来进行配置的。使用di来获取配置文件中的节点值。
编写中间件
我们都知道,中间件是core的管道模型组成部分,所以我们在中间件做验证,来判断每次请求用户是有有权限是有该webapi或者其他api。
从代码来看,anonymouspathlist
是url路径,若是在这个list
内的url,便可直接跳过验证,
接着将authstr
token代入验证函数,validatepayload
却是我们自代入的委托函数,用于服务器自定义验证。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论