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认证过程
- 调用Subject.login(token)进行登录,其会自动委托Security Manger
- SecurityManager负责真正的身份验证逻辑,它会委托给Authenticator进行身份验证
- Authenticator才是真正的身份验证者,此处可以自定义插入自己的实现
- Authenticator可能会委托AuthenticationStrategy进行多Realm身份验证
- AUthenticator会把相应的token传入Realm,从Realm获取身份验证信息
Shiro授权过程
Spring Security
简述
spring security 基于spring体系,功能更强大和复杂,