escreva primeiro
Se você ganhou algo com este projeto, lembre-se de seguir Star, isso é muito bom incentivo e apoio para mim.
Endereço de origem: gitee.com/csps/mingyu…
Endereço do documento: gitee.com/csps/mingyu…
Seleção de tecnologia
Este microsserviço será usado
Sa-Token
como o framework de autenticação de autoridade!
- Apache Shiro : Relativamente falando, é relativamente antigo. Autorizar o login de terceiros precisa ser implementado manualmente e é problemático implementar oauth. Não recomendado! ✘
- Spring Security : É muito perfeito, e existem muitos casos de implementação na Internet, mas a equipe do Spring Security anunciou oficialmente que o Spring Security OAuth não é mais mantido (o projeto não passará por nenhuma iteração, incluindo correções de bugs ). Novos itens não são muito recomendados! ✘
- Como uma versão de transição do SpringBoot 3.0, o SpringBoot 2.7.0 desatualizou um grande número de classes de configuração sobre SpringSecurity.Se a configuração desatualizada da versão antiga for usada, ela não poderá ser atualizada para cima.
- Spring Authorization Server : O principal projeto do servidor de autorização OAuth2 no ecossistema Spring no momento deve ser a solução OAuth2 da família Spring por muito tempo no futuro. recomendo! ✔
- Também existem deficiências. Até agora, ele só foi iterado para 1.1.0. No momento, existem relativamente poucos casos e documentos. Eu recomendo um projeto de código aberto pig , que é usado atualmente
Spring Authorization Server 0.4.0
como um serviço de autenticação OAuth2. - Artigo de leitura recomendada: [Segurança] Spring Boot integra Spring Authorization Server
- Também existem deficiências. Até agora, ele só foi iterado para 1.1.0. No momento, existem relativamente poucos casos e documentos. Eu recomendo um projeto de código aberto pig , que é usado atualmente
- Sa-Token : Uma estrutura leve de autenticação de permissão Java, com documentos chineses e iterada para 3.4.0, ainda está estável no momento, recomendado! ✔
Sa-Token
Ao ler os documentos Spring Security, Spring Authorization Server e, em seguida, examinar os documentos Sa-Token, você terá uma sensação realmente simples.
Os documentos de desenvolvimento mais recentes estão sempre em: sa-token.cc
O documento Sa-Token faz o possível para explicar os motivos do design e os cenários de aplicação de cada função. Se você ler o documento com atenção , aprenderá não apenas Sa-Token
a estrutura em si, mas também a melhor prática de design de permissão na maioria dos cenários.
Lista de funções atuais
- Autenticação de login ——Login de extremidade única, login multiterminal, login de exclusão mútua de mesma extremidade, login gratuito em sete dias
- Autenticação de autoridade ——autenticação de autoridade, autenticação de função, autenticação de dois níveis de sessão
- Sessão de sessão - sessão compartilhada completa, sessão exclusiva de fim único, sessão personalizada
- Kickar alguém off-line — chutar alguém off-line de acordo com o ID da conta e chutar alguém off-line de acordo com o valor do Token
- Banimento de conta — banimento de login, banimento por categoria de negócios, banimento por escada de penalidade
- Extensão da camada de persistência - pode integrar Redis, Memcached e outro middleware de cache profissional e reiniciar os dados sem perda
- Sessão distribuída ——Fornece integração jwt e centro de dados compartilhado duas soluções de sessão distribuída
- 微服务网关鉴权 —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证
- 单点登录 —— 内置三种单点登录模式:无论是否跨域、是否共享Redis,都可以搞定
- OAuth2.0认证 —— 轻松搭建 OAuth2.0 服务,支持openid模式
- 二级认证 —— 在已登录的基础上再次认证,保证安全性
- Basic认证 —— 一行代码接入 Http Basic 认证
- 独立Redis —— 将权限缓存与业务缓存分离
- 临时Token认证 —— 解决短时间的Token授权问题
- 模拟他人账号 —— 实时操作任意用户状态数据
- 临时身份切换 —— 将会话身份临时切换为其它账号
- 前后端分离 —— APP、小程序等不支持Cookie的终端
- 同端互斥登录 —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录
- 多账号认证体系 —— 比如一个商城项目的user表和admin表分开鉴权
- Token风格定制 —— 内置六种Token风格,还可:自定义Token生成策略、自定义Token前缀
- 注解式鉴权 —— 优雅的将鉴权与业务代码分离
- 路由拦截式鉴权 —— 根据路由拦截鉴权,可适配restful模式
- 自动续签 —— 提供两种Token过期策略,灵活搭配使用,还可自动续签
- 会话治理 —— 提供方便灵活的会话查询接口
- 记住我模式 —— 适配[记住我]模式,重启浏览器免验证
- 密码加密 —— 提供密码加密模块,可快速MD5、SHA1、SHA256、AES、RSA加密
- 全局侦听器 —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作
- 开箱即用 —— 提供SpringMVC、WebFlux等常见web框架starter集成包,真正的开箱即用
单点登录与 OAuth2.0
本微服务将采用
OAuth2.0
作为权限认证解决方案!
功能点 | SSO单点登录 | OAuth2.0 |
---|---|---|
统一认证 | 支持度高 | 支持度高 |
统一注销 | 支持度高 | 支持度低 |
多个系统会话一致性 | 强一致 | 弱一致 |
第三方应用授权管理 | 不支持 | 支持度高 |
自有系统授权管理 | 支持度高 | 支持度低 |
Client级的权限校验 | 不支持 | 支持度高 |
集成简易度 | 比较简单 | 难度中等 |
单点登录
举个场景,假设我们的系统被切割为 N 个部分:游戏、论坛、直播、社交…… 如果用户每访问一个模块都要登录一次,那么用户将会疯掉, 为了优化用户体验,我们急需一套机制将这 N 个系统的认证授权互通共享,让用户在一个系统登录之后,便可以畅通无阻的访问其它所有系统。
单点登录——就是为了解决这个问题而生!
简而言之,单点登录可以做到:在多个互相信任的系统中,用户只需登录一次,就可以访问所有系统。
OAuth2.0
简单来讲,OAuth2.0 的应用场景可以理解为单点登录的升级版,单点登录解决了多个系统间会话的共享,OAuth2.0 在此基础上增加了应用之间的权限控制。OAuth2.0 可以是通往 SSO 这个 “罗马” 的其中一条路,但它们本身并列于不同的场景与需求。
Com base em diferentes cenários de uso, OAuth2.0 projetou quatro modos
-
Código de autorização : etapas de autorização padrão OAuth2.0, o servidor envia o código para o cliente e o cliente troca o código por um token de autorização
-
Implícita : uma opção alternativa quando o modo de código de autorização não pode ser usado, o lado do servidor usa o método de redirecionamento de URL para enviar diretamente o token para a página do lado do cliente
-
Senha (Password) : O cliente troca diretamente a senha da conta do usuário por um token de autorização
-
Credenciais do Cliente (Credenciais do Cliente) : O Token no nível do Cliente no lado do servidor representa a autorização de recursos do próprio aplicativo