说一下SSO登陆的流程/单点登录的实现步骤:
单点登录概念:
sso是指在多个系统中,用户只需登录一次就可以访问所有相互信任的系统
我使用的方案是:
spring security(sei q rui ti)+jwt令牌+oauth2(哦 奥 司)的单点登陆方案,通过引入spring-cloud-starter-oauth2这个依赖引入所需要的这些技术
具体操作:
一、我们可以先写一个基础服务用于用户登录 基于用户名获取用户信息
二、相比于单系统登录,除了提供 用户信息、日志信息等基础数据 的基础工程,还需要一个独立的认证中心服务,对用户身份进行认证和授权
三、在认证中心服务中
封装从数据库查询到的用户信息,并基于feign方式 远程调用用户信息:定义用户远程调用的Feign接口,基于此接口调用基础服务中的用户信息。
因为这里使用的是SpringSecurity,在它的执行链当中,有一个UserDetailsService接口,这个接口负责从数据库查询到的的用户信息和用户端提交的信息进行比对,所以要写一个UserDetailsService接口的实现类,然后在这个实现类中基于Feign接口进行远程服务调用;之后由AuthenticationManger(认证管理器)调用UserDetailsService的实现类来完成认证管理功能
权限控制:
这个时候因为用户提交的密码是明文的,而数据库中存储的密码是加密的,所以还需要写一个配置类继承WebSecurityConfigurerAdpater这个类 并重写configure方法: 来构建密码加密对象,这里使用的是BCryptPasswordEncoder,其中内置了一种不可逆的密码加密算法,相对于md5方式会更加安全+禁用跨域攻击,假如没有禁用,使用postman,httpclient这些工具登录失败403+配置认证成功和失败处理器