Spring Security OAuth2 danse et obtient les paramètres

alexanoïde

Dans mon application Java Spring, j'ai implémenté l'autorisation utilisateur OAuth2 via un fournisseur OAuth2 externe.

Sur mon hôte local, afin d'authentifier l'utilisateur via ce fournisseur OAuth2 externe, je dois passer par l'url suivante: https://127.0.0.1:8443/login/ok et juste après la danse OAuth2, je peux faire authentifier cet utilisateur. Jusqu'à présent, tout va bien.

Mais quand j'ai des paramètres de requête dans mon URL de connexion, par exemple uid et level:

https://127.0.0.1:8443/login/ok?uid=45134132&level=3

après la danse OAuth2, je suis redirigé vers https://127.0.0.1:8443/ et je perds ces paramètres.

Dans mon panneau de réseau Chrome, je peux voir l'ensemble d'appels suivant:

  1. https://127.0.0.1:8443/login/ok?uid=45134132&level=3
  2. https://connect.ok.ru/oauth/authorize?redirect_uri=https://127.0.0.1:8443/login/ok?uid%3D45134132%26level%3D3&response_type=code&state=AKakq ....
  3. https://127.0.0.1:8443/login/ok?uid=45134132&level=3&code= ....
  4. https://127.0.0.1:8443/

Je perds donc ces paramètres après l'étape 3.

Est-il possible de configurer Spring Security + OAuth2 pour transmettre ces paramètres à l'étape 4 également?

Ceci est ma configuration (c'est une solution basée sur cette réponse Spring Security - Conserver les paramètres d'URL lors de la redirection vers la connexion ) mais cela ne fonctionne pas ( AuthenticationProcessingFilterEntryPoint .commence methodn'est pas appelé):

    @Override
    public void configure(HttpSecurity http) throws Exception {
        // @formatter:off   
        http
        .headers().frameOptions().disable()
        .and().logout()
        .and().antMatcher("/**").authorizeRequests()
            .antMatchers("/", "/login**", "/index.html", "/home.html").permitAll()
            .anyRequest().authenticated()
        .and().exceptionHandling().authenticationEntryPoint(new AuthenticationProcessingFilterEntryPoint("/"))
        .and().logout().logoutSuccessUrl("/").permitAll()
        .and().csrf().csrfTokenRepository(csrfTokenRepository())
        .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
        .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
        // @formatter:on
    }

    public class AuthenticationProcessingFilterEntryPoint extends LoginUrlAuthenticationEntryPoint {
        public AuthenticationProcessingFilterEntryPoint(String loginFormUrl) {
            super(loginFormUrl);
        }

        @Override
        public void commence(HttpServletRequest request, HttpServletResponse response,
                AuthenticationException authException) throws IOException, ServletException {
            RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
            redirectStrategy.sendRedirect(request, response, getLoginFormUrl() + "?" + request.getQueryString());
        }
    }

Qu'est-ce qui ne va pas?

alexanoïde

J'ai implémenté cela de la manière suivante:

    private Filter ssoFilter(ClientResources client, String path) {
        OAuth2ClientAuthenticationProcessingFilter clientFilter = new OAuth2ClientAuthenticationProcessingFilter(path);
        .......
        clientFilter.setAuthenticationSuccessHandler(new UrlParameterAuthenticationHandler());
        return clientFilter;
    }

    public class UrlParameterAuthenticationHandler extends SimpleUrlAuthenticationSuccessHandler {

        @Override
        protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
                throws IOException, ServletException {
            String targetUrl = determineTargetUrl(request, response);

            if (response.isCommitted()) {
                logger.debug("Response has already been committed. Unable to redirect to " + targetUrl);
                return;
            }

            String queryString = HttpUtils.removeParams(request.getQueryString(), "state", "code");
            targetUrl = !StringUtils.isEmpty(queryString) ? targetUrl + "?" + queryString : targetUrl;
            getRedirectStrategy().sendRedirect(request, response, targetUrl);
        }

    }

Veuillez me corriger s'il y a une meilleure approche

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

@RequestMapping n'obtient pas les paramètres et les valeurs. Framework Spring

Microservices et Spring Security OAuth2

Spring Boot Security Oauth2 - Ajout de paramètres OIDC dynamiques

Spring boot REST obtient les paramètres de HTTPConnectionURL

Clients Web et mobiles pour Spring Security OAuth2

Authentification gRPC et OAuth2 avec Spring Security

Spring Security OAuth2 obtient l'accès refusé sur le service REST

Spring Boot Security Oauth2 obtient access_token à partir du cookie

Passer les paramètres d'URL à Spring Security Custom LogoutSuccessHandler

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

La photo Facebook obtient les paramètres et la photo disponibles pendant combien de temps

Symfony obtient les paramètres d'URL avec des espaces et des traits de soulignement

Spring Security obtient tokenValue de OAuth2AuthenticationToken

Express JS obtient les paramètres

Axios obtient avec les paramètres

Spring Security obtient les informations utilisateur dans le service de repos, pour les utilisateurs authentifiés et non authentifiés

Comment Spring obtient les noms de paramètres sans informations de débogage

Échec de l'autorisation OpenID (OAuth2) avec Spring Boot et Spring Security

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

Spring Security OAuth2 et FormLogin dans une seule application

Contrôle des redirections d'authentification avec JHipster, Spring Security et oauth2

Authentification Spring Security OAuth2 et Ldap au même recours

Spring Security Oauth2 et configuration de la connexion par formulaire

Connexion Spring security oauth2 et serveur de ressources dans la même application

Paramètre 'statut' introuvable. Les paramètres disponibles sont [0, 1, param1, param2] dans Mybatis et Spring

Spring Boot et Spring Cloud Security OAUTH 2 SSO échouant avec les dernières versions

Java Spring Security OAuth2: Accepter les informations client via POST

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

Spring Security OAuth2: InsufficientAuthenticationException

TOP liste

  1. 1

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  2. 2

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  3. 3

    Microsoft.WebApplication.targets

  4. 4

    knn classification 10 plis de l'outil et du tri

  5. 5

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

  6. 6

    Quelle est la relation entre le modèle et le tableau ? C'est compliqué

  7. 7

    AutoMapper.Collection.EFCore - Erreur générée lors de la configuration

  8. 8

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

  9. 9

    Fonction de puissance en Java

  10. 10

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  11. 11

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  12. 12

    Comment remplir les valeurs manquantes avec plusieurs colonnes dans R

  13. 13

    Comment puis-je ajouter un UIView sous mon contrôleur de barre d'onglets par programme?

  14. 14

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  15. 15

    Sélectionnez le bouton radio sur la saisie de texte

  16. 16

    Comment rechercher des éléments dans une ArrayList? - Java

  17. 17

    opérations en virgule flottante dans go

  18. 18

    Yat-il un référentiel maven application Java à démarrer rapidement 11

  19. 19

    Placez le modeBar en haut au centre à l'aide de plotly.js

  20. 20

    Comment définir la couleur de l'intersection dans un diagramme de Venn?

  21. 21

    Récupérer plusieurs dépôts git dans le même espace de travail Jenkins

chaudétiquette

Archive