我们知道Spring Security是一个应用安全框架,能提供认证、授权能力。追本溯源,想要知道SpringSecurity各种设计和实现,最好是从源头出发,也就是了解应用安全框架需要做什么。
谈到应用安全框架就离不开两个核心功能:认证(Authentication)、授权(Authorization)。
解决 “你是谁?” 的问题。
常用的认证方式就是通过用户名和密码,这里就衍生出几个问题:
用户输入用户名密码后,去哪儿找到已有的用户信息来做验证? 密码总不能明文存储吧!那么,密码如何加密和验证?
另外,认证成功后做什么? 是返回cookie还是token?
认证失败后做什么? 是返回401还是重定向到失败页面?
如何提供认证的接口? 是Filter或者Controller?
如何提供退出登录接口?
退出后做什么?
解决 “你能干什么?” 的问题。
为了便于理解,经常又称之为访问控制(Access Control)、鉴权,鉴权的前提那一定得先得到权限信息,这里有两个问题: 如何获取权限信息? 以及 如何判断是否有权限?
另外,权限不足怎么办? 是返回403还是重定向到失败页面?
匿名访问怎么办? 是返回403还是重定向到登录页面?
注意,匿名访问不同于权限不足,匿名访问指的是没有经过认证就访问接口,权限不足指的是用户通过认证了,但是没有访问该接口的权限。
小结一下,应用安全框架的核心问题:
如何获取用户信息?
密码如何加密和验证?
认证成功后做什么?
认证失败后做什么?
如何提供认证的接口?
如何提供退出登录接口?退出后做什么?
如何获取权限信息?
如何判断是否有权限?(鉴权)
权限不足怎么办?
匿名访问怎么办?
注意:应用安全框架本身不会管理用户和权限,只是获取,所以框架一般会设计相关的接口,具体实现由使用者自定义,可以从内存获取、或从数据库获取等等
end
源头已经了解了,后面我们将一步步挖掘Spring Security 的设计和实现。欢迎订阅,冲~