Java Spring Security OAuth2: Accepter les informations client via POST

Jonathon:

J'ai une configuration Boot Spring assez basique et j'ai installé Spring Security et j'ai réussi à mettre en place avec succès OAuth2 pour protéger mon API.

J'ai eu quelques problèmes quelques jours en arrière et demandé (et répondu) une question en ce qui concerne frapper mon /oauth/tokenpoint final. Je me suis vite compris que le problème était que je tentais d'envoyer mes lettres de créance clients dans le corps de ma POSTdemande , mais le point final jeton est configuré dans Spring Security pour accepter les informations d' identification du client ( client_idet secret) via HTTP Basic Auth à la place.

La plupart de mon expérience avec la consommation API OAuth2 a consisté à envoyer des informations d' identification des clients dans le corps de la POSTdemande et je me demandais s'il était possible de configurer Spring Security pour fonctionner de la même manière?

J'ai essayé quelques choses différentes sans succès, comme définissant l'option de configuration suivante, mais je me sens comme ça peut être utilisée que lors de la configuration d'un client OAuth2:

security.oauth2.client.clientAuthenticationScheme=form

Ceci est ma configuration de serveur d'autorisation.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.approval.UserApprovalHandler;
import org.springframework.security.oauth2.provider.token.TokenStore;

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
    @Autowired
    private TokenStore tokenStore;

    @Autowired
    private UserApprovalHandler userApprovalHandler;

    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("client_id")
                .secret("secret")
                .authorizedGrantTypes("password", "authorization_code", "refresh_token")
                .scopes("read", "write")
                .accessTokenValiditySeconds(600)
                .refreshTokenValiditySeconds(3600);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(this.tokenStore)
                .userApprovalHandler(this.userApprovalHandler)
                .authenticationManager(this.authenticationManager);
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) {
        security.tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()")
                .passwordEncoder(this.passwordEncoder);
    }
}
Jonathon:

Comme l' a souligné @chrylis dans les commentaires, l'astuce consiste à utiliser la allowFormAuthenticationForClientsméthode sur AuthorizationServerSecurityConfigurerla configuration du serveur d'autorisation. Dans mon cas, j'ai dans ma AuthorizationServerConfigclasse:

@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
    security.tokenKeyAccess("permitAll()")
            .checkTokenAccess("isAuthenticated()")
            .passwordEncoder(this.passwordEncoder)
            .allowFormAuthenticationForClients();
}

Cela permettra à des informations d' identification de client en passant par des paramètres standard, comme dans le corps de la POSTdemande (ou dans la chaîne de requête), bien que Spring préfère en utilisant HTTP Basic Auth en se joignant au client_idet secretavec deux points ( <client_id>:<secret>), base 64 codant pour le résultat , préfixer avec Basicet en passant que l' en- Authorizationtête, vous donc se retrouver avec quelque chose comme ceci:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

les informations d'identification client OAuth2 flux via l'intégration Spring Boot Keycloak

Configuration du contexte Spring-security pour le serveur OAuth2 à 2 étapes (informations d'identification du client)

Informations d'identification du client Spring Boot + Oauth2

Comment obtenir les informations utilisateur par jeton jwt dans le serveur d'autorisation Spring Security oauth2?

Les informations d'identification du client Spring Boot OAuth2 sont configurées dynamiquement avec webflux

Spring OAuth2 Security - Client Credentials - Custom AuthenticationProvider

Client de repos Spring Security 5 avec OAuth2

Spring Security, OAUTH2, secret client dynamique

Spring Security 5.1.1 Client OAuth2 se connectant au serveur d'authentification spring-security-oauth2

Rediriger vers une URL spécifique après une authentification anonyme réussie via le client Spring Security OAuth2

Comment rafraîchir OAuth2 jeton avec Spring Security 5 client OAuth2 et RestTemplate

Client REST oAuth2 dans Spring Boot 2.0 M6 (Spring Security 5.0)

Client oAuth2 avec octroi de mot de passe dans Spring Security

Type d'octroi de mot de passe du client Spring Security 5 OAuth2

Client Spring Security oauth2 - Comment obtenir un jeton JWT

Octroi d'informations d'identification de mot de passe de propriétaire de ressource Spring Security Oauth2

Obtenir l'objet d'authentification (principal) via oAuth2 Spring Security ?

En utilisant NodeJS, comment puis-je récupérer les informations de session stockées dans PostgreSQL à l'aide du JWT créé par Spring Security OAuth2?

Spring Security OAuth2 - @ EnableOauth2Sso mais accepte également les jetons comme authentification

Mise à l'échelle horizontale des informations d'identification du client Oauth2 de sécurité Spring

Comment puis-je publier les informations d'identification du client Rest sur l'API Spring Security Rest?

Spring Security OAuth2 danse et obtient les paramètres

Spring Security 5: fournir des rôles aux utilisateurs authentifiés OAuth2

Spring Security OAuth2: InsufficientAuthenticationException

Spring Security OAuth2 | InsufficientAuthenticationException

Microservices et Spring Security OAuth2

Spring Security OAuth2 UserRedirectRequiredException

Informations d'identification du client OAuth2

Spring Security donne 403 malgré les bonnes informations d'identification

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Exporter la table de l'arborescence vers CSV avec mise en forme

  3. 3

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  4. 4

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  9. 9

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  10. 10

    php ajouter et fusionner des données de deux tables

  11. 11

    Créer un système Buzzer à l'aide de python

  12. 12

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  13. 13

    Comment changer la couleur de la police dans R?

  14. 14

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  15. 15

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    comment afficher un bouton au-dessus d'un autre élément ?

  18. 18

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  19. 19

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  20. 20

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  21. 21

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

chaudétiquette

Archive