Após o Login Federado, foi identificado um problema com o username retornado pelo IDP.
Basicamente o username/eppn é um email contendo @ para o userquery/daiquiri isto é um problema, pois o username é utilizado para gerar o MYDB do usuario.
O Mydb basicamente é um schema postgresql criado no banco pelo userquery.
Seguindo o Exemplo para meu usuario:
EPPN Retornado pelo IDP (identificação unica): 3c23a1f2c7544f5cd31f59e7d7b0a35b@linea.org.br
Username no LIneA (LDAP): glauber.costa
Schema MYDB : mydb_3c23a1f2c7544f5cd31f59e7d7b0a35b@linea.org.br
este schema é inviavel por dois motivos, sendo o primeiro ser ilegivel e de dificil memorização pelo usuario que vai precisar saber o seu schema e tables para usar em outros lugares, o segundo é que o @ é considerado caracter especial fazendo com que algumas funções do daiquiri não funcionem corretamente.
Após breve conversa com o @carlosadean foi sugerido uma consulta a infra do linea usando um dos ids unicos do usuario exemplo email. para saber o username ldap do usuario.
Sugiro que essa consulta seja feito no metodo make_profile do classe Midleware do shibboleth. pois ela já é responsavel por atulizar os dados do usuario após o login.
Neste caso o processo de autenticação seria:
Formulário de login do IDP ->
retorna os dados de sessão (eppn, email, etc) ->
Midleware Shibboleth cria ou atualiza o usuario usando o eppn como username ( comportamento default) ->
make_profile
faz uma consulta ao ldap usando email como id, para recuperar o username e ou outros atributos.
faz update do model User do daiquiri alterando o username que era eppn para o username ldap.
Para fazer essa implementação é necessário saber como fazer a consulta ao ldap do linea.
Penso em duas possiveis soluções:
consulta direta ao ldap, via bibliteca (se não me engano já tem um ldap configurado no daiquiri)
consulta via API ao commanger o gerenciador de usuarios do LIneA. (eu preferiria essa solução)
Por se tratar de questões de credenciais e login federado esse desenvolvimento deve ser feito no ambiente do linea.
A forma mais pratica é copiar o arquivo que vai ser alterado para diretório /home/deployer/userquery-dev
e montar esse arquivo no docker-compose para sobrescrever o arquivo original dentro do container.
Isso vai permitir fazer as alterações em que seja necessário um build do container a cada teste.
quando a solução estiver funcional as mudanças no arquivo devem ser levadas para o repositório e o arquivo removido do ambiente.
Após o Login Federado, foi identificado um problema com o username retornado pelo IDP.
Basicamente o username/eppn é um email contendo @ para o userquery/daiquiri isto é um problema, pois o username é utilizado para gerar o MYDB do usuario.
O Mydb basicamente é um schema postgresql criado no banco pelo userquery.
Seguindo o Exemplo para meu usuario: EPPN Retornado pelo IDP (identificação unica):
3c23a1f2c7544f5cd31f59e7d7b0a35b@linea.org.br
Username no LIneA (LDAP):glauber.costa
Schema MYDB :mydb_3c23a1f2c7544f5cd31f59e7d7b0a35b@linea.org.br
este schema é inviavel por dois motivos, sendo o primeiro ser ilegivel e de dificil memorização pelo usuario que vai precisar saber o seu schema e tables para usar em outros lugares, o segundo é que o @ é considerado caracter especial fazendo com que algumas funções do daiquiri não funcionem corretamente.
Após breve conversa com o @carlosadean foi sugerido uma consulta a infra do linea usando um dos ids unicos do usuario exemplo email. para saber o username ldap do usuario.
Sugiro que essa consulta seja feito no metodo make_profile do classe Midleware do shibboleth. pois ela já é responsavel por atulizar os dados do usuario após o login.
Neste caso o processo de autenticação seria:
Formulário de login do IDP ->
retorna os dados de sessão (eppn, email, etc) ->
Midleware Shibboleth cria ou atualiza o usuario usando o eppn como username ( comportamento default) ->
make_profile
faz uma consulta ao ldap usando email como id, para recuperar o username e ou outros atributos.
faz update do model User do daiquiri alterando o username que era eppn para o username ldap.
Autenticação concluida.
O método make profile é este: https://github.com/linea-it/lsp_daiquiri/blob/master/daiquiri/linea/shibboleth.py#L10
Para fazer essa implementação é necessário saber como fazer a consulta ao ldap do linea.
Penso em duas possiveis soluções:
Por se tratar de questões de credenciais e login federado esse desenvolvimento deve ser feito no ambiente do linea. A forma mais pratica é copiar o arquivo que vai ser alterado para diretório
/home/deployer/userquery-dev
e montar esse arquivo no docker-compose para sobrescrever o arquivo original dentro do container. Isso vai permitir fazer as alterações em que seja necessário um build do container a cada teste. quando a solução estiver funcional as mudanças no arquivo devem ser levadas para o repositório e o arquivo removido do ambiente.