JBoss/Wildfly SSO

Guide d'intégration SSO de Red Hat JBoss (& Wildfly)

Ce guide d'intégration peut être utilisé pour configurer un serveur d'application JBoss ou Wildfly afin d'utiliser l'authentification SSO fournie par IBM Security Verify ou IBM Security Verify Access Cette intégration utilise le domaine d'identité JSON Web Token (JWT) qui fait partie du sous-système Elytron. Ce module est chargé de :

  • Établir la confiance avec le service d'authentification en amont.
  • Extraction d'informations sur l'identité à partir de la demande entrante.
  • Construction de l'objet Principal disponible dans la HttpServletRequest

Une fois configurées, les politiques de sécurité peuvent être appliquées soit par le serveur d'application à l'aide de l'ancienne capacité de contrainte de sécurité, soit en utilisant l'instance IBM Application Gateway en amont pour appliquer une logique commerciale personnalisable telle que l'authentification multifactorielle ou l'authentification basée sur le risque.

Une intégration de démonstration utilisant IBM Application Gateway et les conteneurs Wildfly est documentée dans le référentiel IBM Security Integrations.

Connaissances supposées

Ce guide suppose que vous êtes familiarisé avec :

  • Configuration du serveur JBoss via l'interface de gestion HTTP, le CLI ou l'édition du fichier de configuration.
  • Création et modification des bases de données fiduciaires de PCKS12
  • (Verify Access uniquement) Configuration des serveurs mandataires inversés de Verify Access et des jonctions associées
  • (Verify SaaS uniquement) Création et gestion des locataires IBM Security Verify

Prérequis

  • Application Java (ear/war)
  • Une source d'identité ; elle peut être sur place (Verify Access) ou dans le nuage (Verify SaaS )
  • Infrastructure à clé publique pour signer et vérifier les informations d'identité
    • Lors des tests, les certificats peuvent être auto-signés mais doivent être gérés dans les environnements de production

Produits pris en charge

Ce guide d'intégration est destiné à être utilisé avec

  • JBoss application server 7.1

    • Wildfly 20.0.0

  • IBM Security Access Manager 10.0.0.0

Présentation de l'architecture

1123

Ce guide détaille deux voies d'intégration, l'une pour les solutions sur site et l'autre pour les solutions basées sur le cloud. Une intégration de démonstration utilisant IBM Application Gateway et JBoss Wildfly est documentée ici et illustrée dans la figure ci-dessus. Les deux architectures utilisent un modèle de déploiement très similaire dans lequel un proxy inverse identifie les utilisateurs avant de prendre la décision d'autoriser l'accès aux ressources du serveur web. Dans le cas d'un déploiement en nuage, le proxy inverse est IBM Application Gateway, et l'identité est vérifiée par IBM Security Verify SaaS; pour les déploiements sur site, IBM Security Verify Access utilise l'architecture de machine virtuelle existante pour déployer WebSEAL avec un registre d'utilisateurs basé sur LDAP ou s'intégrer à une source d'identité fédérée.

1123

Le diagramme de séquence décrit l'interaction entre le navigateur et un utilisateur qui tente d'accéder à une ressource protégée. Lorsqu'un utilisateur demande une ressource protégée, le mandataire inverse intercepte la demande et redirige l'utilisateur pour qu'il s'authentifie. Pour les déploiements dans le nuage, la démonstration est faite en utilisant IBM Security Verify SaaS comme fournisseur d'identité OIDC ; pour les déploiements sur site, IBM Security Verify Access peut s'authentifier auprès d'un registre d'utilisateurs local (LDAP ou Active Directory ) ou rediriger vers Federated Identity Partner. Une fois que l'utilisateur s'est authentifié, il est renvoyé au proxy inverse où un jeton d'identité est propagé à l'application web protégée où il peut être validé à l'aide de la cryptographie à clé publique.

Configuration du serveur JBoss / Wildfly

Les sections suivantes détaillent la configuration requise du serveur et de l'application pour valider un JWT généré par un fournisseur d'identité. Le résultat de la configuration du serveur est un nouveau domaine de sécurité capable de valider le JWT fourni par IBM Application Gateway ou WebSEAL. Les applications peuvent utiliser ce nouveau domaine pour fournir l'authentification et l'autorisation.

Paramètres de configuration disponibles

Le point d'intégration pour la consommation de JWTs dispose d'un certain nombre d'options de configuration. Une liste complète des paramètres disponibles est disponible dans la documentation d'Elytron

  • principal-claim: Claim qui sera utilisé pour définir le nom du Principal créé
  • issuer: Domaine qui a émis le JWT
  • audience: Domaine qui consommera le JWT
  • kid: Identifiant permettant de sélectionner la clé publique utilisée pour vérifier et/ou déchiffrer le JWT
  • public-key: La clé publique (format PEM) matériel

Configuration de l'application Java

Le fichier WEB-INF/web.xml de l'application Java doit contenir l'élément login-configuration. Cet élément doit utiliser la méthode d'authentification BEARER_TOKEN pour invoquer le mécanisme d'authentification JWT. Ce fichier doit également contenir les noms de tous les groupes utilisés par l'application Java Java EE group-to-role mapping).

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID"
         version="2.5">
    <display-name>IBMVerifyDemoApplication</display-name>
    <login-config>
        <auth-method>BEARER_TOKEN</auth-method>
        <realm-name>ibm-security-verify-realm</realm-name>
    </login-config>
    <security-role>
        <role-name>ExampleGroup</role-name>
    </security-role>
</web-app>

Le site WEB-INF/jboss-web.xml doit également contenir le domaine de sécurité avec la configuration JWT token-realm. Si le token-realm est attaché à la fabrique d'authentification http par défaut, ce fichier peut être omis.

En outre, le fichier WEB-INF/jboss-web.xml contient la configuration du domaine de sécurité :

<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.3//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_3_0.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>ibm-security-verify-realm</security-domain>
</jboss-web>

Configuration du sous-système Elytron

Le sous-système Elytron doit être configuré pour valider (et décrypter si nécessaire) les jetons d'authentification JWT conformes à la spécification d'authentification RFC 6750 mise en œuvre par JBoss/Wildfly. Cela peut se faire soit en utilisant l'interface de gestion d'un serveur d'application, soit en utilisant les outils CLI fournis par JBoss. Les utilisateurs avancés peuvent également modifier directement les fichiers de configuration XML si nécessaire.

Configuration de l'interface graphique

Part 1:

Part 2:

Configuration basée sur l'interface de programmation (CLI)

Le script jboss_cli.sh suivant peut être utilisé pour configurer les sous-systèmes JBoss requis dans un fichier de configuration XML (par exemple standalone.xml ). Le bloc de code : crée un keystore qui contient le certificat X509 de vérification du JWT ; ajoute un nouveau domaine de sécurité qui analyse le JWT généré par le fournisseur d'identité ; et connecte le nouveau domaine à l'application undertow responsable de l'acceptation des connexions HTTP entrantes. Les résultats de ces commandes sont détaillés dans les sections suivantes.

Pour exécuter cette opération sur votre serveur d'application, les propriétés kid et public-key doivent être mises à jour pour correspondre aux propriétés key-label et à la clé publique utilisées par WebSEAL ou IBM Application Gateway

batch
# Add a new token security realm to elytron for authentication using JWTs
/subsystem=elytron/token-realm=isva-jwt-realm:add(jwt={issuer=["www.ibm.com"],audience=["demo.integration.server"],key-map={"CN=iag.server"="-----BEGIN·PUBLIC·KEY-----
MIICIjA . . . CAwEAAQ==
---    --END·PUBLIC·KEY-----"}},principal-claim="sub")

# Add a new security domain, which uses the jwt security realm
/subsystem=elytron/security-domain=jwt-domain:add(realms=[{realm=isva-jwt-realm,role-decoder=groups-to-roles}],permission-mapper=default-permission-mapper,default-realm=isva-jwt-realm)

# Create http authentication factory that uses BEARER_TOKEN authentication
/subsystem=elytron/http-authentication-factory=jwt-http-authentication:add(security-domain=jwt-domain,http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name="BEARER_TOKEN",mechanism-realm-configurations=[{realm-name="isva-jwt-realm"}]}])

# Configure Undertow to use our http authentication factory for authentication
/subsystem=undertow/application-security-domain=ibm-security-verify-realm:add(http-authentication-factory=jwt-http-authentication)

run-batch

reload

Configuration basée sur des fichiers

Le bloc de code XML détaille les modifications apportées au sous-système Elytron à la suite de l'exécution des commandes CLI de JBoss ci-dessus. Une nouvelle adresse token-realm est ajoutée à la liste des domaines de sécurité. Ce domaine contient la configuration des réclamations JWT ainsi que le certificat X509 utilisé pour vérifier la signature du jeton. La liste complète des paramètres de configuration est disponible dans la documentation Wildfly.

Un élément http-authentication-factory est également créé et connecté au site token-realm. Cet élément contient également la configuration du domaine de sécurité qui doit être définie dans le fichier WEB-INF/jboss-web.xml de l'application web Java. Une nouvelle adresse key-store est ajoutée pour fournir le certificat X509 nécessaire à la vérification du JWT. Si un autre magasin de clés est utilisé, les éléments correspondants de la configuration de token-realm doivent également être mis à jour.

    <subsystem xmlns="urn:wildfly:elytron:14.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
        <security-domains>
            <security-domain name="jwt-domain" default-realm="isva-jwt-realm" permission-mapper="default-permission-mapper">
                <realm name="isva-jwt-realm" role-decoder="groups-to-roles"/>
            </security-domain>
        </security-domains>
        <security-realms>
            <token-realm name="isva-jwt-realm" principal-claim="sub">
                <jwt issuer="www.ibm.com" audience="jboss-jwt-audience">
                    <key kid="/C=AU/ST=QLD/L=Gold Coast/O=IBM/CN=iag.server"
                            public-key="-----BEGIN PUBLIC KEY-----
MIIC . . . AwEAAQ==
-----END PUBLIC KEY-----"/>
                </jwt>
            </token-realm>
        </security-realms>
        <http>
            <http-authentication-factory name="jwt-http-authentication" security-domain="jwt-domain" http-server-mechanism-factory="global">
                <mechanism-configuration>
                    <mechanism mechanism-name="BEARER_TOKEN">
                        <mechanism-realm realm-name="isva-jwt-realm"/>
                    </mechanism>
                </mechanism-configuration>
            </http-authentication-factory>
            <provider-http-server-mechanism-factory name="global"/>
        </http>
    </subsystem>
        <subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
            <application-security-domains>
                <application-security-domain name="ibm-security-verify-realm" http-authentication-factory="jwt-http-authentication"/>
            </application-security-domains>
        </subsystem>

Vérifier l'intégration

Le guide Verify Integration peut être utilisé pour configurer IAG afin qu'il fournisse des informations d'identité à JBoss ou Wildfly. Ce guide présente également une application Java de démonstration simple qui illustre les possibilités de SSO offertes par l'intégration de JBoss avec IBM Security Verify.

Une démonstration d'intégration utilisant IBM Application Gateway et JBoss Wildfly est documentée ici et les fichiers sources sont disponibles dans le référentiel IBM Security Integrations

Vérifier l'intégration de l'accès

Le guide d' intégration de Verify Access peut être utilisé pour configurer Verify Access afin qu'il fournisse des informations d'identité à JBoss. Ce guide présente également une application Java de démonstration simple qui illustre les possibilités de SSO offertes par l'intégration de JBoss avec IBM Security Verify Access

Traitement des incidents

Si vous rencontrez des problèmes ou si vous avez une exigence de déploiement spécifique qui n'est pas couverte par ce guide, vous pouvez créer un problème sur le GitHub ibm-security-integration. À partir de là, les développeurs d' IBM et les membres de la communauté peuvent contribuer et collaborer pour trouver une solution.