Spring Cloud Security:Oauth2 存档
项目升级微服务项目后,用Spring Cloud Security来做认证。参考了很多大佬的教程,进行一个原理总结。
Spring Cloud Security
在SpringBoot和Spring Security OAuth2的基础上,可以快速创建常见模式的系统,如单点登录,令牌中继和令牌交换。
单点登录
单点登录英文SSO(Single Sign On),单点登录就是在多个系统中,用户只需一次登录,各个系统即可以感知该用户已经登陆。
多系统中可能有多个Tomcat,而Session是依赖当前系统的Tomcat,所以系统A和系统B的Session不共享。
解决Session不共享的解决方案:
- Tomcat集群Session全局复制
- 根据用户请求的IP进行哈希映射到对应的机器上
- 把Session数据放在Redis中(使用Redis模拟Session)
拆分从多个子系统,在我的项目中就是,区域风险管理系统,人员风险管理系统,人员管理系统,设备管理系统等等。
SSO的逻辑是:
- SSO系统生成一个token,并将用户信息存到Redis中,并设置过期时间
- 其他系统请求SSO系统进行登录,得到SSO返回的token,写到Cookie中
- 每次请求时,Cookie都会带上,拦截器得到token,判断是否已经登陆
OAuth2
是一个验证授权的开放标准。基于这个标准实现自己的OAuth。
在OAuth之前,HTTP Basic Authemtication,输入用户名密码的形式验证是不安全的。OAuth的出现时为了解决访问资源的安全性和灵活性。使得第三方应用对资源的访问更加安全。
类似Spring Security中,可以通过实现UserDetailsService来加载自定义的UserDetails信息。重写了方法 loadUserByUsername(name)
结合JWT
JWT(json web token)