Forked from gyfoster/keycloak-wildfly-mutual-ssl.txt
Last active
February 5, 2024 16:59
-
-
Save malys/12baa68303b6012fe819849b558d43d4 to your computer and use it in GitHub Desktop.
[Keycloak X509 authentication] Instructions for enabling mutual SSL in Keycloak and WildFly #keycloak #TLS #mutual #x509
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# X509 Browser and Direct grant | |
# https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.2/html/server_administration_guide/authentication | |
# https://github.com/keycloak/keycloak-documentation/blob/4.8.x/server_admin/topics/authentication/x509.adoc | |
#https://stackoverflow.com/questions/54258996/git-bash-string-parameter-with-at-start-is-being-expanded-to-a-file-path | |
unameOut="$(uname -s)" | |
case "${unameOut}" in | |
CYGWIN*) prefix="/";; | |
MINGW*) prefix="/";; | |
MSYS*) prefix="/";; | |
*) prefix="" | |
esac | |
CA_SUBJECT="$prefix/C=FR/ST=Toulouse/L=Toulouse/O=Lyra/OU=Architecture/CN=mail.com/[email protected]" | |
SERVER_SUBJECT="$prefix/C=FR/ST=Toulouse/L=Toulouse/O=Lyra/OU=Architecture/CN=server/[email protected]" | |
CLIENT_SUBJECT="$prefix/C=FR/ST=Toulouse/L=Toulouse/O=Lyra/OU=Architecture/CN=client/[email protected]" | |
echo "usage: keycloak-mutual-ssl.sh password " | |
echo Keycloak admin: admin/$1 | |
export JBOSS_HOME=$PWD | |
echo JBOSS_HOME=$JBOSS_HOME | |
PASSWORD=$1 | |
#echo $PASSWORD | |
FILE=ca.truststore | |
if [ ! -f "$FILE" ]; then | |
echo -------------- | |
echo ROOT CA | |
echo -------------- | |
echo Generate the CA private key: | |
openssl genrsa -out ca.key 2048 | |
echo Create and self sign the root certificate: | |
openssl req -new -x509 -key ca.key -subj "$CA_SUBJECT" -out ca.crt | |
echo Import root CA certificate into truststore: | |
keytool -import -file ca.crt -keystore $FILE -keypass $PASSWORD -storepass $PASSWORD -noprompt | |
echo Copy generated file | |
cp $FILE $JBOSS_HOME/standalone/configuration/ | |
# read -n1 -r -p "Press any key to generate server certificate..." key | |
fi | |
#echo WILDFLY | |
#echo ----------- | |
#echo Generate wildfly server key: | |
#openssl genrsa -out wildfly.key 2048 | |
# | |
#echo Generate wildfly certificate signing request: | |
#openssl req -new -key wildfly.key -out wildfly.csr | |
# | |
#echo Sign wildfly CSR using CA key to generate server certificate: | |
#openssl x509 -req -days 3650 -in wildfly.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out wildfly.crt | |
# | |
#echo Convert WildFly cert to pkcs12 format: | |
#openssl pkcs12 -export -in wildfly.crt -inkey wildfly.key -out wildfly.p12 -name myserverkeystore -CAfile ca.crt | |
# | |
#echo Convert WildFly pkcs12 file to Java keystore: | |
#keytool -importkeystore -deststorepass $PASSWORD -destkeypass $PASSWORD -destkeystore wildfly.keystore -srckeystore wildfly.p12 -srcstoretype PKCS12 -srcstorepass $PASSWORD | |
# | |
#echo Copy generated file | |
#cp wildfly.keystore $JBOSS_HOME/standalone/configuration/ | |
# | |
# | |
#read -n1 -r -p "Press any key to generate keycloak certificate..." key | |
FILE=keycloak.keystore | |
if [ ! -f "$FILE" ]; then | |
echo -------------- | |
echo KEYCLOAK | |
echo ------------- | |
echo Generate keycloak server key: | |
openssl genrsa -out keycloak.key 2048 | |
echo Generate keycloak certificate signing request: | |
openssl req -new -key keycloak.key -subj "$SERVER_SUBJECT" -out keycloak.csr | |
echo Sign keycloak CSR using CA key to generate server certificate: | |
openssl x509 -req -days 3650 -in keycloak.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out keycloak.crt | |
echo Convert Keycloak cert to pkcs12 format: | |
openssl pkcs12 -export -in keycloak.crt -inkey keycloak.key -out keycloak.p12 -name myserverkeystore -CAfile ca.crt -passin pass:$PASSWORD -passout pass:$PASSWORD | |
echo Convert Keycloak pkcs12 file to Java keystore: | |
keytool -importkeystore -deststorepass $PASSWORD -destkeypass $PASSWORD -destkeystore $FILE -srckeystore keycloak.p12 -srcstoretype PKCS12 -srcstorepass $PASSWORD | |
echo Copy generated file | |
cp $FILE $JBOSS_HOME/standalone/configuration/ | |
# read -n1 -r -p "Press any key to generate browser certificate..." key | |
fi | |
FILE=clientCert.p12 | |
if [ ! -f "$FILE" ]; then | |
echo -------------- | |
echo "CLIENT (browser)" | |
echo ------------------ | |
echo Generate client server key: | |
openssl genrsa -out client.key 2048 | |
echo Generate client certificate signing request with email: | |
openssl req -new -key client.key -subj "$CLIENT_SUBJECT" -out client.csr | |
echo Sign client CSR using CA key to generate server certificate: | |
openssl x509 -req -days 3650 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt | |
echo Export client certificate to pkcs12 format: | |
openssl pkcs12 -export -in client.crt -inkey client.key -certfile ca.crt -out $FILE -passin pass:$PASSWORD -passout pass:$PASSWORD | |
echo "----> Import $FILE into browser" | |
# read -n1 -r -p "Press any key to launch cli" key | |
fi | |
FILE=mutualTLS.cli | |
if [ ! -f "$FILE" ]; then | |
echo -------------- | |
echo Server configuration | |
echo ------------ | |
#4. Paste the following inside security-realms in WILDFLY_HOME\standalone\configuration\standalone.xml: | |
# <security-realm name="ssl-realm"> | |
# <server-identities> | |
# <ssl> | |
# <keystore path="wildfly.keystore" relative-to="jboss.server.config.dir" keystore-password="secret" alias="myserverkeystore" key-password="$PASSWORD" /> | |
# </ssl> | |
# </server-identities> | |
# <authentication> | |
# <truststore path="ca.truststore" relative-to="jboss.server.config.dir" keystore-password="$PASSWORD" /> | |
# </authentication> | |
# </security-realm> | |
#5. Paste the following inside security-realms in KEYCLOAK_HOME\standalone\configuration\standalone.xml: | |
# <security-realm name="ssl-realm"> | |
# <server-identities> | |
# <ssl> | |
# <keystore path="keycloak.keystore" relative-to="jboss.server.config.dir" keystore-password="secret" alias="myserverkeystore" key-password="$PASSWORD" /> | |
# </ssl> | |
# </server-identities> | |
# <authentication> | |
# <truststore path="ca.truststore" relative-to="jboss.server.config.dir" keystore-password="$PASSWORD" /> | |
# </authentication> | |
# </security-realm> | |
echo "# Configure SSL security realm" >> $FILE | |
echo "# Assumes that all appropriate SSL certificates exist in the keystore/truststore" >> $FILE | |
echo "embed-server --server-config=standalone.xml --std-out=echo" >> $FILE | |
echo "/core-service=management/security-realm=ssl-realm:add()" >> $FILE | |
echo "/core-service=management/security-realm=ssl-realm/server-identity=ssl:add(keystore-path=keycloak.keystore, keystore-password=$PASSWORD)" >> $FILE | |
echo "/core-service=management/security-realm=ssl-realm/authentication=truststore:add(keystore-path=ca.truststore, keystore-password=$PASSWORD)" >> $FILE | |
echo "" >> $FILE | |
echo "# Connect SSLRealm to https-listener" >> $FILE | |
echo "/subsystem=undertow/server=default-server/https-listener=https:remove()" >> $FILE | |
echo "/subsystem=undertow/server=default-server/https-listener=https:add(socket-binding=https, security-realm=ssl-realm,enable-http2=true, verify-client=REQUESTED)" >> $FILE | |
echo "/subsystem=logging/logger=org.keycloak.authentication.authenticators.x509:add" >> $FILE | |
echo "/subsystem=logging/logger=org.keycloak.authentication.authenticators.x509:write-attribute(name=\"level\", value=\"TRACE\")" >> $FILE | |
echo "/subsystem=logging/logger=org.keycloak.services.x509:add" >> $FILE | |
echo "/subsystem=logging/logger=org.keycloak.services.x509:write-attribute(name=\"level\", value=\"TRACE\")" >> $FILE | |
echo "stop-embedded-server" >> $FILE | |
$JBOSS_HOME/bin/jboss-cli.sh --file=$FILE | |
$JBOSS_HOME/bin/add-user-keycloak.sh -u 'admin' -p "$PASSWORD" | |
fi | |
cat $JBOSS_HOME/standalone/configuration/standalone.xml | |
read -n1 -r -p "Check configuration and press any key to launch Keycloak..." key | |
echo -------------- | |
echo Keycloak import and launch | |
echo ------------------ | |
echo "Add the following properties to your app's keycloak.json:" | |
echo "..." | |
echo "truststore": "$JBOSS_HOME/standalone/configuration/ca.truststore", | |
echo "truststore-password": "$PASSWORD", | |
echo ... | |
$JBOSS_HOME/bin/standalone.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=realmExport.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING & | |
echo -------------- | |
echo Keycloak import | |
echo ----------------- | |
#read -n1 -r -p "Press any key to import ..." key | |
sleep 6 | |
echo "Create a user with the same client email address" | |
echo https://localhost:8443/auth/admin/master/console/ | |
$JBOSS_HOME/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password "$PASSWORD" | |
$JBOSS_HOME/bin/kcadm.sh create users -s username=client -s [email protected] -s enabled=true -r x509 | |
read -n1 -r -p "Press any key to launch curl ..." key | |
echo -------------- | |
echo Validation | |
echo ----------------- | |
curl -k -X POST https://localhost:8443/auth/realms/x509/protocol/openid-connect/token --data "grant_type=password&scope=openid profile&username=&password=&client_id=x509" -E client.crt --key client.key | |
# http --verify=no --form POST "https://localhost:8443/auth/realms/x509/protocol/openid-connect/token" grant_type="password" scope="openid profile" username="" password="" client_id="x509" --cert=client.crt --cert-key=client.key | jq ".access_token" -r | cut -d "." -f 2 | base64 -d | jq . | |
# http -v --verify=no --form POST "https://localhost:8443/auth/realms/x509/protocol/openid-connect/token" grant_type="password" scope="openid profile" username="xxxx" password="xxx" client_id="x509" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"id": "x509", | |
"realm": "x509", | |
"notBefore": 0, | |
"revokeRefreshToken": false, | |
"refreshTokenMaxReuse": 0, | |
"accessTokenLifespan": 300, | |
"accessTokenLifespanForImplicitFlow": 900, | |
"ssoSessionIdleTimeout": 1800, | |
"ssoSessionMaxLifespan": 36000, | |
"offlineSessionIdleTimeout": 2592000, | |
"accessCodeLifespan": 60, | |
"accessCodeLifespanUserAction": 300, | |
"accessCodeLifespanLogin": 1800, | |
"actionTokenGeneratedByAdminLifespan": 43200, | |
"actionTokenGeneratedByUserLifespan": 300, | |
"enabled": true, | |
"sslRequired": "external", | |
"registrationAllowed": false, | |
"registrationEmailAsUsername": false, | |
"rememberMe": false, | |
"verifyEmail": false, | |
"loginWithEmailAllowed": true, | |
"duplicateEmailsAllowed": false, | |
"resetPasswordAllowed": false, | |
"editUsernameAllowed": false, | |
"bruteForceProtected": false, | |
"permanentLockout": false, | |
"maxFailureWaitSeconds": 900, | |
"minimumQuickLoginWaitSeconds": 60, | |
"waitIncrementSeconds": 60, | |
"quickLoginCheckMilliSeconds": 1000, | |
"maxDeltaTimeSeconds": 43200, | |
"failureFactor": 30, | |
"roles": { | |
"realm": [ | |
{ | |
"id": "8fcd0f7f-0bf5-4830-a01b-37d862c9ffb9", | |
"name": "offline_access", | |
"description": "${role_offline-access}", | |
"scopeParamRequired": true, | |
"composite": false, | |
"clientRole": false, | |
"containerId": "x509" | |
}, | |
{ | |
"id": "5007f1e7-a09a-4795-8657-c06c1b3faad3", | |
"name": "uma_authorization", | |
"description": "${role_uma_authorization}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": false, | |
"containerId": "x509" | |
} | |
], | |
"client": { | |
"x509": [], | |
"realm-management": [ | |
{ | |
"id": "67af900f-9acf-49d2-ac19-943bc7a2ea8e", | |
"name": "view-users", | |
"description": "${role_view-users}", | |
"scopeParamRequired": false, | |
"composite": true, | |
"composites": { | |
"client": { | |
"realm-management": [ | |
"query-users", | |
"query-groups" | |
] | |
} | |
}, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "e4864164-b1dd-4b67-80f3-4ffe7c17fd3f", | |
"name": "query-users", | |
"description": "${role_query-users}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "b8e8441a-544a-4322-bcea-1f5fe733069e", | |
"name": "query-clients", | |
"description": "${role_query-clients}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "e1830d12-d5e3-40b5-bd7d-3599fad3448f", | |
"name": "manage-clients", | |
"description": "${role_manage-clients}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "b3f704e6-b61e-4231-9568-06bf67fcc58d", | |
"name": "query-groups", | |
"description": "${role_query-groups}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "4c47c49c-73de-4810-99b0-88d0ea9cff91", | |
"name": "create-client", | |
"description": "${role_create-client}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "cd36ddc3-b9db-440d-a8f4-6eb4d41f3518", | |
"name": "manage-users", | |
"description": "${role_manage-users}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "3d58f294-8367-41d6-9319-45f6e9deadd2", | |
"name": "view-realm", | |
"description": "${role_view-realm}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "6a955649-f40a-490d-ad79-fbf445782afd", | |
"name": "manage-events", | |
"description": "${role_manage-events}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "f7cc0fef-0996-4872-9bf6-b9de51874ee3", | |
"name": "view-authorization", | |
"description": "${role_view-authorization}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "7fdd6f6b-3b70-4bf1-bd19-7a040a77c770", | |
"name": "manage-realm", | |
"description": "${role_manage-realm}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "1f7e4526-6393-4779-a473-ed42bb11ecfa", | |
"name": "view-identity-providers", | |
"description": "${role_view-identity-providers}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "5caa457d-e2aa-437a-a704-33bc70b55919", | |
"name": "query-realms", | |
"description": "${role_query-realms}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "a6dfe6b9-79e9-4502-95cd-465432dab31f", | |
"name": "view-clients", | |
"description": "${role_view-clients}", | |
"scopeParamRequired": false, | |
"composite": true, | |
"composites": { | |
"client": { | |
"realm-management": [ | |
"query-clients" | |
] | |
} | |
}, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "13594d48-f1ae-48bb-bee9-93db387b5e6c", | |
"name": "view-events", | |
"description": "${role_view-events}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "b7c3de89-03cd-4cea-bb3b-8d99d2cab663", | |
"name": "impersonation", | |
"description": "${role_impersonation}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "738bc327-07c2-4b8f-80e7-65b57770a4a5", | |
"name": "manage-authorization", | |
"description": "${role_manage-authorization}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "60c039c9-d1e6-4651-a509-de57a989a30a", | |
"name": "manage-identity-providers", | |
"description": "${role_manage-identity-providers}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
}, | |
{ | |
"id": "5efa733e-683f-406b-9154-bba1aab03eeb", | |
"name": "realm-admin", | |
"description": "${role_realm-admin}", | |
"scopeParamRequired": false, | |
"composite": true, | |
"composites": { | |
"client": { | |
"realm-management": [ | |
"view-users", | |
"query-clients", | |
"query-users", | |
"manage-clients", | |
"query-groups", | |
"create-client", | |
"manage-users", | |
"view-realm", | |
"manage-events", | |
"manage-realm", | |
"view-authorization", | |
"view-identity-providers", | |
"query-realms", | |
"view-events", | |
"view-clients", | |
"impersonation", | |
"manage-authorization", | |
"manage-identity-providers" | |
] | |
} | |
}, | |
"clientRole": true, | |
"containerId": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d" | |
} | |
], | |
"security-admin-console": [], | |
"admin-cli": [], | |
"broker": [ | |
{ | |
"id": "9ea07605-7c60-4c61-ad06-7d89dba79cbd", | |
"name": "read-token", | |
"description": "${role_read-token}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "8ab4ec86-6c76-4b3b-a6a0-cdd5c80dfff0" | |
} | |
], | |
"account": [ | |
{ | |
"id": "3a4c280a-8922-4fc4-9126-bc1d888df8d9", | |
"name": "view-profile", | |
"description": "${role_view-profile}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "da25915d-4a58-4fa5-b0ec-806625901c22" | |
}, | |
{ | |
"id": "23798c7a-f55a-4c8b-8f21-e2166910acde", | |
"name": "manage-account-links", | |
"description": "${role_manage-account-links}", | |
"scopeParamRequired": false, | |
"composite": false, | |
"clientRole": true, | |
"containerId": "da25915d-4a58-4fa5-b0ec-806625901c22" | |
}, | |
{ | |
"id": "38c3ef9a-b44f-444b-88f8-d75b3150e425", | |
"name": "manage-account", | |
"description": "${role_manage-account}", | |
"scopeParamRequired": false, | |
"composite": true, | |
"composites": { | |
"client": { | |
"account": [ | |
"manage-account-links" | |
] | |
} | |
}, | |
"clientRole": true, | |
"containerId": "da25915d-4a58-4fa5-b0ec-806625901c22" | |
} | |
] | |
} | |
}, | |
"groups": [], | |
"defaultRoles": [ | |
"uma_authorization", | |
"offline_access" | |
], | |
"requiredCredentials": [ | |
"password" | |
], | |
"otpPolicyType": "totp", | |
"otpPolicyAlgorithm": "HmacSHA1", | |
"otpPolicyInitialCounter": 0, | |
"otpPolicyDigits": 6, | |
"otpPolicyLookAheadWindow": 1, | |
"otpPolicyPeriod": 30, | |
"otpSupportedApplications": [ | |
"FreeOTP", | |
"Google Authenticator" | |
], | |
"clients": [ | |
{ | |
"id": "09e1abf9-3b2c-4284-b7c8-6ea32370c8ca", | |
"clientId": "admin-cli", | |
"name": "${client_admin-cli}", | |
"surrogateAuthRequired": false, | |
"enabled": true, | |
"clientAuthenticatorType": "client-secret", | |
"secret": "**********", | |
"redirectUris": [], | |
"webOrigins": [], | |
"notBefore": 0, | |
"bearerOnly": false, | |
"consentRequired": false, | |
"standardFlowEnabled": false, | |
"implicitFlowEnabled": false, | |
"directAccessGrantsEnabled": true, | |
"serviceAccountsEnabled": false, | |
"publicClient": true, | |
"frontchannelLogout": false, | |
"protocol": "openid-connect", | |
"attributes": {}, | |
"fullScopeAllowed": false, | |
"nodeReRegistrationTimeout": 0, | |
"protocolMappers": [ | |
{ | |
"id": "efe97d19-b376-4450-a1ec-601d6b421448", | |
"name": "username", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${username}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "username", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "preferred_username", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "5e1ef216-9d0b-4d56-9a25-e7083b7025ed", | |
"name": "full name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-full-name-mapper", | |
"consentRequired": true, | |
"consentText": "${fullName}", | |
"config": { | |
"id.token.claim": "true", | |
"access.token.claim": "true" | |
} | |
}, | |
{ | |
"id": "5521a531-edf6-4ae8-a83a-5017781262b0", | |
"name": "role list", | |
"protocol": "saml", | |
"protocolMapper": "saml-role-list-mapper", | |
"consentRequired": false, | |
"config": { | |
"single": "false", | |
"attribute.nameformat": "Basic", | |
"attribute.name": "Role" | |
} | |
}, | |
{ | |
"id": "7800e1df-cf0e-4b41-bf7d-a86d62aff30f", | |
"name": "given name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${givenName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "firstName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "given_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "d3018132-a761-457f-b855-57a00b0c3e41", | |
"name": "family name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${familyName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "lastName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "family_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "46ecb916-e8fb-4ece-a539-6adfb4b0b143", | |
"name": "email", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${email}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "email", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "email", | |
"jsonType.label": "String" | |
} | |
} | |
], | |
"useTemplateConfig": false, | |
"useTemplateScope": false, | |
"useTemplateMappers": false | |
}, | |
{ | |
"id": "da25915d-4a58-4fa5-b0ec-806625901c22", | |
"clientId": "account", | |
"name": "${client_account}", | |
"baseUrl": "/auth/realms/x509/account", | |
"surrogateAuthRequired": false, | |
"enabled": true, | |
"clientAuthenticatorType": "client-secret", | |
"secret": "**********", | |
"defaultRoles": [ | |
"manage-account", | |
"view-profile" | |
], | |
"redirectUris": [ | |
"/auth/realms/x509/account/*" | |
], | |
"webOrigins": [], | |
"notBefore": 0, | |
"bearerOnly": false, | |
"consentRequired": false, | |
"standardFlowEnabled": true, | |
"implicitFlowEnabled": false, | |
"directAccessGrantsEnabled": false, | |
"serviceAccountsEnabled": false, | |
"publicClient": false, | |
"frontchannelLogout": false, | |
"protocol": "openid-connect", | |
"attributes": {}, | |
"fullScopeAllowed": false, | |
"nodeReRegistrationTimeout": 0, | |
"protocolMappers": [ | |
{ | |
"id": "45de58af-5fad-4db6-a868-ce4fdee76c01", | |
"name": "family name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${familyName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "lastName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "family_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "cc67f513-742a-42cf-b171-a912f7de5eaf", | |
"name": "full name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-full-name-mapper", | |
"consentRequired": true, | |
"consentText": "${fullName}", | |
"config": { | |
"id.token.claim": "true", | |
"access.token.claim": "true" | |
} | |
}, | |
{ | |
"id": "38fc65a0-1c44-4912-ae8f-807dcd936fb5", | |
"name": "given name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${givenName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "firstName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "given_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "a78e634a-c347-4a6c-b990-32000aea84a5", | |
"name": "role list", | |
"protocol": "saml", | |
"protocolMapper": "saml-role-list-mapper", | |
"consentRequired": false, | |
"config": { | |
"single": "false", | |
"attribute.nameformat": "Basic", | |
"attribute.name": "Role" | |
} | |
}, | |
{ | |
"id": "31085e35-e744-417a-9c55-ebec186335ce", | |
"name": "username", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${username}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "username", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "preferred_username", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "f81b585a-e0b2-4a9d-8c82-0e06fd2a8315", | |
"name": "email", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${email}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "email", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "email", | |
"jsonType.label": "String" | |
} | |
} | |
], | |
"useTemplateConfig": false, | |
"useTemplateScope": false, | |
"useTemplateMappers": false | |
}, | |
{ | |
"id": "2e5b1d2d-a4ce-4a6f-8888-4d6bad06b93d", | |
"clientId": "realm-management", | |
"name": "${client_realm-management}", | |
"surrogateAuthRequired": false, | |
"enabled": true, | |
"clientAuthenticatorType": "client-secret", | |
"secret": "**********", | |
"redirectUris": [], | |
"webOrigins": [], | |
"notBefore": 0, | |
"bearerOnly": true, | |
"consentRequired": false, | |
"standardFlowEnabled": true, | |
"implicitFlowEnabled": false, | |
"directAccessGrantsEnabled": false, | |
"serviceAccountsEnabled": false, | |
"publicClient": false, | |
"frontchannelLogout": false, | |
"protocol": "openid-connect", | |
"attributes": {}, | |
"fullScopeAllowed": false, | |
"nodeReRegistrationTimeout": 0, | |
"protocolMappers": [ | |
{ | |
"id": "0a459a5b-e39e-4b48-a3f4-8c024701836b", | |
"name": "family name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${familyName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "lastName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "family_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "fc5fcbb8-f954-49c0-9f83-24351abdc093", | |
"name": "full name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-full-name-mapper", | |
"consentRequired": true, | |
"consentText": "${fullName}", | |
"config": { | |
"id.token.claim": "true", | |
"access.token.claim": "true" | |
} | |
}, | |
{ | |
"id": "e930bd69-3c83-46f6-ae62-b2acdf62d217", | |
"name": "role list", | |
"protocol": "saml", | |
"protocolMapper": "saml-role-list-mapper", | |
"consentRequired": false, | |
"config": { | |
"single": "false", | |
"attribute.nameformat": "Basic", | |
"attribute.name": "Role" | |
} | |
}, | |
{ | |
"id": "97f8fbeb-df30-4793-adaa-d20a4fe340df", | |
"name": "username", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${username}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "username", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "preferred_username", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "a7b838f3-2b06-4ddb-bf2c-014fd529b122", | |
"name": "email", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${email}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "email", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "email", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "f233ee16-b091-43f8-b7e0-fe138aa5d407", | |
"name": "given name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${givenName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "firstName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "given_name", | |
"jsonType.label": "String" | |
} | |
} | |
], | |
"useTemplateConfig": false, | |
"useTemplateScope": false, | |
"useTemplateMappers": false | |
}, | |
{ | |
"id": "68d79f29-9eaa-4e73-bb99-bf1e82439474", | |
"clientId": "security-admin-console", | |
"name": "${client_security-admin-console}", | |
"baseUrl": "/auth/admin/x509/console/index.html", | |
"surrogateAuthRequired": false, | |
"enabled": true, | |
"clientAuthenticatorType": "client-secret", | |
"secret": "**********", | |
"redirectUris": [ | |
"/auth/admin/x509/console/*" | |
], | |
"webOrigins": [], | |
"notBefore": 0, | |
"bearerOnly": false, | |
"consentRequired": false, | |
"standardFlowEnabled": true, | |
"implicitFlowEnabled": false, | |
"directAccessGrantsEnabled": false, | |
"serviceAccountsEnabled": false, | |
"publicClient": true, | |
"frontchannelLogout": false, | |
"protocol": "openid-connect", | |
"attributes": {}, | |
"fullScopeAllowed": false, | |
"nodeReRegistrationTimeout": 0, | |
"protocolMappers": [ | |
{ | |
"id": "53f1db1a-c1b9-4196-9a96-be5948cc3bd4", | |
"name": "username", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${username}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "username", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "preferred_username", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "359e6f5b-5a4a-46df-9b5c-3ea74397acf0", | |
"name": "full name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-full-name-mapper", | |
"consentRequired": true, | |
"consentText": "${fullName}", | |
"config": { | |
"id.token.claim": "true", | |
"access.token.claim": "true" | |
} | |
}, | |
{ | |
"id": "e36ffdec-7491-4a9c-8c1b-7cd314cd18a3", | |
"name": "family name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${familyName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "lastName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "family_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "f827c000-ecc4-450a-bdb8-9b4bb7df4fc5", | |
"name": "email", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${email}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "email", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "email", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "03a1fcc2-1a6a-417e-8f9b-ac674bb7278e", | |
"name": "locale", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-attribute-mapper", | |
"consentRequired": false, | |
"consentText": "${locale}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "locale", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "locale", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "ae9f5f4f-8f68-4086-a23c-ebc72f16ca6d", | |
"name": "role list", | |
"protocol": "saml", | |
"protocolMapper": "saml-role-list-mapper", | |
"consentRequired": false, | |
"config": { | |
"single": "false", | |
"attribute.nameformat": "Basic", | |
"attribute.name": "Role" | |
} | |
}, | |
{ | |
"id": "703dbbe3-6118-4c0d-a546-bdd3e3d8a4ad", | |
"name": "given name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${givenName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "firstName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "given_name", | |
"jsonType.label": "String" | |
} | |
} | |
], | |
"useTemplateConfig": false, | |
"useTemplateScope": false, | |
"useTemplateMappers": false | |
}, | |
{ | |
"id": "f69a2982-ca42-4a3f-a240-41fd52c81de5", | |
"clientId": "x509", | |
"surrogateAuthRequired": false, | |
"enabled": true, | |
"clientAuthenticatorType": "client-secret", | |
"secret": "**********", | |
"redirectUris": [ | |
"*" | |
], | |
"webOrigins": [], | |
"notBefore": 0, | |
"bearerOnly": false, | |
"consentRequired": false, | |
"standardFlowEnabled": true, | |
"implicitFlowEnabled": false, | |
"directAccessGrantsEnabled": true, | |
"serviceAccountsEnabled": false, | |
"publicClient": true, | |
"frontchannelLogout": false, | |
"protocol": "openid-connect", | |
"attributes": { | |
"saml.assertion.signature": "false", | |
"saml.force.post.binding": "false", | |
"saml.multivalued.roles": "false", | |
"saml.encrypt": "false", | |
"saml_force_name_id_format": "false", | |
"saml.client.signature": "false", | |
"saml.authnstatement": "false", | |
"saml.server.signature": "false", | |
"saml.server.signature.keyinfo.ext": "false", | |
"exclude.session.state.from.auth.response": "false", | |
"saml.onetimeuse.condition": "false" | |
}, | |
"fullScopeAllowed": true, | |
"nodeReRegistrationTimeout": -1, | |
"protocolMappers": [ | |
{ | |
"id": "7781e544-2690-4c0f-8231-c318d3d9699a", | |
"name": "given name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${givenName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "firstName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "given_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "bfaacd3b-6809-4d66-979f-9998e89c9390", | |
"name": "full name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-full-name-mapper", | |
"consentRequired": true, | |
"consentText": "${fullName}", | |
"config": { | |
"id.token.claim": "true", | |
"access.token.claim": "true" | |
} | |
}, | |
{ | |
"id": "b2c95687-d900-4391-85a2-f58723342663", | |
"name": "username", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${username}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "username", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "preferred_username", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "38fcc046-2c0b-4c77-80f3-b93cb5049da5", | |
"name": "family name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${familyName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "lastName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "family_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "41a86a9f-a839-4c90-92a0-5a73cda27399", | |
"name": "role list", | |
"protocol": "saml", | |
"protocolMapper": "saml-role-list-mapper", | |
"consentRequired": false, | |
"config": { | |
"single": "false", | |
"attribute.nameformat": "Basic", | |
"attribute.name": "Role" | |
} | |
}, | |
{ | |
"id": "9a32f240-6ea5-46fb-b63d-25fb3790cdd3", | |
"name": "email", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${email}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "email", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "email", | |
"jsonType.label": "String" | |
} | |
} | |
], | |
"useTemplateConfig": false, | |
"useTemplateScope": false, | |
"useTemplateMappers": false | |
}, | |
{ | |
"id": "8ab4ec86-6c76-4b3b-a6a0-cdd5c80dfff0", | |
"clientId": "broker", | |
"name": "${client_broker}", | |
"surrogateAuthRequired": false, | |
"enabled": true, | |
"clientAuthenticatorType": "client-secret", | |
"secret": "**********", | |
"redirectUris": [], | |
"webOrigins": [], | |
"notBefore": 0, | |
"bearerOnly": false, | |
"consentRequired": false, | |
"standardFlowEnabled": true, | |
"implicitFlowEnabled": false, | |
"directAccessGrantsEnabled": false, | |
"serviceAccountsEnabled": false, | |
"publicClient": false, | |
"frontchannelLogout": false, | |
"protocol": "openid-connect", | |
"attributes": {}, | |
"fullScopeAllowed": false, | |
"nodeReRegistrationTimeout": 0, | |
"protocolMappers": [ | |
{ | |
"id": "14a72e1f-3b36-49fc-9aa0-c28c9155773f", | |
"name": "full name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-full-name-mapper", | |
"consentRequired": true, | |
"consentText": "${fullName}", | |
"config": { | |
"id.token.claim": "true", | |
"access.token.claim": "true" | |
} | |
}, | |
{ | |
"id": "35eca85f-5f07-43fb-a1e8-942bb20f8fc4", | |
"name": "email", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${email}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "email", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "email", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "96ab6b93-f7a5-4959-b55b-e94678e46845", | |
"name": "given name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${givenName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "firstName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "given_name", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "2e946e3b-07d9-4d9f-ab90-122b983191cd", | |
"name": "role list", | |
"protocol": "saml", | |
"protocolMapper": "saml-role-list-mapper", | |
"consentRequired": false, | |
"config": { | |
"single": "false", | |
"attribute.nameformat": "Basic", | |
"attribute.name": "Role" | |
} | |
}, | |
{ | |
"id": "857b7501-cad4-4e84-9464-db73d5b8cf7d", | |
"name": "username", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${username}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "username", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "preferred_username", | |
"jsonType.label": "String" | |
} | |
}, | |
{ | |
"id": "2ccf3e37-d2f9-406b-9e11-a7ae8daf65bf", | |
"name": "family name", | |
"protocol": "openid-connect", | |
"protocolMapper": "oidc-usermodel-property-mapper", | |
"consentRequired": true, | |
"consentText": "${familyName}", | |
"config": { | |
"userinfo.token.claim": "true", | |
"user.attribute": "lastName", | |
"id.token.claim": "true", | |
"access.token.claim": "true", | |
"claim.name": "family_name", | |
"jsonType.label": "String" | |
} | |
} | |
], | |
"useTemplateConfig": false, | |
"useTemplateScope": false, | |
"useTemplateMappers": false | |
} | |
], | |
"clientTemplates": [], | |
"browserSecurityHeaders": { | |
"xContentTypeOptions": "nosniff", | |
"xRobotsTag": "none", | |
"xFrameOptions": "SAMEORIGIN", | |
"xXSSProtection": "1; mode=block", | |
"contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", | |
"strictTransportSecurity": "max-age=31536000; includeSubDomains" | |
}, | |
"smtpServer": {}, | |
"eventsEnabled": false, | |
"eventsListeners": [ | |
"jboss-logging" | |
], | |
"enabledEventTypes": [], | |
"adminEventsEnabled": false, | |
"adminEventsDetailsEnabled": false, | |
"components": { | |
"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ | |
{ | |
"id": "6730cf90-3a55-446d-8eb9-79caaa1e16eb", | |
"name": "Max Clients Limit", | |
"providerId": "max-clients", | |
"subType": "anonymous", | |
"subComponents": {}, | |
"config": { | |
"max-clients": [ | |
"200" | |
] | |
} | |
}, | |
{ | |
"id": "db8d7e08-2382-4c8d-8ca5-c27c5132ef52", | |
"name": "Allowed Protocol Mapper Types", | |
"providerId": "allowed-protocol-mappers", | |
"subType": "anonymous", | |
"subComponents": {}, | |
"config": { | |
"allowed-protocol-mapper-types": [ | |
"saml-role-list-mapper", | |
"saml-user-property-mapper", | |
"oidc-usermodel-property-mapper", | |
"oidc-full-name-mapper", | |
"oidc-sha256-pairwise-sub-mapper", | |
"saml-user-attribute-mapper", | |
"oidc-usermodel-attribute-mapper", | |
"oidc-address-mapper" | |
], | |
"consent-required-for-all-mappers": [ | |
"true" | |
] | |
} | |
}, | |
{ | |
"id": "db88425d-a3b5-4719-bd0d-a04d0072ce6a", | |
"name": "Trusted Hosts", | |
"providerId": "trusted-hosts", | |
"subType": "anonymous", | |
"subComponents": {}, | |
"config": { | |
"host-sending-registration-request-must-match": [ | |
"true" | |
], | |
"client-uris-must-match": [ | |
"true" | |
] | |
} | |
}, | |
{ | |
"id": "82636766-ef92-4f24-b0ce-0f2656049e12", | |
"name": "Allowed Protocol Mapper Types", | |
"providerId": "allowed-protocol-mappers", | |
"subType": "authenticated", | |
"subComponents": {}, | |
"config": { | |
"allowed-protocol-mapper-types": [ | |
"saml-user-attribute-mapper", | |
"oidc-usermodel-property-mapper", | |
"oidc-usermodel-attribute-mapper", | |
"saml-role-list-mapper", | |
"oidc-full-name-mapper", | |
"oidc-address-mapper", | |
"saml-user-property-mapper", | |
"oidc-sha256-pairwise-sub-mapper" | |
], | |
"consent-required-for-all-mappers": [ | |
"true" | |
] | |
} | |
}, | |
{ | |
"id": "1f1af182-b4ca-49bb-b335-98e9048e489c", | |
"name": "Full Scope Disabled", | |
"providerId": "scope", | |
"subType": "anonymous", | |
"subComponents": {}, | |
"config": {} | |
}, | |
{ | |
"id": "2792426c-a6ec-4561-845f-08f4241b8c11", | |
"name": "Allowed Client Templates", | |
"providerId": "allowed-client-templates", | |
"subType": "anonymous", | |
"subComponents": {}, | |
"config": {} | |
}, | |
{ | |
"id": "20ceb86a-84da-4e0b-b11e-41c805537ee6", | |
"name": "Allowed Client Templates", | |
"providerId": "allowed-client-templates", | |
"subType": "authenticated", | |
"subComponents": {}, | |
"config": {} | |
}, | |
{ | |
"id": "aa381df9-4ed6-41e6-b3ab-3da2b131082f", | |
"name": "Consent Required", | |
"providerId": "consent-required", | |
"subType": "anonymous", | |
"subComponents": {}, | |
"config": {} | |
} | |
], | |
"org.keycloak.keys.KeyProvider": [ | |
{ | |
"id": "27e1f5f6-2343-4f45-8c78-15e7c70ae759", | |
"name": "hmac-generated", | |
"providerId": "hmac-generated", | |
"subComponents": {}, | |
"config": { | |
"priority": [ | |
"100" | |
] | |
} | |
}, | |
{ | |
"id": "21b4a626-ef61-4117-bea2-45d1cc419c6d", | |
"name": "rsa-generated", | |
"providerId": "rsa-generated", | |
"subComponents": {}, | |
"config": { | |
"priority": [ | |
"100" | |
] | |
} | |
}, | |
{ | |
"id": "38b13f4f-6c0b-43ee-98a4-fc82d1acfe73", | |
"name": "aes-generated", | |
"providerId": "aes-generated", | |
"subComponents": {}, | |
"config": { | |
"priority": [ | |
"100" | |
] | |
} | |
} | |
] | |
}, | |
"internationalizationEnabled": false, | |
"supportedLocales": [], | |
"authenticationFlows": [ | |
{ | |
"id": "01d49a53-fe76-4d21-a195-76fe14baf0d7", | |
"alias": "Handle Existing Account", | |
"description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", | |
"providerId": "basic-flow", | |
"topLevel": false, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "idp-confirm-link", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "idp-email-verification", | |
"requirement": "ALTERNATIVE", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"requirement": "ALTERNATIVE", | |
"priority": 30, | |
"flowAlias": "Verify Existing Account by Re-authentication", | |
"userSetupAllowed": false, | |
"autheticatorFlow": true | |
} | |
] | |
}, | |
{ | |
"id": "c8c88b02-c583-45cb-aa93-9b5157e1cf85", | |
"alias": "Verify Existing Account by Re-authentication", | |
"description": "Reauthentication of existing account", | |
"providerId": "basic-flow", | |
"topLevel": false, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "idp-username-password-form", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "auth-otp-form", | |
"requirement": "OPTIONAL", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "764c0b09-71a5-42f0-a68b-30406f60f86f", | |
"alias": "browser", | |
"description": "browser based authentication", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "auth-cookie", | |
"requirement": "ALTERNATIVE", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "auth-spnego", | |
"requirement": "DISABLED", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "identity-provider-redirector", | |
"requirement": "ALTERNATIVE", | |
"priority": 25, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"requirement": "ALTERNATIVE", | |
"priority": 30, | |
"flowAlias": "forms", | |
"userSetupAllowed": false, | |
"autheticatorFlow": true | |
} | |
] | |
}, | |
{ | |
"id": "e7ae367b-bf9a-49ec-add2-043a7ef7f089", | |
"alias": "clients", | |
"description": "Base authentication for clients", | |
"providerId": "client-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "client-secret", | |
"requirement": "ALTERNATIVE", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "client-jwt", | |
"requirement": "ALTERNATIVE", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "c89ebb25-805e-4c09-8f5f-0d6bdbdfd3c7", | |
"alias": "direct grant", | |
"description": "OpenID Connect Resource Owner Grant", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "direct-grant-validate-username", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "direct-grant-validate-password", | |
"requirement": "REQUIRED", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "direct-grant-validate-otp", | |
"requirement": "OPTIONAL", | |
"priority": 30, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "eb441508-c415-4e9f-9b29-fb07d35ac2f2", | |
"alias": "docker auth", | |
"description": "Used by Docker clients to authenticate against the IDP", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "docker-http-basic-authenticator", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "172cc06b-2d2a-4e83-992c-6fee72c26eef", | |
"alias": "first broker login", | |
"description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticatorConfig": "review profile config", | |
"authenticator": "idp-review-profile", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticatorConfig": "create unique user config", | |
"authenticator": "idp-create-user-if-unique", | |
"requirement": "ALTERNATIVE", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"requirement": "ALTERNATIVE", | |
"priority": 30, | |
"flowAlias": "Handle Existing Account", | |
"userSetupAllowed": false, | |
"autheticatorFlow": true | |
} | |
] | |
}, | |
{ | |
"id": "d8e0ce68-6ece-403e-b55d-b1c7926f0eb4", | |
"alias": "forms", | |
"description": "Username, password, otp and other auth forms.", | |
"providerId": "basic-flow", | |
"topLevel": false, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "auth-username-password-form", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "auth-otp-form", | |
"requirement": "OPTIONAL", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "0589cc01-469f-40f5-ae37-a9b0cd897c88", | |
"alias": "registration", | |
"description": "registration flow", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "registration-page-form", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"flowAlias": "registration form", | |
"userSetupAllowed": false, | |
"autheticatorFlow": true | |
} | |
] | |
}, | |
{ | |
"id": "460ee671-a558-4c0c-a3e1-251bf01cfdb1", | |
"alias": "registration form", | |
"description": "registration form", | |
"providerId": "form-flow", | |
"topLevel": false, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "registration-user-creation", | |
"requirement": "REQUIRED", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "registration-profile-action", | |
"requirement": "REQUIRED", | |
"priority": 40, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "registration-password-action", | |
"requirement": "REQUIRED", | |
"priority": 50, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "registration-recaptcha-action", | |
"requirement": "DISABLED", | |
"priority": 60, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "d5e0f1cf-c2e4-4f12-aff8-d3a52a9dde82", | |
"alias": "reset credentials", | |
"description": "Reset credentials for a user if they forgot their password or something", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "reset-credentials-choose-user", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "reset-credential-email", | |
"requirement": "REQUIRED", | |
"priority": 20, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "reset-password", | |
"requirement": "REQUIRED", | |
"priority": 30, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
}, | |
{ | |
"authenticator": "reset-otp", | |
"requirement": "OPTIONAL", | |
"priority": 40, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "ee6213fc-394e-4fcb-bc97-4a2d24cd7b70", | |
"alias": "saml ecp", | |
"description": "SAML ECP Profile Authentication Flow", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": true, | |
"authenticationExecutions": [ | |
{ | |
"authenticator": "http-basic-authenticator", | |
"requirement": "REQUIRED", | |
"priority": 10, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
}, | |
{ | |
"id": "885ed451-0a7f-4ac1-aec2-316960e56d91", | |
"alias": "x509 direct grant", | |
"description": "OpenID Connect Resource Owner Grant", | |
"providerId": "basic-flow", | |
"topLevel": true, | |
"builtIn": false, | |
"authenticationExecutions": [ | |
{ | |
"authenticatorConfig": "x509", | |
"authenticator": "direct-grant-auth-x509-username", | |
"requirement": "REQUIRED", | |
"priority": 31, | |
"userSetupAllowed": false, | |
"autheticatorFlow": false | |
} | |
] | |
} | |
], | |
"authenticatorConfig": [ | |
{ | |
"id": "bc87d03a-f75a-461e-a2d9-e958fc84d101", | |
"alias": "create unique user config", | |
"config": { | |
"require.password.update.after.registration": "false" | |
} | |
}, | |
{ | |
"id": "5cc49648-7e2f-4abf-a85c-02cc6fa791d5", | |
"alias": "review profile config", | |
"config": { | |
"update.profile.on.first.login": "missing" | |
} | |
}, | |
{ | |
"id": "752b4690-b1e7-45c3-99b8-8c1fa737ff14", | |
"alias": "x509", | |
"config": { | |
"x509-cert-auth.mapper-selection.user-attribute-name": "usercertificate", | |
"x509-cert-auth.regular-expression": "(.*?)(?:$)", | |
"x509-cert-auth.mapper-selection": "Custom Attribute Mapper", | |
"x509-cert-auth.crl-relative-path": "crl.pem", | |
"x509-cert-auth.crldp-checking-enabled": "false", | |
"x509-cert-auth.mapping-source-selection": "Match SubjectDN using regular expression" | |
} | |
}, | |
{ | |
"id": "11365d40-9a14-43ac-95e8-dddc195dcfd8", | |
"alias": "x509", | |
"config": { | |
"x509-cert-auth.extendedkeyusage": "", | |
"x509-cert-auth.mapper-selection.user-attribute-name": "usercertificate", | |
"x509-cert-auth.ocsp-responder-uri": "", | |
"x509-cert-auth.regular-expression": "(.*?)(?:$)", | |
"x509-cert-auth.crl-checking-enabled": "", | |
"x509-cert-auth.confirmation-page-disallowed": "", | |
"x509-cert-auth.keyusage": "", | |
"x509-cert-auth.mapper-selection": "Username or Email", | |
"x509-cert-auth.crl-relative-path": "crl.pem", | |
"x509-cert-auth.crldp-checking-enabled": "false", | |
"x509-cert-auth.mapping-source-selection": "Subject's e-mail", | |
"x509-cert-auth.ocsp-checking-enabled": "" | |
} | |
} | |
], | |
"requiredActions": [ | |
{ | |
"alias": "CONFIGURE_TOTP", | |
"name": "Configure OTP", | |
"providerId": "CONFIGURE_TOTP", | |
"enabled": true, | |
"defaultAction": false, | |
"config": {} | |
}, | |
{ | |
"alias": "UPDATE_PASSWORD", | |
"name": "Update Password", | |
"providerId": "UPDATE_PASSWORD", | |
"enabled": true, | |
"defaultAction": false, | |
"config": {} | |
}, | |
{ | |
"alias": "UPDATE_PROFILE", | |
"name": "Update Profile", | |
"providerId": "UPDATE_PROFILE", | |
"enabled": true, | |
"defaultAction": false, | |
"config": {} | |
}, | |
{ | |
"alias": "VERIFY_EMAIL", | |
"name": "Verify Email", | |
"providerId": "VERIFY_EMAIL", | |
"enabled": true, | |
"defaultAction": false, | |
"config": {} | |
}, | |
{ | |
"alias": "terms_and_conditions", | |
"name": "Terms and Conditions", | |
"providerId": "terms_and_conditions", | |
"enabled": false, | |
"defaultAction": false, | |
"config": {} | |
} | |
], | |
"browserFlow": "browser", | |
"registrationFlow": "registration", | |
"directGrantFlow": "x509 direct grant", | |
"resetCredentialsFlow": "reset credentials", | |
"clientAuthenticationFlow": "clients", | |
"dockerAuthenticationFlow": "docker auth", | |
"attributes": { | |
"_browser_header.xXSSProtection": "1; mode=block", | |
"_browser_header.xFrameOptions": "SAMEORIGIN", | |
"_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains", | |
"permanentLockout": "false", | |
"quickLoginCheckMilliSeconds": "1000", | |
"_browser_header.xRobotsTag": "none", | |
"maxFailureWaitSeconds": "900", | |
"minimumQuickLoginWaitSeconds": "60", | |
"failureFactor": "30", | |
"actionTokenGeneratedByUserLifespan": "300", | |
"maxDeltaTimeSeconds": "43200", | |
"_browser_header.xContentTypeOptions": "nosniff", | |
"actionTokenGeneratedByAdminLifespan": "43200", | |
"bruteForceProtected": "false", | |
"_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", | |
"waitIncrementSeconds": "60" | |
}, | |
"keycloakVersion": "7.2.7.GA" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment