Google IdP
UDS Core ships with a templated Google SAML IDP in our realm.json:
"identityProviders": [ { "alias": "saml", "displayName": "Google SSO", "internalId": "123", "providerId": "saml", "enabled": "${REALM_GOOGLE_IDP_ENABLED:false}", "updateProfileFirstLoginMode": "on", "trustEmail": true, "storeToken": false, "addReadTokenRoleOnCreate": false, "authenticateByDefault": false, "linkOnly": false, "postBrokerLoginFlowAlias": "Group Protection Authorization", "config": { "postBindingLogout": "false", "postBindingResponse": "true", "backchannelSupported": "false", "idpEntityId": "https://accounts.google.com/o/saml2?idpid=${REALM_GOOGLE_IDP_ID}", "loginHint": "false", "allowCreate": "true", "enabledFromMetadata": "true", "singleSignOnServiceUrl": "https://accounts.google.com/o/saml2/idp?idpid=${REALM_GOOGLE_IDP_ID}", "wantAuthnRequestsSigned": "false", "allowedClockSkew": "0", "validateSignature": "true", "signingCertificate": "${REALM_GOOGLE_IDP_SIGNING_CERT}", "nameIDPolicyFormat": "${REALM_GOOGLE_IDP_NAME_ID_FORMAT}", "entityId": "${REALM_GOOGLE_IDP_CORE_ENTITY_ID}", "signSpMetadata": "false", "wantAssertionsEncrypted": "false", "sendClientIdOnLogout": "false", "wantAssertionsSigned": "false", "sendIdTokenOnLogout": "true", "postBindingAuthnRequest": "true", "forceAuthn": "false", "attributeConsumingServiceIndex": "0", "addExtensionsElementWithKeyInfo": "false", "principalType": "Subject NameID", "syncMode": "FORCE" } } ],
In addition to the custom realm.json for the Google IDP, there is also custom identityProviderMappers
:
"identityProviderMappers": [ { "id": "24c62f1a-9da4-4758-bc97-3310e04ea73b", "name": "Email Mapper", "identityProviderAlias": "saml", "identityProviderMapper": "saml-user-attribute-idp-mapper", "config": { "syncMode": "INHERIT", "user.attribute": "email", "attribute.friendly.name": "email", "attribute.name.format": "ATTRIBUTE_FORMAT_BASIC", "attribute.name": "email" } }, { "id": "ae4f9a94-5e70-4eb2-be9f-752b7401f98e", "name": "Admin Group Mapper", "identityProviderAlias": "saml", "identityProviderMapper": "saml-advanced-group-idp-mapper", "config": { "syncMode": "INHERIT", "attributes": "[{\"key\":\"groups\",\"value\":\"${REALM_GOOGLE_IDP_ADMIN_GROUP}\"}]", "group": "/UDS Core/Admin" } }, { "id": "ea435551-17dc-4096-8a26-e4585b48dbfa", "name": "Auditor Group Mapper", "identityProviderAlias": "saml", "identityProviderMapper": "saml-advanced-group-idp-mapper", "config": { "syncMode": "INHERIT", "attributes": "[{\"key\":\"groups\",\"value\":\"${REALM_GOOGLE_IDP_AUDITOR_GROUP}\"}]", "group": "/UDS Core/Auditor" } }, { "id": "9492c99f-6d42-4127-9b29-4230b69f17b0", "name": "firstName Mapper", "identityProviderAlias": "saml", "identityProviderMapper": "saml-user-attribute-idp-mapper", "config": { "syncMode": "INHERIT", "user.attribute": "firstName", "attribute.name.format": "ATTRIBUTE_FORMAT_BASIC", "attribute.name": "firstName" } }, { "id": "affcb9cd-e27d-459f-8d69-c2b16ba5e5f7", "name": "lastName Mapper", "identityProviderAlias": "saml", "identityProviderMapper": "saml-user-attribute-idp-mapper", "config": { "syncMode": "INHERIT", "user.attribute": "lastName", "attribute.name.format": "ATTRIBUTE_FORMAT_BASIC", "attribute.name": "lastName" } } ],
Documentation to configure the realmInitEnv
values in uds-identity-config.
Alternatively, the realmInitEnv
can be configured via bundle overrides like in the UDS Core k3d-standard-bundle:
values: - path: realmInitEnv value: GOOGLE_IDP_ENABLED: true GOOGLE_IDP_ID: "123" GOOGLE_IDP_SIGNING_CERT: "MIID..." GOOGLE_IDP_NAME_ID_FORMAT: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" GOOGLE_IDP_CORE_ENTITY_ID: "https://sso.uds.dev/realms/uds" GOOGLE_IDP_ADMIN_GROUP: "uds-core-dev-admin" GOOGLE_IDP_AUDITOR_GROUP: "uds-core-dev-auditor"
Configuring your own IDP can be achieved via:
- Custom uds-identity-config with a templated realm.json
- Keycloak Admin UI and click ops
- Custom realm.json for direct import in Keycloak