登录验证——JWT、shiro

189 阅读2分钟

JWT

什么是JWT

JSON Web Token 是一个包含某种意义的JSON串,只看JWT本身的内容,就可以确认他是否有效。主要包含了3个部分:头部Header,数据Payload,签名Signature。其本身就包含用户信息,服务端只需要使用密钥解密进行校验

使用JWT的注意点

  • JWT不依赖于Cookie,所有可以使用任何域名的API服务而不用担心跨域

  • JWT默认是不加密的,也可以是加密的,可以生成token后,再加密一次

  • JWT不仅可以用于认证,也可以用于交换信息,有效使用JWT可以减少数据库访问

  • JWT最大的优势是服务端不需要再存储session,是的服务器鉴权业务可以方便扩展

  • JWT本身包含认证信息,一旦泄露,任何人都可以获得该令牌的所有权限,为了减少盗用,有效期应该设置的比较短。

  • JWT只适合一次性命令认证,颁发一个有效期极短JWT

  • 为了减少盗用,JWT不应该使用HTTP传输,而使用HTTPS传输

SHIRO

简述

接入简单,三个核心组件:

  • Subject:代表当前用户,可以是人或者第三方进程
  • SecurityManager:管理所有的Subject,且负责进行认证、授权、缓存的管理
  • Realms:域,可以看作安全数据源,SecurityManager验证用户身份的时候需要从Realm处获得相应用户确定用户身份的合法

Shiro认证过程

  1. 调用Subject.login(token)进行登录,其会自动委托Security Manger
  2. SecurityManager负责真正的身份验证逻辑,它会委托给Authenticator进行身份验证
  3. Authenticator才是真正的身份验证者,此处可以自定义插入自己的实现
  4. Authenticator可能会委托AuthenticationStrategy进行多Realm身份验证
  5. AUthenticator会把相应的token传入Realm,从Realm获取身份验证信息

Shiro授权过程

Spring Security

简述

spring security 基于spring体系,功能更强大和复杂,