session,token,jwt认证
什么是认证?
认证即是登录认证,在我们日常浏览网站时经常会遇到,比如,购物网站中购买商品时需要我们先进行登录认证,在一些问答型网站,往往需要用户登录认证后才能发表,评论和收藏。
常见认证方式
常见的认证方式有:
- cookie-session认证;
- token认证;
- JWT(json web token)认证。
cookie-session认证
http协议是一种无状态的协议。
什么是无状态?当用户在发送请求时,向服务器提供了用户名和密码进行用户认证,服务器验证通过后返回200/OK,一个http的请求就结束了,所以现在的状态应该是已登录验证状态,如果按照正常的逻辑,验证过之后就可以使用一些验证过才能使用的功能,但http是一种无状态协议,这代表着浏览器和服务器都不会记住该状态(也就是我们已经登录过了)。
再一次发送请求时,服务器依然会让我们执行登陆验证,因为服务器并不知道我们已经验证过了。
为了能让服务器记住我们的操作,服务器在登录验证后,会创建一个Session信息(一般session会包含用户的信息)用于标识并跟踪用户,并且将SessionID存到response的cookie字段中,然后返回给浏览器。浏览器会保存该cookie,在下次发送请求时,自动带上cookie信息,服务器通过cookie获取session信息进行校验;
cookie-session认证的缺点:
- 用户经过验证后,会在服务器上做一次记录,创建一条session信息方便用户下次请求的鉴别,而session是存放在服务器内存中,随着用户的增多,服务器的开销会逐渐增大,到达一定的数量后,会影响服务器的运行效率;
- 用户认证后,服务端的session存放在服务器内存中,下次请求必须还要发送到这个服务器上,才能拿到授权的资源。但是在分布式应用中,该操作就限制了网关的负载均衡功能,这时候就需要考虑session同步问题;
- 该认证方式是基于cookie来进行用户识别的,如果cookie被截获,用户就很容易受到 CSRF(跨站请求伪造)的攻击;
- cookie不能跨域,所以需要考虑跨域的问题;
基于token的鉴权机制
Token,通常叫做令牌,是一种自定义实现的类似Session/Cookie机制的,用来代替传统Session/Cookie的新兴鉴权方案。
Token是服务端生成的一串加密字符串,在用户登录认证成功后生成并返回给客户端,之后客户端的每次请求都会携带token,服务端通过验证token的有效性来完成鉴权。
基于token的鉴权机制是无状态的,不需要在服务端去保留用户的认证信息或会话信息。
流程示意:
- 用户使用用户名密码来请求服务器
- 服务器进行验证用户的信息
- 服务器通过验证发送给用户一个token
- 客户端存储token,并在每次请求时附送上这个token值
- 服务端验证token值,并返回数据
- Token存活时间达到设置的有效期后自动失效
这个token必须要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(跨来源资源共享)
策略,一般我们在服务端这么做就可以了Access-Control-Allow-Origin: *
。
token的优点
- 无状态、可扩展、适合分布式;
- 性能高、安全性好,能够防止CSRF(跨站请求伪造),解决跨域问题;
- Token鉴权时只需要客户端保存信息,减少了服务端对内存的消耗;
- 对于手机APP端适应性好;
JWT认证
JWT技术是基于token方案的技术实现。
什么是JWT(JSON WEB TOKEN)?
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
JWT的构成
JWT是由三段信息构成的,将这三段信息用.
链接起来就构成了jwt字符串。格式如下:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
JWT的三段信息分别为:
- header(头部);
- payload(载荷);
- signature(签证);
本文参考:
- 什么是 JWT -- JSON WEB TOKEN - 简书 (jianshu.com)
- 说一说几种常用的登录认证方式,你用的哪种-腾讯云开发者社区-腾讯云 (tencent.com)
- 鉴权界的后起之秀:Token鉴权方案 - 掘金 (juejin.cn)