web-dev-qa-db-fra.com

Évitez la page de connexion par défaut de keycloak et utilisez la page de connexion du projet

Je travaille sur la création d'une application Web angular.js et cherche comment intégrer keycloak au projet. J'ai lu et regardé de nombreux tutoriels et je constate que la plupart d'entre eux ont des utilisateurs qui se connectent/s'enregistrent via la page de connexion par défaut de keycloak qui les redirige ensuite vers l'application. 

J'ai conçu ma propre page de connexion et d'inscription que je souhaite utiliser. Comment puis-je les utiliser au lieu de keycloak default. Existe-t-il une API que je peux appeler ou peut-être que mon backend ferait cela? J'ai aussi lu qu'il existe des adaptateurs à ressort disponibles pour keycloak, puis-je les utiliser? Tout lien vers un exemple serait utile.

La deuxième question que je me pose est lors de l’inscription puis-je ajouter plus de détails d’utilisateur, comme adresse, date de naissance, sexe dans keycloak? Parce que ma page d'inscription nécessite ces informations.

24
krs8888

Développer les rôles de l'API 

POST to your/keycloak/url/auth/realms/master/protocol/openid-connect/token

avec des données: 

{

    client_id : 'Id_of_your_client',

    username : 'your_username',
    password : '@#$%^&',
    grant_type : "password"

}

vous donnera le jeton d'accès initial et le jeton d'actualisation 

et 

POST à ​​la même URL avec 

les données:

{

    client_id : 'Id_of_your_client',

   // client_secret : 'optional depending on the type of client',

    grant_type : "refresh_token" ,

    refresh_token : refresh_token_you_got_earlier 

}

donnera les nouveaux jetons d'actualisation et d'accès. Ces jetons sont ce que keycloak vérifie pour l'autorisation/l'authentification.

Vous pouvez créer votre propre identifiant et envoyer les informations d'identification à keycloak via une API REST. Une fois que vous avez le jeton d'accès, il vous suffit de l'insérer dans l'en-tête de toute demande en cours adressée à une ressource protégée keycloak en 

headers :{

  Authorization : 'Bearer ' +  access_token_you_got

}
32
UchihaItachi

3 étapes:

  1. Dans le répertoire keycloak/themes / créez un dossier avec le nom, par exemple. mon thème.

  directory structure

  1. Dans le dossier myTheme, placez votre page de connexion personnalisée. 

    (la structure doit être identique à celle des thèmes de base ou de keycloak, mon conseil est de copier le thème de base, de le renommer et de le personnaliser).

  2. Accédez à la console d’administration de la combinaison de clés dans Paramètres du domaine> Thèmes> Thème de connexion et sélectionnez myTheme.

 enter image description here

25
Tomas Marik
  • Vous devriez probablement vous en tenir aux formulaires de Keycloack. Ils apportent des fonctionnalités Nice (SSO, pw reset, etc.) et sont entièrement personnalisables (via des thèmes). Cependant, il est possible d'obtenir le Access Token via ce que l'on appelle Direct Access Grant. Cela peut être fait via Keycloak REST API .
  • L'enregistrement des informations utilisateur personnalisées (genre, travail, etc.) est effectué par User Attributes

Les deux sujets sont plus ou moins couverts dans le document officiel Keycloak Docs .

1
Yuri

Mettez votre thème de connexion dans le répertoire des thèmes de la porte-clés et, en vous connectant par l'administrateur, changez le paramètre de thème de connexion et choisissez votre thème dans la liste déroulante . pour que.

Vous pouvez vous reporter à ce qui suit Configuration du thème Keycloak

1
Aman Jaiswal

Utilisez le code ci-dessous si vous souhaitez accéder à la page de connexion keycloak via Java et obtenir la réponse:

String uri = "http://localhost:7080/auth/realms/{RealmName}/protocol/openid-connect/token";

            HttpClient client = HttpClientBuilder.create().build();
            HttpPost post = new HttpPost(uri);
            post.setHeader("User-Agent",
                    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
            List<BasicNameValuePair> urlParameters = new ArrayList<BasicNameValuePair>();
            urlParameters.add(new BasicNameValuePair("grant_type", "password"));
            urlParameters.add(new BasicNameValuePair("client_id", {ClientName}));
            urlParameters.add(new BasicNameValuePair("username", {UserName}));
            urlParameters.add(new BasicNameValuePair("password", {Password}));
            post.setEntity(new UrlEncodedFormEntity(urlParameters));
            HttpResponse response = client.execute(post);
            System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer result = new StringBuffer();
            String line1 = "";
            while ((line1 = rd.readLine()) != null) {
                result.append(line1);
            }
            System.out.println(result);

Si vos nom d'utilisateur et mot de passe sont valides, response.getStatusLine (). GetStatusCode () donnera la valeur 200, avec accessToken et RefreshToken. Sinon, response.getStatusLine (). GetStatusCode () donnera la valeur 403 et les données: {"error": "invalid_grant", "error_description": "Informations d'identification non valides"}

0
whywake