Chapitre 13. Authentification et Autorisation

13.1. Intégration Kerberos et SPNEGO

13.1.1. Intégration Kerberos et SPNEGO

Kerberos est une méthode d'authentification qui est conçue pour les environnements à réseau ouvert. Fonctionne sur la base d'un ticket et d'un authentificateur pour établir l'identité de l'utilisateur et du serveur. Il aide les deux nœuds à communiquer sur un environnement non sécurisé afin d'établir leur identité entre eux de manière sécurisée.
SPNEGO est une méthode d'authentification utilisée par une application de client pour s'authentifier sur le serveur. Cette technologie est utilisée lorsque l'application cliente et le serveur essaient de communiquer avec l'un l'autre mais ne sont pas sûrs du protocole d'authentification. SPNEGO détermine les mécanismes GSSAPI communs entre l'application cliente et le serveur et lui envoie ensuite toutes les opérations de sécurité.
Intégration Kerberos et SPNEGO

Dans une installation normale, l'utilisateur se connecte à un ordinateur de bureau qui est régi par le domaine Active Directory. L'utilisateur utilise ensuite le navigateur web, Firefox ou Internet Explorer pour accéder à une application web qui utilise la négociation de JBoss Negociation sur JBoss EAP. Le navigateur web transfère l'information de sign on de bureau à l'application web. JBoss EAP utilise les messages GSS d'arrière-plan avec Active Directory ou n'importe quel serveur Kerberos pour valider l'utilisateur. Cela permet à l'utilisateur d"effectuer un SSO sans faille dans l'application web

13.1.2. Desktop SSO using SPNEGO

Pour configurer un desktop qui utilise SPNEGO, configurer ce qui suit :
  • Domaine de sécurité
  • Propriétés système
  • Application Web

Procédure 13.1. Configurer Desktop SSO utilisant SPNEGO

  1. Configurer Domaine de sécurité

    Configurer les domaines de sécurité pour qu'il représentent l'identité du serveur et pour sécuriser l'application web.

    Exemple 13.1. Configuration du domaine de sécurité

    <security-domains>
    
        <security-domain name="host" cache-type="default">
    
          <authentication>
    
            <login-module code="Kerberos" flag="required">
    
              <module-option name="storeKey" value="true"/>
    
              <module-option name="useKeyTab" value="true"/>
    
              <module-option name="principal" value="host/testserver@MY_REALM"/>
    
              <module-option name="keyTab" value="/home/username/service.keytab"/>
    
              <module-option name="doNotPrompt" value="true"/>
    
              <module-option name="debug" value="false"/>
    
            </login-module>
    
           </authentication>
    
         </security-domain>
    
       
    
         <security-domain name="SPNEGO" cache-type="default">
    
           <authentication>
    
             <login-module code="SPNEGO"  flag="requisite">
    
               <module-option name="password-stacking" value="useFirstPass"/>
    
               <module-option name="serverSecurityDomain" value="host"/>
    
             </login-module>
    
    
             <!-- Login Module For Roles Search -->
    
           </security-domain>
    
  2. Configuration des propriétés système

    Si nécessaire, les propriétés système peuvent être configurées dans le modèle de domaine.

    Exemple 13.2. Configurer les propriétés système

    <system-properties>
    
          <property name="java.security.krb5.kdc" value="mykdc.mydomain"/>
    
          <property name="java.security.krb5.realm" value="MY_REALM"/>
    
        </system-properties>
    
  3. Configurer Application Web

    Il n'est pas possible de remplacer les authentificateurs, mais il est possible d'ajouter le NegotiationAuthenticator comme valve à votre jboss-web.xml pour configurer l'application web.

    Note

    La valve a besoin d'avoir security-constraint et login-config définis dans le fichier web.xml car c'est utilisé pour décider quelles sources sont sécurisées. Cependant, l' auth-method est remplacée par cet authenticateur.

    Exemple 13.3. Configurer Application Web

     <!DOCTYPE jboss-web PUBLIC
      "-//JBoss//DTD Web Application 2.4//EN"
      "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
    
      <jboss-web>
    
        <security-domain>SPNEGO</security-domain>
    
        <valve>
    
          <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name>
    
        </valve>
    
      </jboss-web>
    
    L'application web exige aussi qu'une dépendance soit définie dans META-INF/MANIFEST.MF pour trouver les classes de JBoss Negotiation.

    Exemple 13.4. Définir la dépendance dans META-INF/MANIFEST.MF

        Manifest-Version: 1.0
    
        Build-Jdk: 1.6.0_24
    
        Dependencies: org.jboss.security.negotiation
    

13.1.3. Configurer JBoss Negociation sur un domaine Microsoft Windows.

Cette section décrit comment configurer les comptes requis par JBoss Negociation à utiliser quand JBoss EAP doit exécuter sur un serveur Microsoft Windows, faisant partie du domaine Active Directory.
Dans cette section, le nom d'hôte utilisé pour accéder au serveur dénommé {hostname}, {realm}, le domaine {domain} et le serveur hébergeant l'instance de JBoss EAP est dénommé {machine_name}.

Procédure 13.2. Configurer JBoss Negociation sur un domaine Microsoft Windows.

  1. Supprimer les mappages principaux du service existant

    Dans un réseau Microsoft Windows, certains mappages sont créés automatiquement. Supprimez les mappages créés automatiquement pour mapper l'identité du serveur avec le service principal pour que la négociation se déroule correctement. Le mappage permet au navigateur web de l'ordinateur client de faire confiance au serveur et d'essayer SPNEGO. L'ordinateur client vérifie avec le contrôleur de domaine un mappage de la forme HTTP {hostname}
    Voici les étapes nécessaires pour supprimer les mappages existants :
    • Listez les mappages enregistrés dans le domaine de l'ordinateur qui utilise la commande setspn -L {machine_name}.
    • Supprimez les mappages existants par les commandes, setspn -D HTTP/{hostname} {machine_name} et setspn -D host/{hostname} {machine_name}.
  2. Créez un compte d'utilisateur hôte.

    Note

    Veillez à ce que le nom d'utilisateur hôte soit différent de {machine_name}.
    Dans le reste de la section, le nom d'utilisateur hôte est {user_name}.
  3. Définir le mappage entre {user_name} et {hostname}.

    • Exécutez la commande suivante pour configurer le mappage pricipal du service, ktpass -princ HTTP/{hostname}@{realm} -pass * -mapuser {domain}\{user_name}.
    • Saisir le mot de passe du nom d'utilisateur quand vous y serez invité.

      Note

      Réinitialisez le mot de passe de l'utilisateur comme prérequis d'exportation du keytab.
    • Vérifiez le mappage en exécutant la commande suivante, setspn -L {user_name}
  4. Exportez le keytab de l'utilisateur dans le serveur sur lequel EAP est installé.

    Exécutez la commande suivante pour exporter le keytab, ktab -k service.keytab -a HTTP/{hostname}@{realm}.

    Note

    Cette commande exporte le ticket duHTTP/{hostname} principal dans le fichier keytab service.keytab, qui est utilisé pour configurer le domaine de sécurité hôte sur JBoss.
  5. Définir le principal dans le domaine de sécurité comme suit :
    <module-option name="principal">HTTP/{hostname}@{realm}</module-option>