2017-07-17 1 views
2

J'utilise wildfly 10.1.0.Final et keycloak 3.1.0.Final.Comment puis-je me débarrasser de la page de connexion par défaut de keycloak et utiliser ma propre page de connexion

Je veux utiliser ma propre page de connexion, j'ai créé une page de connexion avec un bouton d'envoi pour obtenir le jeton:

$('#submit').click(function(e) { 
    var creds = "client_id=sensorcloud-2.2.1-SNAPSHOT&grant_type=password&client_secret=b6b4f0ec-9936-46a2-9f40-69c207e2e0f2&username=" + $('#username')[0].value +"&password=" + $('#password')[0].value; 
    $.ajax({ 
     url: 'https://localhost:8445/auth/realms/sensorcloud-auth/protocol/openid-connect/token', 
     data: creds, 
     headers: {'Content-Type':'application/x-www-form-urlencoded'}, 
     type: 'POST', 
     success: function(data){ 
     localStorage.setItem('currentUser', JSON.stringify(data)); 
     window.location.replace("https://localhost:8443/sensorcloud-2.2.1-SNAPSHOT/dashboard.html"); 
     }, 
     error: function() { 
     alert("Invalid username or password"); 
     } 
    }); 
    }); 

Et ça marche.

Seulement avec ce code, dashboard.html n'a pas de contrainte de sécurité du tout, donc je mis en place le web.xml comme recommandé:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>SensorCloud</display-name> 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <login-config> 
     <auth-method>KEYCLOAK</auth-method> 
     <realm-name>sensorcloud-auth</realm-name> 
    </login-config> 

    <context-param> 
     <param-name>resteasy.role.based.security</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name> 
      <url-pattern>/rest/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>user</role-name> 
      <role-name>admin</role-name> 
     </auth-constraint> 
     <user-data-constraint> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name> 
      <url-pattern>/index.html</url-pattern> 
      <url-pattern>/help.html</url-pattern> 
      <url-pattern>/register.html</url-pattern> 
      <url-pattern>/login.html</url-pattern> 
     </web-resource-collection> 
     <user-data-constraint> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name> 
      <url-pattern>/dashboard.html</url-pattern>  
      <url-pattern>/management.html</url-pattern> 
      <url-pattern>/password.html</url-pattern> 
      <url-pattern>/user.html</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>user</role-name> 
      <role-name>admin</role-name> 
     </auth-constraint> 
     <user-data-constraint> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name> 
      <url-pattern>/admin.html</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>admin</role-name> 
     </auth-constraint> 
     <user-data-constraint> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 

    <security-role> 
     <role-name>admin</role-name> 
    </security-role> 
    <security-role> 
     <role-name>user</role-name> 
    </security-role> 
</web-app> 

Certaines pages publiques sont accessibles par quelqu'un comme index .html, login.html. Et certaines pages doivent être accessibles uniquement par l'utilisateur et l'administrateur, comme dashboard.html, et admin.html ne doit être accessible que par l'utilisateur admin.

Et dans mon royaume keycloak paramètre client, pour le client sensorclout-2.2.1-SNAPSHOT, j'ai l'URL de redirection comme

https://localhost:8443/sensorcloud-2.2.1-SNAPSHOT/ *

Mais chaque fois que je tente d'aller à dashboard.html, Je redirigerai la page de connexion par défaut de keycloak. Je veux être redirigé vers ma page de connexion personnalisée.

Comment puis-je y parvenir?

Merci

+0

Avez-vous essayé d'utiliser la fonctionnalité Keycloak [themes] (https://keycloak.gitbooks.io/documentation/server_development/topics/themes.html)? Ce n'est pas exactement ce que vous voulez, mais vous pourrez peut-être accomplir la même chose. – stdunbar

+0

Oui, je le sais, mais nous ne voulons pas l'utiliser. Nous voulons juste utiliser keycloak comme serveur d'authentification. – LebroNan

Répondre

2

lorsque vous définissez Type d'accès de votre client à « public », puis keycloak toujours rediriger un utilisateur vers sa page de connexion. Vous pouvez définir Type d'accès sur "support seulement" - dans ce cas, keycloak ne redirige PAS, mais vous devez être authentifié pour accéder aux ressources sécurisées. Si vous configurez keycloak comme ceci, alors, lors de l'accès aux pages sécurisées, vous devrez implémenter un processus, qui vérifie, si l'utilisateur est déjà authentifié, et si non, redirigez-le vers votre page de connexion.