Maison Java javaDidacticiel Comment développer un système d'authentification unique basé sur Spring Security SAML à l'aide de Java

Comment développer un système d'authentification unique basé sur Spring Security SAML à l'aide de Java

Sep 22, 2023 am 08:49 AM
java spring security saml

如何使用Java开发一个基于Spring Security SAML的单点登录系统

Comment utiliser Java pour développer un système d'authentification unique basé sur Spring Security SAML

Introduction :
Avec le développement rapide d'Internet, de plus en plus d'applications sont développées. Dans ces applications, la connexion des utilisateurs est l'une des fonctionnalités les plus courantes. Cependant, pour les applications de niveau entreprise, les utilisateurs doivent se connecter à plusieurs systèmes, ce qui entraînera une très mauvaise expérience de connexion utilisateur. Afin de résoudre ce problème, le système d'authentification unique (Single Sign-On, appelé SSO) a vu le jour.

Introduction : 
Le système d'authentification unique permet aux utilisateurs d'accéder aux applications de différents systèmes au sein de l'entreprise après s'être connectés une fois sans avoir à saisir à plusieurs reprises les informations de connexion. Spring Security est un cadre de sécurité puissant et SAML (Security Assertion Markup Language) est une norme ouverte pour l'authentification et l'autorisation inter-domaines.

Cet article expliquera comment utiliser Java pour développer un système d'authentification unique basé sur Spring Security SAML et fournira des exemples de code spécifiques.

Étape 1 : Préparation

  1. Installez Java, Spring Boot et Maven.
  2. Créez un projet Spring Boot et ajoutez des dépendances : spring-boot-starter-security, spring-security-saml2-core et spring-security-saml2-service-provider.

Étape 2 : Configurez SAML

  1. Configurez les métadonnées SP, les métadonnées IDP et les informations clés dans le fichier application.properties.
# SP元数据
security.saml2.metadata.sp.entity-id=
security.saml2.metadata.sp.private-key-location=
security.saml2.metadata.sp.public-key-location=

# IDP元数据
security.saml2.metadata.idp.entity-id=
security.saml2.metadata.idp.single-sign-on-service.location=
security.saml2.metadata.idp.single-logout-service.location=

# 密钥信息
security.saml2.keystore.location=
security.saml2.keystore.password=
security.saml2.private-key.password=
Copier après la connexion
  1. Créez une classe Java nommée "SAMLWebSecurityConfig", héritez de "SAMLConfigurerAdapter" et remplacez les méthodes correspondantes.
@Configuration
@EnableWebSecurity
public class SAMLWebSecurityConfig extends SAMLConfigurerAdapter {

    @Autowired
    private SAMLUserDetailsService samlUserDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/saml/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(saml())
                .userDetailsService(samlUserDetailsService);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(samlAuthenticationProvider());
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }
}
Copier après la connexion
  1. Créez une classe Java nommée "SAMLConfigurer", héritez de "SAMLConfigurerAdapter" et remplacez les méthodes correspondantes.
public class SAMLConfigurer extends SAMLConfigurerAdapter {

    @Override
    public void configure(SAMLServiceProviderConfigurer saml) throws Exception {
        saml.keyStore()
                .storeFilePath(keystoreLocation)
                .password(keystorePassword)
                .keyname(keyAlias)
                .keyPassword(keyPassword)
                .and()
                .protocol(PROTOCOL)
                .hostname(HOSTNAME)
                .basePath(BASE_PATH)
                .entityId(SP_ENTITY_ID)
                .metadataFilePath(SP_METADATA_LOCATION);
    }
}
Copier après la connexion

Étape 3 : Créer un service utilisateur

  1. Créez une classe Java nommée "SAMLUser", implémentez l'interface "SAMLUserDetailsService" et implémentez les méthodes correspondantes.
@Service
public class SAMLUser implements SAMLUserDetailsService {

    @Override
    public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
        String username = credential.getNameID().getValue();

        // 根据用户名查询用户信息
        // ...

        // 返回用户详细信息
        return new User(username, "", new ArrayList<>());
    }
}
Copier après la connexion

Étape 4 : Créez un contrôleur

  1. Créez une classe Java nommée "HomeController" pour gérer le saut après une connexion réussie.
@Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "home";
    }
}
Copier après la connexion
  1. Créez une classe Java appelée "LogoutController" pour gérer la déconnexion.
@Controller
public class LogoutController {

    @RequestMapping("/logout")
    public String logout() {
        return "logout";
    }
}
Copier après la connexion

Étape 5 : Créez une vue

  1. Créez deux fichiers modèles, home.html et logout.html, dans le répertoire src/main/resources/templates.

home.html :

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>Welcome to Home Page</h1>
</body>
</html>
Copier après la connexion

logout.html :

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Logout</title>
</head>
<body>
    <h1>You have been logged out</h1>
</body>
</html>
Copier après la connexion

Résumé :
À ce stade, nous avons terminé les étapes de développement d'un système d'authentification unique basé sur Spring Security SAML à l'aide de Java. En configurant SAML et en créant des services utilisateur, nous sommes en mesure de mettre en œuvre un système de connexion stable et sécurisé qui offre une bonne expérience utilisateur.

Référence :

  1. Documentation officielle Spring Security SAML : https://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles