Mapeamento dos campos do cadastro de usuário entre Keycloak e alfresco

cancel
Showing results for 
Search instead for 
Did you mean: 
fmayconcs
Active Member II

Mapeamento dos campos do cadastro de usuário entre Keycloak e alfresco

Olá!

Estou usuando o keycloak para autenticar os usuários no alfresco share 7.4. No entanto o valor do campo email do cadastro do usuário no keycloak não é levado para o cadastro do usuário no alfresco.

Existem algum parametro especifico para configurar e fazer funcionar?

A integração entre keycloak e alfresco é por OpenID Connect. Não tenho LDAP nem ActiveDiretory.

Grato!

3 Replies
fmayconcs
Active Member II

Re: Mapeamento dos campos do cadastro de usuário entre Keycloak e alfresco

Alguma sugestão @cristinamr ?

cristinamr
Advanced

Re: Mapeamento dos campos do cadastro de usuário entre Keycloak e alfresco

Não trabalhei nisso, mas tentarei ajudá-lo.

Passos para Configurar a Sincronização do Email

  1. Configuração do Keycloak:

    • Certifique-se de que o email está incluído no token JWT emitido pelo Keycloak.
    • Vá para o seu cliente no Keycloak (aquele que você usa para Alfresco).
    • Na aba "Mappers", certifique-se de ter um mapper para o email. Este mapper deve estar configurado para incluir o atributo de email no token.

    Exemplo de configuração de um mapper:

    • Name: email
    • Mapper Type: User Property
    • Property: email
    • Token Claim Name: email
    • Claim JSON Type: String
    • Add to ID token: Yes
    • Add to access token: Yes
    • Add to userinfo: Yes
  2. Configuração do Alfresco:

    • Configure o conector OpenID Connect para mapear o email do token JWT para o registro de usuário no Alfresco.

    No arquivo de configuração alfresco-global.properties, certifique-se de ter a seguinte configuração:
    authentication.chain=keycloak:external
    authentication.keycloak.client-id=SEU_CLIENT_ID
    authentication.keycloak.client-secret=SEU_CLIENT_SECRET
    authentication.keycloak.realm=SEU_REALM
    authentication.keycloak.auth-server-url=https://SEU_KEYCLOAK_SERVER/auth
    authentication.keycloak.redirect-uri=http://SEU_ALFRESCO_SERVER/share
    authentication.keycloak.scope=openid email profile

    Ajuste os valores de SEU_CLIENT_ID, SEU_CLIENT_SECRET, SEU_REALM, SEU_KEYCLOAK_SERVER, e SEU_ALFRESCO_SERVER conforme sua configuração.

     

  3. Configuração dos Mapeamentos de Atributos:

    • O Alfresco precisa saber como mapear os atributos do token para os campos de usuário do Alfresco.

    Você pode adicionar um arquivo de mapeamento de atributos em alfresco/extension/subsystems/Authentication/keycloak (certifique-se de criar os diretórios se não existirem).

    Crie um arquivo chamado keycloak-authentication-context.xml com o seguinte conteúdo:

    <beans:beans xmlns="http://www.alfresco.org/schema/dictionary"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.alfresco.org/schema/dictionary http://www.alfresco.org/schema/dictionary/1.0/alfresco-dictionary-1.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <beans:bean id="keycloakUserMapping" class="org.alfresco.repo.security.authentication.ExternalUsersMapping">
    <beansSmiley Tongueroperty name="mappings">
    <beans:map>
    <beans:entry key="email" value="email"/>
    <beans:entry key="given_name" value="firstName"/>
    <beans:entry key="family_name" value="lastName"/>
    </beans:map>
    </beansSmiley Tongueroperty>
    </beans:bean>
    </beans:beans>

Este arquivo mapeia os atributos do token (email, given_name, family_name) para os campos correspondentes no Alfresco (email, firstName, lastName).

  1. Validação

    Depois de fazer essas configurações, reinicie o Alfresco para aplicar as mudanças. Certifique-se de que os tokens emitidos pelo Keycloak contenham o campo de email e verifique os registros de usuário no Alfresco para ver se o campo de email está sendo sincronizado corretamente.

    Se continuar tendo problemas, revise os logs do Alfresco para identificar qualquer erro relacionado à autenticação e mapeamento de atributos.

    Se precisar de mais ajuda, por favor me avise.



--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
fmayconcs
Active Member II

Re: Mapeamento dos campos do cadastro de usuário entre Keycloak e alfresco

Cara @cristinamr desculpe pela demora em responder...

Obrigada pela resposta.

Infelizmente não tive muito sucesso. Após as configurações fiquei com este erro no log do share e não consegui acesso ao share...
ERROR [alfresco.web.site] [http-nio-8080-exec-1] org.springframework.security.oauth2.core.OAuth2AuthenticationException: [invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response: 401 Unauthorized: [no body]

Voltei as configurações ao ponto onde estava logando...

Segui um pouco desta postagem do @angelborroy e também desta do @afaust 

Também usei alguns detalhes desta postagem.

Meu cenário é o seguinte...

Tenho no alfresco-global.properties:

authentication.chain=identity-service1:identity-service

identity-service.enable-basic-auth=true
identity-service.auth-server-url=https://meudominiokeycloak.com.br
identity-service.realm=alfresco
identity-service.resource=alfresco

aims.enabled=true
aims.realm=alfresco
aims.resource=alfresco
aims.authServerUrl=https://meudominiokeycloak.com.br
aims.publicClient=true

No share-config-custom.xml:

<!-- AIMS -->

<config evaluator="string-compare" condition="AIMS">
<enabled>true</enabled>
<realm>alfresco</realm>
<resource>alfresco</resource>
<authServerUrl>https://meukeycloak.com.br</authServerUrl>
<sslRequired>none</sslRequired>
<publicClient>true</publicClient>
<autodetectBearerOnly>true</autodetectBearerOnly>
<alwaysRefreshToken>true</alwaysRefreshToken>
<principalAttribute>email</principalAttribute>
<enableBasicAuth>true</enableBasicAuth>
</config>

Consigo logar no share e também consegui logar via keycloak no Workspace fazendo alterações no app.config.json.

Mas não consigo mapear, por exemplo o valor da propriedade email do cadastro de usuário no keycloak para o campo email no alfresco.

Help @afaust@angelborroy and @cristinamr 

Thanks!