今天不划水了-来了解Security权限模型与认证模式 | 8月更文挑战

276 阅读2分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的认证机制和方法级的授权功能。它的核心是一组过滤器链,通过不同的过滤器来达到细粒度的权限控制,我们这里主要介绍JWT格式的登陆授权

过滤链如下图所示:

image.png

RBAC权限模型

RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配,RBAC权限模型描述了用户-角色,角色-菜单权限,角色-资源(API)之间的关系.

如下图所示,一个用户可拥有多个角色,一个角色也可分配给多个用户.用户-角色,角色-菜单权限,角色-资源都是多对多的关系.提供了高适配,可扩展的权限体系

未命名文件 (1).jpg

无状态认证: JWT(JSON Web Token)

session认证

在过往的用户信息认证中,我们大多把用户信息存储于session中,客户端带着session_id去服务器进行授权,以往一个服务器的情况下,这种设计毫无问题.但是越来越多的服务选择分布式架构,做微服务,做集群.这种认证方式显然并不适合.

基于token的鉴权机制

基于token的无状态认证不需要在服务端去保留用户的认证。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

JWT构成

原型:  eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqaXdrMSIsImV4cCI6MTYyODY2Njk4NH0.zooV9g7biMreN7bHcG6ks9EbjSbnJS_xO0oqa3gDaXjjZpxXhKW2kYTOg2BGnuhRM9vQ48eqCfN6XAGsvfB3lA
解析:  { alg: "HS512"}.{ sub: "jiwk1", exp: 1628666984}.[signature]

JWT分为三部分,第一部分为声明加密的算法,第二部分为token中携带的自定义信息,第三部分为签证信息

jwt与security的认证流程

  1. 用户进行登陆认证

  2. 服务器校验登陆信息是否正确

  3. 认证完成,把认证的用户信息交给security管理并生成一个jwt token给客户端

  4. 客户端携带token发送请求给服务器(一般将token放置于请求header中)

  5. 服务器拿到token,对token进行校验

  6. 认证合法后从token中获取用户信息,将用户信息加载到security去做认证(走security的过滤器链),认证全部通过放行

  7. 访问目标资源