IBM Security Verify Intégration
IBM Security Verify SSO pour JBoss / Wildfly utilisant IBM Application Gateway
IBM Security Verify peut être utilisé pour fournir une identité basée sur le cloud à IBM Application Gateway (IAG) via la norme OIDC. IAG est un proxy inverse léger qui assure l’authentification et l’autorisation pour les serveurs d’applications web. IAG peut également appliquer des politiques d’authentification supplémentaires basées sur le chemin (par ex. 2FA) lorsque nécessaire.
Connaissances supposées
Ce guide part du principe que vous êtes familier avec :
- Les applications IBM Security Verify et la gestion d’un registre d’utilisateurs cloud
- La configuration d’IBM Application Gateway (IAG) – en particulier :
- Création d’une application Verify à partir du modèle IAG
- Configuration d’une source d’identité IAG
- Configuration d’un serveur de ressources IAG
- Configuration SSL :
- clé/certificat pour HTTPS
- SSL mutuel pour les serveurs protégés
- (Fortement recommandé pour le trafic JBoss ↔ IAG)
Vous devez également connaître l’infrastructure à clés publiques nécessaire aux connexions SSL entre IAG et le serveur jonctionné.
Prérequis
- Un serveur JBoss / Wildfly configuré pour l’authentification SSO – voir ce guide
- Un abonnement IBM Security Verify (ou compte d’essai)
- Une PKI pour sécuriser les connexions vers/depuis IAG et le serveur JBoss/Wildfly
Configuration d’IBM Security Verify
Le scénario Verify explique comment configurer un locataire Verify pour fournir le SSO à IAG. Créez (ou mettez à jour) une application IAG et ajoutez le bon redirect_uri
correspondant au domaine/nom d’hôte protégé par l’instance IAG.
Configurez également votre registre d’utilisateurs (Cloud Directory ou source fédérée).
Déploiement d’IBM Application Gateway
Les clés resource_servers
et identity
dans config.yaml
permettent à IAG de transmettre l’identité Verify à JBoss.
Serveurs de ressources
resource_servers:
- path: "/wildflysso"
connection_type: ssl
transparent_path: false
sni: "demo.integration.server"
mutual_auth:
certificate_auth:
certificate:
- "@iag.pem"
- "@iag.key"
servers:
- host: "wildfly.integration.server"
port: 8443
ssl:
certificate:
- "@integration.target.pem"
identity_headers:
jwt:
hdr_name: "Authorization"
certificate:
- "@iag.pem"
- "@iag.key"
claims:
- text: "www.ibm.com"
name: iss
type: string
- attr: AZN_CRED_PRINCIPAL_NAME
name: sub
type: string
- text: "demo.websphere.server"
name: aud
type: string
Le service (Kubernetes) pour Wildfly doit correspondre au host
ci-dessus. Importez la PKI de signature dans le keystore de Wildfly.
Identité
identity:
oidc:
client_id: secret:ibm-verify-oidc-integration/client_id
client_secret: secret:ibm-verify-oidc-integration/client_secret
discovery_endpoint: https://your.tenant.ibmcloudsecurity.com/oidc/endpoint/default/.well-known/openid-configuration
redirect_uri_host: ibm.security.integration.demo:30443
mapped_identity: "{preferred_username}"
ssl:
certificate:
- "@verify_tenant_ca.pem"
response_type: code
response_mode: query
Remarque : JBoss/Wildfly utilisent le champ
kid
du JWT pour localiser la clé publique. Assurez-vous que la valeurkid
(DN du certificat X.509 utilisé pour signer le JWT) correspond à la configuration Elytron.
Configuration avancée
advanced:
configuration:
- stanza: "jwt:/wildflysso"
entry: "hdr-format"
operation: set
value: "Bearer %TOKEN%"
Retour au guide d’intégration JBoss/Wildfly
Démonstration Wildfly : « Hello World »
La démo déploie :
- Un conteneur IAG (RP OIDC) authentifiant via Verify
- Un conteneur Wildfly avec une application Java de test
Ressources : https://github.com/IBM-Security/ibm-security-integrations/tree/dev/jboss
Connaissances supposées
- Déploiement de conteneurs, ConfigMaps et Secrets dans Kubernetes
- Gestion d’un locataire IBM Security Verify
Prérequis
- Téléchargez les artefacts depuis les releases (ou construisez-les à partir du code source).
- Configurez votre accès au cluster Kubernetes.
Création d’une PKI
# Certificats IAG
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:4096 \
-keyout iag.key -out iag.pem \
-subj "/C=AU/ST=QLD/L=Gold Coast/O=IBM/CN=demo.iag.server"
# Certificats Wildfly + keystore PKCS12
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:4096 \
-keyout wildfly.key -out wildfly.pem \
-subj "/C=AU/ST=QLD/L=Gold Coast/O=IBM/CN=demo.integration.server"
# Keystore Wildfly + import du cert. IAG
openssl pkcs12 -export -out application.keystore -inkey wildfly.key \
-in wildfly.pem -passout pass:demokeystore -name server
keytool -importcert -keystore application.keystore -file iag.pem \
-alias isvajwt -storepass demokeystore -noprompt
Secrets IAG
apiVersion: v1
kind: Secret
metadata:
name: ibm-verify-oidc-integration
type: Opaque
data:
client_id: "change_this"
client_secret: "change_this"
ConfigMap IAG
apiVersion: v1
kind: ConfigMap
metadata:
name: ibm-verify-wildfly-integration-config
data:
iag.pem: |
%%IAG_CERTIFICATE%%
iag.key: |
%%IAG_KEY%%
integration.target.pem: |
%%INTEGRATION_SERVER_CERTIFICATE%%
verify_tenant_ca.pem: |
%%VERIFY_TENANT_CERT%%
config.yaml: |
# (contenu identique à la section précédente)
Déploiement IAG
apiVersion: apps/v1
kind: Deployment
metadata:
name: iag-instance
spec:
replicas: 1
selector:
matchLabels:
app: iag-instance
template:
metadata:
labels:
app: iag-instance
spec:
imagePullSecrets:
- name: iag-login
volumes:
- name: integration-config
configMap:
name: ibm-verify-wildfly-integration-config
containers:
- name: iag-instance
image: ibmcom/ibm-application-gateway:21.09.0
volumeMounts:
- name: integration-config
mountPath: /var/iag/config
readinessProbe:
exec: { command: ["/sbin/health_check.sh"] }
initialDelaySeconds: 5
livenessProbe:
exec: { command: ["/sbin/health_check.sh"] }
initialDelaySeconds: 120
---
apiVersion: v1
kind: Service
metadata:
name: iag-instance
spec:
type: NodePort
selector:
app: iag-instance
ports:
- name: iag
port: 8443
nodePort: 30443
Déploiement Wildfly de démonstration
apiVersion: v1
kind: ConfigMap
metadata:
name: wildfly-config
binaryData:
application.keystore: %%WILDFLY_KEYSTORE%%
SecTestWeb.war: %%DEMO_APPLICATION%%
standalone.xml: |
%%STANDALONE_XML%%
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wildfly-integration
spec:
replicas: 1
selector:
matchLabels:
app: wildfly-integration
template:
metadata:
labels:
app: wildfly-integration
spec:
volumes:
- name: wildfly-config
configMap:
name: wildfly-config
containers:
- name: wildfly
image: jboss/wildfly:latest
args: ["/opt/jboss/wildfly/bin/standalone.sh","-b","0.0.0.0","-bmanagement","0.0.0.0"]
ports:
- containerPort: 8443
volumeMounts:
- { name: wildfly-config, subPath: application.keystore, mountPath: /opt/jboss/wildfly/standalone/configuration/application.keystore }
- { name: wildfly-config, subPath: SecTestWeb.war, mountPath: /opt/jboss/wildfly/standalone/deployments/SecTestWeb.war }
- { name: wildfly-config, subPath: standalone.xml, mountPath: /opt/jboss/wildfly/standalone/configuration/standalone.xml }
---
apiVersion: v1
kind: Service
metadata:
name: wildfly-integration
spec:
type: NodePort
selector:
app: wildfly-integration
ports:
- name: wildfly
port: 8443
Updated 21 days ago