Sa-Token v1.39.0
Un cadre d'authentification des autorisations Java léger qui rend l'authentification simple et élégante !
Documentation en ligne : https://sa-token.cc
Présentation du jeton Sa
Sa-Token est un cadre d'authentification des autorisations Java léger qui comporte actuellement cinq modules principaux : l'authentification de connexion, l'authentification des autorisations, l'authentification unique, OAuth2.0 et l'authentification par microservice.
Exemple d'affichage simple : (cliquez pour agrandir/réduire)
Sa-Token vise à compléter la partie authentification des autorisations du système de manière simple et élégante. En prenant l'authentification de connexion comme exemple, vous n'avez besoin que de :
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
Il n'est pas nécessaire d'implémenter une interface ou de créer un fichier de configuration. Il vous suffit d'appeler ce code statique pour terminer l'authentification de connexion à la session.
Si une interface nécessite une connexion pour y accéder, il suffit d'appeler le code suivant :
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
Dans Sa-Token, la plupart des fonctions peuvent être résolues avec une seule ligne de code :
Expulser les gens hors ligne :
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
Authentification des autorisations :
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
Authentification d'interception de route :
StpUtil.checkPermission("user"));
SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
// 更多模块...
})).addPathPatterns("/**");">
// 根据路由划分模块,不同模块不同鉴权
registry . addInterceptor ( new SaInterceptor ( handler -> {
SaRouter . match ( "/user/**" , r -> StpUtil . checkPermission ( "user" ));
SaRouter . match ( "/admin/**" , r -> StpUtil . checkPermission ( "admin" ));
SaRouter . match ( "/goods/**" , r -> StpUtil . checkPermission ( "goods" ));
SaRouter . match ( "/orders/**" , r -> StpUtil . checkPermission ( "orders" ));
SaRouter . match ( "/notice/**" , r -> StpUtil . checkPermission ( "notice" ));
// 更多模块...
})). addPathPatterns ( "/**" );
Lorsque vous en aurez marre de Shiro, SpringSecurity et d'autres frameworks, vous comprendrez à quel point la conception de l'API de Sa-Token est simple et élégante par rapport à ces anciens frameworks traditionnels !
Liste des modules de base : (cliquez pour agrandir/réduire)
- Authentification de connexion : connexion à une extrémité, connexion à plusieurs extrémités, connexion mutuellement exclusive de même extrémité, aucune connexion requise dans les sept jours.
- Authentification des autorisations - authentification des autorités, authentification des rôles, authentification secondaire de session.
- Expulser les personnes hors ligne – Expulser les personnes hors ligne en fonction de leur identifiant de compte et expulser les personnes hors ligne en fonction de la valeur de leur jeton.
- Authentification basée sur les annotations : sépare élégamment l'authentification du code métier.
- Authentification d'interception de route - Basé sur l'authentification d'interception de route, le mode repos peut être adapté.
- Session - Session partagée pour toutes les extrémités, session exclusive pour une extrémité, session personnalisée, accès pratique aux valeurs.
- Extension de couche de persistance - Redis peut être intégré et les données ne seront pas perdues après le redémarrage.
- Séparation du front et du backend - Les applications, applets et autres terminaux qui ne prennent pas en charge les cookies peuvent également être facilement authentifiés.
- Personnalisation du style de jeton - six styles de jetons intégrés, vous pouvez également personnaliser la stratégie de génération de jetons.
- Mode Remember Me - Adaptez-vous au mode [Remember Me] et redémarrez le navigateur sans vérification.
- Authentification de deuxième niveau - Authentification à nouveau basée sur la connexion pour garantir la sécurité.
- Simulez les comptes d'autres personnes - Manipulez toutes les données de statut des utilisateurs en temps réel.
- Changement d'identité temporaire - Basculez temporairement l'identité de session vers un autre compte.
- Connexion mutuellement exclusive du même côté - comme QQ, le téléphone mobile et l'ordinateur sont en ligne en même temps, mais la connexion s'exclut mutuellement sur les deux téléphones mobiles.
- Interdiction de compte - interdiction de connexion, interdiction de classification d'entreprise et interdiction d'échelle de punition.
- Cryptage de mot de passe - Fournit des algorithmes de cryptage de base, qui peuvent crypter rapidement MD5, SHA1, SHA256 et AES.
- Requête de session - Fournit une interface de requête de session pratique et flexible.
- Authentification Http Basic - Une ligne de code pour accéder à l'authentification Http Basic et Digest.
- Écouteur global : effectue certaines opérations AOP lors d'opérations clés telles que la connexion de l'utilisateur, la déconnexion et la mise hors ligne.
- Filtre global : gère de manière pratique les opérations de première classe de réponse de sécurité inter-domaines et définies globalement.
- Authentification du système multi-comptes - authentification séparée de plusieurs comptes dans un seul système (comme la table utilisateur et la table administrateur du centre commercial)
- Authentification unique - Il existe trois modes d'authentification unique intégrés : même domaine, interdomaine, même Redis, cross-Redis, séparation front-end et back-end et d'autres architectures peuvent être gérées.
- Déconnexion en un seul point : lancez une déconnexion dans n'importe quel sous-système et l'ensemble du système sera hors ligne.
- Authentification OAuth2.0 - Créez facilement des services OAuth2.0, prenant en charge le mode openid.
- Session distribuée : fournit une solution de session distribuée dans un centre de données partagé.
- Authentification de passerelle de microservice - s'adapte à l'authentification par interception de route des passerelles courantes telles que Gateway, ShenYu, Zuul, etc.
- Authentification des appels RPC - authentification du transfert de passerelle, authentification des appels RPC, afin que les appels de service ne s'exécutent plus nus
- Authentification temporaire par jeton - résout les problèmes d'autorisation de jeton à court terme.
- Redis indépendant : sépare le cache d'autorisations et le cache professionnel.
- Authentification de connexion rapide et rapide - Injectez une page de connexion dans le projet sans code.
- Dialecte de balise - Fournit un package d'intégration de dialecte de balise Thymeleaf et fournit des exemples d'intégration beetl.
- Intégration jwt - Fournit trois modes de solutions d'intégration jwt et fournit des capacités de paramètres d'extension de jetons.
- Transfert de statut d'appel RPC - Fournit des packages d'intégration tels que dubbo et grpc, afin que le statut de connexion ne soit pas perdu lors des appels RPC.
- Signature des paramètres : fournit un module de vérification de signature d'appel d'API intersystème pour empêcher la falsification des paramètres et la relecture des demandes.
- Renouvellement automatique - Deux stratégies d'expiration des jetons sont fournies, qui peuvent être utilisées de manière flexible et renouvelées automatiquement.
- Prêt à l'emploi - Fournit des packages d'intégration de framework courants tels que SpringMVC, WebFlux, Solon, etc., prêts à l'emploi.
- La dernière pile technologique - adaptée à la dernière pile technologique : prend en charge SpringBoot 3.x, jdk 17.
Authentification unique SSO
Sa-Token SSO est divisé en trois modes pour résoudre les problèmes d'accès SSO sous différentes architectures telles que même domaine, inter-domaine, Redis partagé, cross-Redis, intégration front-end et back-end, front-end et back-end. séparation...etc.:
Architecture du système | Modèle d'adoption | Introduction | Lien vers la documentation |
---|
Le front-end est dans le même domaine + le back-end est dans le même domaine que Redis | Mode un | Session de synchronisation des cookies partagés | Documentation, exemples |
Différents domaines sur le front-end + Identique à Redis sur le back-end | Mode 2 | La redirection d'URL propage la session | Documentation, exemples |
Différents domaines sur le front-end + différents Redis sur le back-end | Mode trois | Requête HTTP pour obtenir une session | Documentation, exemples |
- Même domaine frontal : cela signifie que plusieurs systèmes peuvent être déployés sous le même nom de domaine principal, tel que :
c1.domain.com
, c2.domain.com
, c3.domain.com
- Le backend est le même que Redis : cela signifie que plusieurs systèmes peuvent se connecter au même Redis. (Cela ne nécessite pas que toutes les données du projet soient placées dans un seul Redis. Sa-Token fournit une solution de
[权限缓存与业务缓存分离]
) - Si ni le front-end ni le back-end ne peuvent être dans le même domaine que Redis, vous pouvez utiliser le mode trois, ticket de vérification de demande HTTP pour obtenir la session.
- Un exemple de mode NoSdk est fourni, et les systèmes qui n'utilisent pas Sa-Token peuvent également être connectés.
- Fournissez la documentation de l'interface sso-server, et les systèmes qui n'utilisent pas le langage Java peuvent également être connectés.
- Fournit des solutions de séparation et d'intégration front-end et back-end : qu'il s'agisse d'un serveur sso ou d'un client sso, la séparation front-end et back-end peut être intégrée.
- Fournit une vérification de sécurité : vérification du nom de domaine, vérification des tickets, vérification de la signature des paramètres, empêchant efficacement le détournement de tickets, la relecture des demandes et autres attaques.
- Prévention de la perte de paramètres : l'auteur a testé plusieurs frameworks SSO, et tous les paramètres ont été perdus. Par exemple, avant de vous connecter, il s'agissait de :
http://a.com?id=1&name=2
, et après une connexion réussie, il est devenu. : http://a.com?id=1
, Sa-Token-SSO dispose d'un algorithme spécial pour garantir que les paramètres ne sont pas perdus et que le chemin d'origine est renvoyé avec précision après une connexion réussie. - Fournir des suggestions de solutions de synchronisation/migration des données utilisateur : migration unifiée avant le développement, synchronisation des données en temps réel pendant l'exécution, correspondance basée sur les champs associés, correspondance basée sur les champs center_id, etc.
- Fournit des exemples de démonstration directement exécutables pour vous aider à vous familiariser rapidement avec le processus général de connexion SSO.
Authentification d'autorisation OAuth2
Le module Sa-Token-OAuth2 est divisé en quatre modes d'autorisation pour résoudre les besoins d'autorisation dans différents scénarios.
Mode d'autorisation | Introduction |
---|
Code d'autorisation | Étape d'autorisation standard OAuth2.0, le serveur transfère le code au client et le client échange le code contre le jeton d'autorisation. |
Implicite | En guise d'option de sauvegarde lorsque le mode code d'autorisation ne peut pas être utilisé, le serveur utilise la redirection URL pour transférer directement le token vers la page client. |
Mot de passe | Le Client échange directement le compte et le mot de passe de l'utilisateur contre le jeton d'autorisation. |
Informations d'identification du client | Jeton côté serveur pour le niveau client, représentant la propre autorisation de ressources de l'application |
Document de référence détaillé : https://sa-token.cc/doc.html#/oauth2/readme
Cas d'intégration open source
- [Snowy] : la première plate-forme de développement rapide de Chine qui sépare les secrets nationaux d'avant et d'après, en utilisant Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken.
- [ RuoYi-Vue-Plus ] : réécrivez toutes les fonctions de RuoYi-Vue et intégrez Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS pour une synchronisation régulière
- [Smart-Admin] : SmartAdmin est la première plate-forme de développement rapide de Chine pour le middle et le backend avec un « code de haute qualité » comme noyau et « simple, efficace et sûr » ;
- [Dengdeng] : une plate-forme de développement rapide de microservices mid-end et backend axée sur les solutions multi-locataires. Le mode locataire prend en charge la base de données indépendante (mode DATASOURCE), l'architecture de données partagée (mode COLUMN) et le mode non-tenant (mode NONE)
- [EasyAdmin] : Un système de gestion backend basé sur SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui Il est flexible et peut séparer le front-end et le back-end, ou il peut s'agir d'une seule entité. générateur, gestion des autorisations, moteur de workflow, etc.
- [ sa-admin-server ] : échafaudage de développement de gestion en arrière-plan basé sur sa-admin-ui.
Il existe d'autres excellents cas open source qui ne peuvent pas être affichés un par un, veuillez vous référer à : Awesome-Sa-Token
Liens amicaux
- [ OkHttps ] : framework de communication http léger, API extrêmement élégante, supporte les protocoles WebSocket et Stomp
- [Bean Searcher] : un ORM en lecture seule axé sur les requêtes avancées, permettant la récupération de listes complexes avec une seule ligne de code !
- [Jpom] : logiciel de construction en ligne simple et léger et peu intrusif, de déploiement automatique, d'exploitation et de maintenance quotidiennes et de suivi de projet.
- [TLog] : un artefact léger de suivi des balises de journal distribué.
- [hippo4j] : Un puissant framework de pool de threads dynamiques avec des fonctions de surveillance et d'alarme.
- [ hertzbeat ] : un système de surveillance et d'alarme en temps réel open source facile à utiliser et convivial, aucun agent requis, un cluster hautes performances et de puissantes capacités de surveillance personnalisées.
- [Solon] : Un framework de développement d'applications plus moderne : plus rapide, plus petit et plus gratuit.
- [Chat2DB] : un outil de gestion de bases de données et de BI basé sur l'IA qui prend en charge la gestion de 22 bases de données telles que Mysql, pg, Oracle et Redis.
Hébergement de codes
- Gîte : https://gitee.com/dromara/sa-token
- GitHub : https://github.com/dromara/sa-token
- GitCode : https://gitcode.com/dromara/sa-token
Groupe de communication
Groupe de communication QQ : 823181187 Cliquez pour rejoindre
Groupe de communication WeChat :
(Scannez le code QR pour ajouter WeChat, remarque : sa-token, vous invite à rejoindre le chat de groupe)
Avantages de rejoindre une discussion de groupe :
- Recevez des notifications de mise à jour du framework dès que possible.
- Recevez des notifications de bugs du framework dès que possible.
- Recevez des notifications de nouveaux cas open source dès que possible.
- Communiquez (mō yú) entre vous (huá shuǐ) avec de nombreux grands.