八.SpringBoot 安全(待完成)
1. 简介
现在企业级运用的最多的安全框架
- Shiro
- Spring Security
以上两种框架都对身份认证&授权提供了良好的支持.
当然,安全不止于开发层级,没有绝对安全的系统,系统的安全也是从硬件到软件的一个极其复杂的生态系统.
作为开发者的立场来讲,我们最关注的的应该是我们开发系统的健壮性.
Spring全家桶也为我们的安全提供了保驾护航,且能和SpringBoot无缝整合.
什么是OAuth2.0?
相信做过微信开发的朋友对于这个并不陌生
这不是一个编程语言,而是一套认证的规范
OAuth要求用户不能直接从资源服务器上面取数据(传统的单体应用)
而是有一个认证服务器
用户想要取得资源(信息化时代最终用户获取的都是信息或者资源)
用户要先去认证服务器申请令牌(token)
然后通过令牌获取资源服务器上的数据
这样的方式解决了以下问题:
- 多点登录问题
- 时效性问题
- 授权范围问题
OAuth应用场景?
微服务分布式开发的情况下,用户使用各个服务都单独登录?传统单点登录已经不适用了.
还有别人想要使用我们的服务或者接口,怎么接入?难道每个人都给他们账户密码?
密码撞库怎么防止?
以上就是OAuth解决的问题;
最佳实践?
对外HTTP,对内RPC
什么是开放平台?
腾讯开发平台,微信开放平台等都是基于OAuth2.0协议开发的
什么是令牌刷新refresh_token?
出于安全考量,假如token被盗,黑客就可以无限获取服务器上面的资源,所以应该给令牌加一个有效期(通常是分钟级),这样黑客拿到token的意义也不大了
refresh_token不存储在客户端而是服务端,这样最大程度保证了安全(服务端被黑了就没办法了)
getRefreshToken时需要校验client_id和client_secret,然后分配refresh_token
什么是客户端授权模式?
- 简化模式
- 授权码模式(最安全)
- 密码模式
- 客户端模式
-
简化模式
没有自己的后台情况下,去对接别人的天气或者是评论服务
-
授权码模式(最安全)
访问认证服务器前会有个回调过程,参照微信授权方式
JWT?
不推荐,只是OAuth里一个小分支,但是网上很多教程,官方都不推荐的东西