Comment SpringBoot utilise OAuth2 pour l'authentification et l'autorisation

Comment SpringBoot utilise OAuth2 pour l'authentification et l'autorisation

OAuth2 est un cadre d'autorisation qui peut être utilisé pour sécuriser l'accès aux ressources utilisateur par des applications tierces. Dans SpringBoot, nous pouvons utiliser Spring Security et Spring OAuth2 pour implémenter les fonctions d'authentification et d'autorisation OAuth2. Cet article explique comment utiliser OAuth2 pour l'authentification et l'autorisation dans SpringBoot.

Concepts de base d'OAuth2

Avant de commencer à présenter comment utiliser OAuth2 pour l'authentification et l'autorisation, comprenons les concepts de base d'OAuth2.

Client

Les clients sont des applications qui nécessitent un accès aux ressources utilisateur, telles que les sites Web, les applications mobiles, etc.

Propriétaire de la ressource

Un propriétaire de ressource est un utilisateur qui possède la ressource d'un utilisateur.

Serveur d'autorisation

Le serveur d'autorisation fait référence au serveur utilisé pour gérer l'autorisation des utilisateurs, qui est chargé de vérifier l'identité des clients et de fournir des jetons d'accès aux clients.

Serveur de ressources

Un serveur de ressources fait référence à un serveur qui stocke les ressources utilisateur et est responsable de la validation des jetons d'accès et de la fourniture des ressources utilisateur aux clients.

Jeton d'accès

Un jeton d'accès est un jeton qu'un client utilise pour accéder aux ressources utilisateur, émis par un serveur d'autorisation.

Actualiser le jeton

Les jetons d'actualisation sont utilisés pour renouveler les jetons d'accès afin que les clients puissent continuer à accéder aux ressources utilisateur.

Portée de l'autorisation (Périmètre)

L'étendue de l'autorisation fait référence aux autorisations que le client demande pour accéder aux ressources de l'utilisateur.

Spring Security et Spring OAuth2

Spring Security est un framework de sécurité basé sur Spring qui fournit des fonctions d'authentification et d'autorisation. Spring OAuth2 est la fonction d'authentification et d'autorisation d'OAuth2 implémentée sur la base de Spring Security.

Spring OAuth2 fournit les composants de base suivants :

  • Serveur d'autorisation : Un serveur utilisé pour gérer l'autorisation des utilisateurs.
  • Serveur de ressources : Un serveur qui stocke les ressources utilisateur.
  • Client : une application qui doit accéder aux ressources de l'utilisateur.
  • Jeton d'accès : un jeton utilisé pour accéder aux ressources de l'utilisateur.

Utilisez OAuth2 dans SpringBoot pour l'authentification et l'autorisation

Dans SpringBoot, nous pouvons utiliser Spring Security et Spring OAuth2 pour implémenter les fonctions d'authentification et d'autorisation OAuth2. Ci-dessous, nous utiliserons un exemple simple pour présenter comment utiliser OAuth2 pour l'authentification et l'autorisation dans SpringBoot.

ajouter des dépendances

Tout d'abord, ajoutez les dépendances suivantes pom.xmlau fichier :

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!-- Spring Security OAuth2 -->
    <dependency>
        <groupId>org.springframework.security.oauth</groupId>
        <artifactId>spring-security-oauth2</artifactId>
        <version>2.3.7.RELEASE</version>
    </dependency>
</dependencies>

Configurer Spring Security¶

Dans SpringBoot, nous pouvons utiliser Java Config pour configurer Spring Security. Ajoutez la configuration suivante au SecurityConfig.javafichier :

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
    
    
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService);
        authenticationProvider.setPasswordEncoder(passwordEncoder);
        return authenticationProvider;
    }

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    
    
        http.authorizeRequests()
                .antMatchers("/oauth/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().permitAll()
                .and()
                .logout().permitAll()
                .and()
                .csrf().disable();

        // 配置 OAuth2 认证
        http.oauth2Login();
    }
}

Dans le code ci-dessus, nous en configurons d'abord un DaoAuthenticationProviderpour obtenir les informations utilisateur de la base de données et nous authentifier. Enregistrez- vous configure(AuthenticationManagerBuilder auth)ensuite dans la méthode. Ensuite, l'autorisation de la requête est configurée dans la méthode , la requête autorisée ne nécessite pas d'authentification et le reste des requêtes doit être authentifié. Enfin, nous utilisons la méthode pour activer la fonctionnalité de connexion OAuth2.authenticationProvider()AuthenticationManagerBuilderconfigure(HttpSecurity http)/oauth/**http.oauth2Login()

Configurer OAuth2

Pour configurer OAuth2 dans SpringBoot, vous devez ajouter la configuration suivante au application.ymlfichier :

spring:
  security:
    oauth2:
      client:
        registration:
          custom-client:
            client-id: client-id
            client-secret: client-secret
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            scope:
              - read
              - write
            client-name: Custom Client
        provider:
          custom-provider:
            authorization-uri: https://custom-provider.com/oauth/authorize
            token-uri: https://custom-provider.com/oauth/token
            user-info-uri: https://custom-provider.com/userinfo
            user-name-attribute: sub

Dans la configuration ci-dessus, nous avons configuré un client OAuth2 custom-clientnommé , y compris client-id, client-secret, authorization-grant-type, redirect-uri, scopeet client-named'autres informations. Dans le même temps , nous avons également configuré un fournisseur de services OAuth2 custom-providernommé , comprenant authorization-uri, , et d'autres informations.token-uriuser-info-uriuser-name-attribute

créer un contrôleur

Enfin, nous devons créer un contrôleur pour gérer les demandes liées à l'authentification et à l'autorisation OAuth2. Ajoutez le code suivant au OAuth2Controller.javafichier :

@RestController
@RequestMapping("/oauth")
public class OAuth2Controller {
    
    

    @GetMapping("/callback")
    public String callback() {
    
    
        return "callback";
    }

    @GetMapping("/user")
    public Principal user(Principal principal) {
    
    
        return principal;
    }
}

Dans le code ci-dessus, nous avons créé deux méthodes, callback()la méthode est utilisée pour traiter la demande de rappel d'OAuth2, et user()la méthode est utilisée pour obtenir les informations de l'utilisateur actuellement connecté.

Tester l'authentification et l'autorisation OAuth2

Maintenant, nous avons terminé la configuration de l'authentification et de l'autorisation en utilisant OAuth2 dans SpringBoot. Ensuite, nous pouvons utiliser des outils tels que Postman ou un navigateur pour tester les fonctions d'authentification et d'autorisation d'OAuth2.

Tout d'abord, nous devons utiliser pour https://custom-provider.com/oauth/authorizeaccéder à la page d'autorisation OAuth2, entrer le nom d'utilisateur et le mot de passe, et effectuer l'opération d'autorisation. Nous serons alors redirigés vers redirect-uril'adresse indiquée , par exemple http://localhost:8080/login/oauth2/code/custom-client.

Après avoir obtenu le code d'autorisation, nous pouvons utiliser la commande suivante pour obtenir le jeton d'accès :

curl -X POST \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=authorization_code&code=授权码&redirect_uri=http://localhost:8080/login/oauth2/code/custom-client&client_id=client-id&client_secret=client-secret" \
     https://custom-provider.com/oauth/token

Après avoir obtenu le jeton d'accès, nous pouvons utiliser la commande suivante pour accéder à la ressource protégée :

curl -H "Authorization: Bearer 访问令牌" \
     https://custom-provider.com/userinfo

Si l'accès réussit, des informations sur l'utilisateur actuel seront renvoyées.

Résumer

Dans cet article, nous avons expliqué comment utiliser OAuth2 pour l'authentification et l'autorisation dans SpringBoot. Nous avons d'abord présenté les concepts de base d'OAuth2 et les connaissances pertinentes de Spring Security et Spring OAuth2, puis expliqué en détail comment configurer Spring Security et OAuth2 dans SpringBoot, et comment créer des contrôleurs pour gérer les demandes liées à OAuth2. Grâce à l'explication de cet article, je pense que les lecteurs ont maîtrisé les bases de l'utilisation d'OAuth2 dans SpringBoot pour l'authentification et l'autorisation.

Je suppose que tu aimes

Origine blog.csdn.net/it_xushixiong/article/details/131353262
conseillé
Classement