001-Construindo microsserviços a partir do centro de certificação zero (1)

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-Tokencomo 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.0como um serviço de autenticação OAuth2.
    • Artigo de leitura recomendada: [Segurança] Spring Boot integra Spring Authorization Server
  • 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-Tokena 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

  1. 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

    imagem-20220801165430181

  2. 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

  3. Senha (Password) : O cliente troca diretamente a senha da conta do usuário por um token de autorização

    imagem-20220801165338556

  4. 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

Guess you like

Origin juejin.im/post/7237037303914168357