es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo acceder a la información del cliente de OIDC en las plantillas de correo electrónico de Keycloak?

Sé cómo acceder a cierta información de variables en las plantillas de correo electrónico de Keycloak. Por ejemplo:

user.getUsername()
user.getEmail()
user.getFirstName()
user.getLastName()

Pero necesito acceder a variables específicas del cliente. El código Java de Keycloak muestra que toda la información que necesito está en la clase Java ClientModel: https://github.com/keycloak/keycloak/blob/main/server-spi/src/main/java/org/keycloak/models/ClientModel.java

client.getClientId()
client.getName()
client.getDescription()
client.getRootUrl()
client.getBaseUrl()
client.getAttribute(name)

Y el parámetro de consulta client_id=account también se establece en la página donde se activa la acción de restablecimiento de contraseña:

https://example.com/auth/realms/my-realm/login-actions/reset-credentials?client_id=account&tab_id=bQiVx012SZg

La información se establece en el cliente:

Pero la variable del cliente parece no estar configurada cuando se renderiza la plantilla de correo electrónico.

““
password-reset.ftl

Esto NO funciona

${client.name}

Esto NO funciona

${kcSanitize(msg(“clientinfohtml”,client.getName()))?no_esc}
“`

¿Cómo se accede a las variables del cliente en las plantillas de correo electrónico de Keycloak?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acceder a las variables del cliente en las plantillas de correo electrónico de Keycloak, puedes utilizar la función getContext() para obtener el objeto ClientModel y luego recuperar la información específica del cliente requerida. Aquí tienes un ejemplo:

    # password-reset.ftl
    
    # Esto debería funcionar
    <#assign client = request.contextData.client.getClientModel()>
    ${client.name}
    ${client.description}
    ${client.getRootUrl()}
    ${client.getBaseUrl()}
    ${client.getAttribute('attribute_name')}
    

    En este ejemplo, estamos creando una variable client que contiene el objeto ClientModel obtenido de la función getContext(). Luego podemos utilizar el objeto para acceder a variables específicas del cliente como el nombre, la descripción, la rootUrl, la baseUrl y cualquier atributo personalizado que se haya configurado en la configuración del cliente.

    Ten en cuenta que este enfoque solo se puede utilizar en plantillas que tienen acceso al objeto de solicitud, como las plantillas de correo electrónico utilizadas para acciones de restablecimiento de contraseña.

Comments are closed.