0
votes

Spring Oauth2.0: Obtenir des rôles d'utilisateur basés sur le clientId (type de subvention de code d'autorisation)

J'ai une configuration de démarrage à ressort OAuth pour Authserver et il est réparateur destiné à servir un certain nombre de serveurs de ressources pour l'authentification à l'aide de Spring-Security-JWT. Mon problème est tout en authentifiant que je dois charger les rôles d'un utilisateur mais spécifique au clientide. Exemple: si User1 a des roles rôles, role_b pour client1 et role_c, rôle_d pour client2, puis lorsque l'utilisateur connecte l'utilisation de clients1 ou client2, il est capable de voir tous les quatre rôles, c'est-à-dire. Role_a, rôle_b, rôle_c, rôle_d parce que je reçois des rôles basés sur le nom d'utilisateur. Si j'ai besoin d'un rôle basé sur le client, j'ai besoin de clientIide. POUR VOTRE INFORMATION, J'utilise le flux de code d'autorisation pour l'authentification. J'ai vu une question similaire mais qui est basée sur la subvention de mot de passe, mais j'essaie d'essayer le flux de code d'autorisation et que cette solution ne fonctionne pas pour moi. Mot de passe subvention Question lien

Vous trouverez ci-dessous mon code où j'ai besoin de
myauthenticationprovider.java xxx

myuserdétailservice.java xxx


0 commentaires

3 Réponses :


1
votes

Vous devez probablement voir oauth2authentication au printemps-sécurité. Lorsque votre client est authentifié par OAUTH2, votre "authentification" est en réalité une instance de oauth2authentication qui implémente l'authentification.

Si vous voyez la mise en œuvre de Oauth2Authentication, elle est faite comme ci-dessous; p>

    public Object getPrincipal() {
       return this.userAuthentication == null ? this.storedRequest.getClientId() : this.userAuthentication
            .getPrincipal();
    }


2 commentaires

Comme je l'ai mentionné, la subvention est le code d'autorisation, je traite à la fois avec l'authentification de l'utilisateur et l'authentification du client dans ce flux. Dans mon cas, MyauthenticationProvider.java ne traitera que de l'authentification de l'utilisateur, et non de l'authentification du client, il ne contient donc pas de oauth2authentication.


@ABIDALI Après que l'utilisateur est connecté hes authentifié, il peut maintenant effectuer des actions avec une application cliente, vous pouvez créer RBAC pour vérifier les rôles (c'est-à-dire que vous devez avoir attribué un rôle avec votre application avec le serveur d'authentification si cela est présent pour le principe, c'est-à-dire l'utilisateur actuel) Vous devez également fournir un tel rôle au serveur authentifiant, tout comme le service OAuth, il y aura plus de service qui ne fait que des tâches RBAC.



1
votes

Étant donné que je n'ai pas eu de solution appropriée pour ma question, je pose la solution que j'ai utilisée après avoir creusé le code source et la recherche.
myjwtacecesstokenconverter.java (étendre jwtaccesstokenconverter et mettre en œuvre la méthode améliore) xxx

info:

Dans la méthode d'amélioration, nous obtiendrons client d'authentification authentification.getoauth2Request () et userDétails / nom_sutilisateur de authentification.getauthentication () .
Avec JWTACCESSSTOKENCONVERTER, AuthenticationProvider et userDétailService sont nécessaires à l'authentification pour générer une étape de jeton d'accès et rafraîchir le jeton de jeton respectivement.


0 commentaires

0
votes

Obtenir l'en-tête d'autorisation de la demande, puis par analyse de base64 pour obtenir le client-id.

quelque chose comme ceci: p>

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes())
.getRequest();
String authHeader = request
.getHeader("Authorization");


0 commentaires