AEM Obtenga información sobre cómo configurar y autenticar usuarios finales (no autores de) en un IDP compatible con SAML 2.0 de su elección.
AEM La integración de SAML 2.0 con AEM Publish (o Preview), permite a los usuarios finales de una experiencia web basada en el uso de autenticarse en un IDP (Proveedor de identidad) que no es de Adobe AEM y acceder a los datos como un usuario autorizado con nombre.
AEM Author | AEM Publish | |
---|---|---|
Compatibilidad con SAML 2.0 | ✘ | ✔ |
El flujo típico de una integración de AEM Publish SAML es el siguiente:
/system/sling/login
) que solicita explícitamente la acción de inicio de sesión.login-token
en la respuesta HTTP, que se utiliza para autenticar solicitudes posteriores en AEM Publish.saml_request_path
cookie.AEM Este vídeo explica cómo configurar la integración de SAML 2.0 con el servicio Publicación as a Cloud Service de y cómo utilizar Okta como IDP.
Se requiere lo siguiente al configurar la autenticación SAML 2.0:
SAML 2.0 solo se admite para autenticar usuarios en AEM Publish o Preview. Para administrar la autenticación de AEM Author mediante y IDP, integración del IDP con Adobe IMS.
AEM El certificado público del IDP se añade al Almacén de confianza global y se utiliza para validar que la afirmación de SAML enviada por el IDP es válida.
Flujo de firma de aserción +++SAML
.../saml_login
) que incluye la afirmación de SAML firmada.+++
Obtenga la certificado público del IDP. AEM AEM Este certificado le permite a los validar la afirmación de SAML proporcionada a los usuarios desplazados internos.
El certificado está en formato PEM y debe tener un aspecto similar al siguiente:
-----BEGIN CERTIFICATE-----
MIIC4jCBAcoCCQC33wnybT5QZDANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJV
...
m0eo2USlSRTVl7QHRTuiuSThHpLKQQ==
-----END CERTIFICATE-----
AEM Inicie sesión en AEM Author como administrador de.
Navegue hasta Herramientas > Seguridad > repositorio de confianza.
Cree o abra el Almacén de confianza global. Si crea un almacén de confianza global, guarde la contraseña en un lugar seguro.
Expandir Añadir certificado del archivo CER.
Seleccionar Seleccionar archivo de certificado y cargue el archivo de certificado proporcionado por el IDP.
Salir Asignar certificado al usuario en blanco.
Seleccione Enviar.
El certificado recién agregado aparece encima de Agregar certificado del archivo CRT sección.
Tome nota de la alias, ya que este valor se utiliza en Configuración OSGi del controlador de autenticación SAML 2.0.
Seleccionar Guardar y cerrar.
El repositorio de confianza global está configurado con el certificado público del IDP en AEM Author, pero como SAML solo se utiliza en AEM Publish, el repositorio de confianza global debe replicarse en AEM Publish para que el certificado público IDP sea accesible allí.
Global Trust Store
1.0.0
com.your.company
/etc/truststore
./etc/truststore
) a AEM Publish.Es necesario crear un repositorio de claves para el servicio de autenticación cuando el Propiedad de configuración OSGi del controlador de autenticación SAML 2.0 handleLogout
se establece en true
o cuando Cifrado de firma AuthnRequest/aserción SAML es obligatorio
AEM Inicie sesión en AEM Author como administrador de para cargar la clave privada.
Vaya a Herramientas > Seguridad > Usuarios y seleccione authentication-service usuario y seleccione Propiedades de la barra de acciones superior.
Seleccione el Keystore pestaña.
Cree o abra el repositorio de claves. Si crea un almacén de claves, mantenga la contraseña a salvo.
Seleccionar Guardar y cerrar.
Cree un paquete que contenga el authentication-service usuario.
Utilice la siguiente solución temporal mediante paquetes:
Authentication Service
1.0.0
com.your.company
/home/users/system/cq:services/internal/security/<AUTHENTICATION SERVICE UUID>/keystore
.
<AUTHENTICATION SERVICE UUID>
se puede encontrar navegando hasta Herramientas > Seguridad > Usuarios y seleccionando authentication-service usuario. El UUID es la última parte de la dirección URL.AEM La instalación del par de claves pública y privada de la es opcional
AEM La publicación de AEM se puede configurar para firmar solicitudes AuthnRequest (a IDP) y cifrar aserciones SAML (a). Esto se logra proporcionando una clave privada a AEM Publish y haciendo coincidir la clave pública con el IDP.
AuthnRequest (la solicitud al IDP desde AEM Publish que inicia el proceso de inicio de sesión) puede firmarse mediante AEM Publish. Para ello, AEM Publish firma AuthnRequest con la clave privada, de modo que el IDP valide la firma con la clave pública. Esto garantiza al IDP que AuthnRequest se inició y fue solicitado por AEM Publish, y no por un tercero malicioso.
Toda la comunicación HTTP entre IDP y AEM Publish debe ser a través de HTTPS y, por lo tanto, segura de forma predeterminada. Sin embargo, según sea necesario, las afirmaciones de SAML pueden cifrarse en el caso de que se requiera confidencialidad adicional además de la proporcionada por HTTPS. Para ello, el IDP cifra los datos de aserción de SAML utilizando la clave privada y AEM Publish descifra la aserción de SAML utilizando la clave privada.
Tanto la firma de AuthnRequest como el cifrado de aserción SAML son opcionales; sin embargo, ambos están habilitados, utilizando Propiedad de configuración OSGi del controlador de autenticación SAML 2.0 useEncryption
, lo que significa que se pueden usar ambos o ninguno.
Obtenga la clave pública, la clave privada (PKCS#8 en formato DER) y el archivo de cadena de certificados (puede ser la clave pública) utilizados para firmar AuthnRequest y cifre la afirmación de SAML. Las claves las suele proporcionar el equipo de seguridad de la organización de TI.
$ openssl req -x509 -sha256 -days 365 -newkey rsa:4096 -keyout aem-private.key -out aem-public.crt
# Provide a password (keep in safe place), and other requested certificate information
# Convert the keys to AEM's required format
$ openssl rsa -in aem-private.key -outform der -out aem-private.der
$ openssl pkcs8 -topk8 -inform der -nocrypt -in aem-private.der -outform der -out aem-private-pkcs8.der
Cargue la clave pública al IDP.
openssl
método anterior, la clave pública es aem-public.crt
archivo.AEM Inicie sesión en AEM Author como administrador de para cargar la clave privada.
Vaya a Herramientas > Seguridad > Almacén de confianza y seleccione authentication-service usuario y seleccione Propiedades de la barra de acciones superior.
Vaya a Herramientas > Seguridad > Usuarios y seleccione authentication-service usuario y seleccione Propiedades de la barra de acciones superior.
Seleccione el Keystore pestaña.
Cree o abra el repositorio de claves. Si crea un almacén de claves, mantenga la contraseña a salvo.
Seleccionar Añadir clave privada del archivo DER AEM y agregue la clave privada y el archivo de cadena a la lista de archivos que se van a:
openssl
método anterior, este es el aem-private-pkcs8.der
archivoopenssl
método anterior, este es el aem-public.crt
archivoEl certificado recién agregado aparece encima de Agregar certificado del archivo CRT sección.
Seleccionar Guardar y cerrar.
Cree un paquete que contenga el authentication-service usuario.
Utilice la siguiente solución temporal mediante paquetes:
Authentication Service
1.0.0
com.your.company
/home/users/system/cq:services/internal/security/<AUTHENTICATION SERVICE UUID>/keystore
.
<AUTHENTICATION SERVICE UUID>
se puede encontrar navegando hasta Herramientas > Seguridad > Usuarios y seleccionando authentication-service usuario. El UUID es la última parte de la dirección URL.AEM La configuración de ML de SAID se realiza mediante la variable Controlador de autenticación de Adobe Granite SAML 2.0 Configuración de OSGi.
AEM La configuración es una configuración de fábrica de OSGi, lo que significa que un solo servicio de publicación as a Cloud Service AEM de la puede tener varias configuraciones de SAML que cubran árboles de recursos discretos del repositorio; esto resulta útil para implementaciones de varios sitios de la.
Propiedad OSGi | Requerido | Formato de valor | Valor predeterminado | Descripción | |
---|---|---|---|---|---|
Rutas | path |
✔ | Matriz de cadenas | / |
AEM rutas de acceso de la autenticación para las que se utiliza este controlador. |
URL de IDP | idpUrl |
✔ | Cadena | Dirección URL de IDP a la que se envía la solicitud de autenticación SAML. | |
Alias de certificado IDP | idpCertAlias |
✔ | Cadena | AEM Alias del certificado IDP encontrado en el repositorio de confianza global de la organización de seguridad de la red (CLR) de | |
Redirección HTTP de IDP | idpHttpRedirect |
✘ | Booleano | false |
Indica si hay un redireccionamiento HTTP a la URL de IDP en lugar de enviar una AuthnRequest. Configure como. true para la autenticación iniciada por IDP. |
Identificador de IDP | idpIdentifier |
✘ | Cadena | AEM ID de IDP único para garantizar la exclusividad de usuario y grupo de la. Si está vacío, la variable serviceProviderEntityId se utiliza en su lugar. |
|
URL de servicio de consumidor de afirmación | assertionConsumerServiceURL |
✘ | Cadena | El AssertionConsumerServiceURL Atributo URL en AuthnRequest que especifica dónde <Response> AEM el mensaje debe enviarse a la. |
|
ID de entidad de SP | serviceProviderEntityId |
✔ | Cadena | AEM AEM Identifica de forma exclusiva a los desplazados internos, por lo general el nombre de host de la. | |
Cifrado SP | useEncryption |
✘ | Booleano | true |
Indica si el IDP cifra las afirmaciones de SAML. Requiere spPrivateKeyAlias y keyStorePassword que se va a establecer. |
Alias de clave privada SP | spPrivateKeyAlias |
✘ | Cadena | El alias de la clave privada en el authentication-service almacén de claves del usuario. Obligatorio si useEncryption se establece en true . |
|
Contraseña del almacén de claves SP | keyStorePassword |
✘ | Cadena | La contraseña del almacén de claves del usuario del servicio de autenticación. Obligatorio si useEncryption se establece en true . |
|
Redirección predeterminada | defaultRedirectUrl |
✘ | Cadena | / |
La URL de redireccionamiento predeterminada después de la autenticación correcta. AEM Puede ser relativo al host de la (por ejemplo, /content/wknd/us/en/html ). |
Atributo de ID de usuario | userIDAttribute |
✘ | Cadena | uid |
AEM Nombre del atributo de aserción de SAML que contiene el ID de usuario del usuario de la. Dejar vacío para utilizar el Subject:NameId . |
AEM Crear usuarios de forma automática | createUser |
✘ | Booleano | true |
AEM Indica si los usuarios de la se crean con una autenticación correcta. |
AEM Ruta intermedia del usuario | userIntermediatePath |
✘ | Cadena | AEM Al crear usuarios de, este valor se utiliza como ruta intermedia (por ejemplo, /home/users/<userIntermediatePath>/jane@wknd.com ). Requiere createUser que se establecerá en true . |
|
AEM Atributos de usuario de | synchronizeAttributes |
✘ | Matriz de cadenas | AEM Lista de asignaciones de atributos SAML que se almacenarán en el usuario de la, con el formato [ "saml-attribute-name=path/relative/to/user/node" ] (por ejemplo, [ "firstName=profile/givenName" ] ). Consulte la AEM lista completa de atributos nativos de la. |
|
AEM Añadir usuario a grupos de | addGroupMemberships |
✘ | Booleano | true |
AEM AEM Indica si se agrega automáticamente un usuario de a los grupos de usuarios después de una autenticación correcta. |
AEM atributo de pertenencia a grupo | groupMembershipAttribute |
✘ | Cadena | groupMembership |
AEM Nombre del atributo de aserción SAML que contiene una lista de grupos de usuarios a los que se debe agregar el usuario. Requiere addGroupMemberships que se establecerá en true . |
AEM Grupos predeterminados | defaultGroups |
✘ | Matriz de cadenas | AEM Siempre se agrega una lista de grupos de usuarios autenticados de la a (por ejemplo, [ "wknd-user" ] ). Requiere addGroupMemberships que se establecerá en true . |
|
Formato de directiva de IDP de nombre | nameIdFormat |
✘ | Cadena | urn:oasis:names:tc:SAML:2.0:nameid-format:transient |
Valor del parámetro de formato NameIDPolicy que se enviará en el mensaje AuthnRequest. |
Almacenar respuesta de SAML | storeSAMLResponse |
✘ | Booleano | false |
Indica si la variable samlResponse AEM El valor se almacena en la cq:User nodo. |
Controlar cierre de sesión | handleLogout |
✘ | Booleano | false |
Indica si este controlador de autenticación SAML administra la solicitud de cierre de sesión. Requiere logoutUrl que se va a establecer. |
URL de desconexión | logoutUrl |
✘ | Cadena | URL de IDP a la que se envía la solicitud de cierre de sesión de SAML. Obligatorio si handleLogout se establece en true . |
|
Tolerancia del reloj | clockTolerance |
✘ | Entero | 60 |
AEM La tolerancia de sesgo de reloj de IDP y de (SP) al validar aserciones de SAML. |
Método de resumen | digestMethod |
✘ | Cadena | http://www.w3.org/2001/04/xmlenc#sha256 |
Algoritmo de resumen que utiliza el IDP al firmar un mensaje SAML. |
Método de firma | signatureMethod |
✘ | Cadena | http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 |
Algoritmo de firma que utiliza el IDP al firmar un mensaje SAML. |
Tipo de sincronización de identidad | identitySyncType |
✘ | default o idp |
default |
No cambiar from AEM Valor predeterminado para la as a Cloud Service. |
Clasificación del servicio | service.ranking |
✘ | Entero | 5002 |
Para lo mismo, se prefieren configuraciones de clasificación más altas path . |
AEM utiliza los siguientes atributos de usuario, que se pueden rellenar mediante el synchronizeAttributes
en la configuración OSGi del Controlador de autenticación SAML 2.0 de Granite de Adobe. AEM AEM AEM Cualquier atributo de IDP se puede sincronizar con cualquier propiedad de usuario de, pero la asignación a propiedades de atributo de uso de la aplicación de datos (enumeradas a continuación) permite a los usuarios de la aplicación utilizarlas de forma natural.
Atributo de usuario | Ruta de propiedad relativa desde rep:User nodo |
---|---|
Título (por ejemplo, Mrs ) |
profile/title |
Nombre dado (es decir, nombre) | profile/givenName |
Apellido (es decir, apellido) | profile/familyName |
Título de trabajo | profile/jobTitle |
Dirección de correo electrónico | profile/email |
Dirección | profile/street |
Ciudad | profile/city |
Código postal | profile/postalCode |
País | profile/country |
Número de teléfono | profile/phoneNumber |
Acerca de mí | profile/aboutMe |
Cree un archivo de configuración OSGi en su proyecto en /ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~saml.cfg.json
y abra en su IDE.
/wknd-examples/
a su /<project name>/
~
en el nombre de archivo debe identificar de forma exclusiva esta configuración, por lo que puede ser el nombre del IDP, como ...~okta.cfg.json
. El valor debe ser alfanumérico y contener guiones.Pegue el siguiente JSON en com.adobe.granite.auth.saml.SamlAuthenticationHandler~...cfg.json
y actualice el archivo wknd
referencias según sea necesario.
{
"path": [ "/content/wknd", "/content/dam/wknd" ],
"idpCertAlias": "$[env:SAML_IDP_CERT_ALIAS;default=certalias___1652125559800]",
"idpIdentifier": "$[env:SAML_IDP_ID;default=http://www.okta.com/exk4z55r44Jz9C6am5d7]",
"idpUrl": "$[env:SAML_IDP_URL;default=https://dev-5511372.okta.com/app/dev-5511372_aemasacloudservice_1/exk4z55r44Jz9C6am5d7/sso/saml]",
"serviceProviderEntityId": "$[env:SAML_AEM_ID;default=https://publish-p123-e456.adobeaemcloud.com]",
"useEncryption": false,
"createUser": true,
"userIntermediatePath": "wknd/idp",
"synchronizeAttributes":[
"firstName=profile/givenName"
],
"addGroupMemberships": true,
"defaultGroups": [
"wknd-users"
]
}
Actualice los valores según sea necesario en el proyecto. Consulte la Glosario de configuración OSGi del Controlador de autenticación SAML 2.0 más arriba para las descripciones de propiedades de configuración
Se recomienda, pero no es obligatorio, utilizar variables y secretos de entorno OSGi, cuando los valores pueden cambiar sin estar sincronizados con el ciclo de lanzamiento o cuando los valores difieren entre tipos de entorno/niveles de servicio similares. Los valores predeterminados se pueden configurar con la variable $[env:..;default=the-default-value]"
sintaxis como se muestra arriba.
Configuraciones de OSGi por entorno (config.publish.dev
, config.publish.stage
, y config.publish.prod
) se puede definir con atributos específicos si la configuración de SAML varía entre entornos.
Cuándo cifrar la aserción AuthnRequest y SAML, se requieren las siguientes propiedades: useEncryption
, spPrivateKeyAlias
, y keyStorePassword
. El keyStorePassword
contiene una contraseña; por lo tanto, el valor no debe almacenarse en el archivo de configuración OSGi, sino insertarse mediante valores de configuración secretos
Abrir /ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~saml.cfg.json
en su IDE.
Añadir las tres propiedades useEncryption
, spPrivateKeyAlias
, y keyStorePassword
como se muestra a continuación.
{
"path": [ "/content/wknd", "/content/dam/wknd" ],
"idpCertAlias": "$[env:SAML_IDP_CERT_ALIAS;default=certalias___1234567890]",
"idpIdentifier": "$[env:SAML_IDP_ID;default=http://www.okta.com/abcdef1235678]",
"idpUrl": "$[env:SAML_IDP_URL;default=https://dev-5511372.okta.com/app/dev-123567890_aemasacloudservice_1/abcdef1235678/sso/saml]",
"serviceProviderEntityId": "$[env:SAML_AEM_ID;default=https://publish-p123-e456.adobeaemcloud.com]",
"useEncryption": true,
"spPrivateKeyAlias": "$[env:SAML_AEM_KEYSTORE_ALIAS;default=aem-saml-encryption]",
"keyStorePassword": "$[secret:SAML_AEM_KEYSTORE_PASSWORD]",
"createUser": true,
"userIntermediatePath": "wknd/idp"
"synchronizeAttributes":[
"firstName=profile/givenName"
],
"addGroupMemberships": true,
"defaultGroups": [
"wknd-users"
]
}
Las tres propiedades de configuración OSGi necesarias para el cifrado son:
useEncryption
establezca en true
spPrivateKeyAlias
contiene el alias de la entrada del almacén de claves para la clave privada utilizada por la integración de SAML.keyStorePassword
contiene un Variable de configuración secreta OSGi que contiene el authentication-service
contraseña del almacén de claves de usuario.Durante el proceso de autenticación SAML, el IDP inicia un POST HTTP del lado del cliente en AEM Publish .../saml_login
punto final. Si el IDP y la publicación de AEM existen en un origen diferente, la de AEM Publish Filtro de referente se configura mediante la configuración de OSGi para permitir HTTP POST desde el origen del IDP.
Cree (o edite) un archivo de configuración OSGi en su proyecto en /ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/org.apache.sling.security.impl.ReferrerFilter.cfg.json
.
/wknd-examples/
a su /<project name>/
Asegúrese de que allow.empty
el valor se establece en true
, el allow.hosts
(o si lo prefiere, allow.hosts.regexp
) contiene el origen del IDP, y filter.methods
incluye POST
. La configuración de OSGi debe ser similar a:
{
"allow.empty": true,
"allow.hosts.regexp": [ ],
"allow.hosts": [
"$[env:SAML_IDP_REFERRER;default=dev-123567890.okta.com]"
],
"filter.methods": [
"POST",
],
"exclude.agents.regexp": [ ]
}
AEM Publish admite una sola configuración de filtro de referente, por lo que debe combinar los requisitos de configuración de SAML con cualquier configuración existente.
Configuraciones de OSGi por entorno (config.publish.dev
, config.publish.stage
, y config.publish.prod
) se puede definir con atributos específicos si allow.hosts
(o allow.hosts.regex
) varían entre entornos.
Durante el proceso de autenticación SAML, el IDP inicia un POST HTTP del lado del cliente en AEM Publish .../saml_login
punto final. Si el IDP y AEM Publish existen en hosts/dominios diferentes, AEM Publish CRoss-Origin Resource Sharing (CORS) debe configurarse para permitir HTTP POST desde el host/dominio del IDP.
Esta solicitud del POST HTTP Origin
El encabezado de suele tener un valor diferente al del host de publicación de AEM, por lo que requiere la configuración de CORS.
AEM Al probar la autenticación SAML en el SDK local de la (localhost:4503
), el IDP puede establecer el Origin
encabezado a null
. Si es así, agregue. "null"
a la alloworigin
lista.
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.cors.impl.CORSPolicyImpl~saml.cfg.json
/wknd-examples/
al nombre de su proyecto~
en el nombre de archivo debe identificar de forma exclusiva esta configuración, por lo que puede ser el nombre del IDP, como ...CORSPolicyImpl~okta.cfg.json
. El valor debe ser alfanumérico y contener guiones.com.adobe.granite.cors.impl.CORSPolicyImpl~...cfg.json
archivo.{
"alloworigin": [
"$[env:SAML_IDP_ORIGIN;default=https://dev-1234567890.okta.com]",
"null"
],
"allowedpaths": [
".*/saml_login"
],
"supportedmethods": [
"POST"
]
}
Configuraciones de OSGi por entorno (config.publish.dev
, config.publish.stage
, y config.publish.prod
) se puede definir con atributos específicos si alloworigin
y allowedpaths
varía según el entorno.
Después de autenticarse correctamente en el IDP, este organizará un POST AEM HTTP para que vuelva a estar registrado en el registro de la dirección de correo electrónico (HTTPs). /saml_login
punto final (configurado en el IDP). Este POST HTTP a /saml_login
está bloqueado de forma predeterminada en Dispatcher, por lo que debe permitirse explícitamente el uso de la siguiente regla de Dispatcher:
dispatcher/src/conf.dispatcher.d/filters/filters.any
en su IDE./saml_login
....
# Allow SAML HTTP POST to ../saml_login end points
/0190 { /type "allow" /method "POST" /url "*/saml_login" }
Si la reescritura de URL en el servidor web Apache está configurada (dispatcher/src/conf.d/rewrites/rewrite.rules
), asegúrese de que las solicitudes a .../saml_login
los puntos finales no se estropean accidentalmente.
AEM Una vez que el flujo de autenticación de SAML crea un usuario en AEM Publish, el nodo de usuario de AEM se puede autenticar en el nivel de servicio de publicación de AEM.
Esto requiere lo siguiente sincronización de datos y tokens encapsulados para que la compatibilidad con Adobes lo habilite en el servicio AEM Publish.
Envíe una solicitud a Asistencia al cliente de Adobe (a través de AdminConsole > Soporte) solicitando:
La sincronización de datos y los tokens encapsulados están habilitados en el servicio de publicación de AEM para el Programa X y el Entorno Y.
AEM Las configuraciones de OSGi deben enviarse a Git e implementarse para que se puedan usar de forma as a Cloud Service mediante Cloud Manager.
$ git remote -v
adobe https://git.cloudmanager.adobe.com/myOrg/myCloudManagerGit/ (fetch)
adobe https://git.cloudmanager.adobe.com/myOrg/myCloudManagerGit/ (push)
$ git add .
$ git commit -m "SAML 2.0 configurations"
$ git push adobe saml-auth:develop
Implemente la rama Git de Cloud Manager de destino (en este ejemplo, develop
), mediante una canalización de implementación de pila completa.