目录
1.认证和授权?
用户身份(Authentication)和用户权限 (Authorization)的区别。
2.Cookie和Session?
都是用来跟踪浏览器用户身份的会话方式。Cookie在客户端保存用户信息,会话cookie自动过期setMaxAge设置会话数据存在时间,大小数量和安全问题20个4k以内。Session默认30分钟有效,setMaxInactiveInterval设置或者部署描述符配置有效期。
- Cookie保存已经登录用户信息,下次访问可自动登录基本信息。(用户个性化设置,主题)......
- Cookie保存 session或者 token,后端取到就能记录用户当前的状态,因为HTTP协议是无状态的。
- Cookie记录和分析用户浏览过程。因为HTTP无状态协议,所以将这些信息存放在 Cookie,看你浏览了啥(商品推荐)。
通过SessionId实现特定用户登录,一般存放在Redis中。用户登录系统后服务器生产并返回给客户端带有sessionid的cookies,然后用户在此向服务器发起请求的时候就会带着这个Cookies(sessionId),这样后端就知道身份了。
https://www.baeldung.com/spring-session (springboot的demo跨程序管理)
3.Token?
CSRF跨站请求伪造。就是别人通过cookie拿到你的sessionid就可以代替你的身份访问资源。
典型CSRF攻击流程:
- 受害者登录a.com,并保留了登录凭证(Cookie)。
- 攻击者引诱受害者访问了b.com。
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
- a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
- a.com以受害者的名义执行了act=xx。
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
那么,有没有不用存放session就能认证用户身份呢?Token上场表演。对数据使用算法+密钥进行签名,成为无法伪造的Token。
基于Token的身份验证JWT:
- Header:JWT的元数据。定义了生成签名的算法以及Token的类型。
- Payload:负载、用来存放实际需要传递的数据。
- Signature:服务器通过Payload/Header和一个密钥(secret)使用Header 中签名算法(默认是HMACSHA256)生成。
4.SSO与OAuth2.0的区别
OAuth2标准授权协议,用来授权第三方应用获取某些权限。SSO(Single Sign On)单点登录 ,解决多个相关的子系统登录一个别的也可以访问。
5.SpringSecurity
- 提供了可用的安全框架,提供了很多用户认证功能提高开发效率。基于Spring易于集成,有很多封装方法。
- 配置文件较多,RBAC不太明显。对系统中role、user和permission无可操作界面。大数据量下几乎不可以用。
6.ApacheShiro
认证、授权、会话管理和加密。四大基石!
subject :主体 -------SecurityManager:管家------------Realm:安全数据源
- 灵活可用容易集成。自己实现RBAC和操作界面。简单明了!