SSO AD
Introdução
Pretende-se o desenvolvimento de uma funcionalidade no ecrã de login do portal, que permita aos utilizadores de domínio da CM Porto, entrarem diretamente no sistema (SSO - Single Sign On).
Uma vez que o portal está instalado num servidor linux, com apache como serviço http web, a integração passa por instalar e configurar um conjunto de extensões que permitem a comunicação entre este servidor e o servidor de domínio da AD (Active Directory).
Configurar Controlador de Dominio (KDC)
No Controlador de Domínio
Criar um utilizador no controlador de dominio, para efeitos de autenticação do servidor web na AD.
- Nome de utilizador: humanportal
- Definir uma palavra passe forte
- Definir "password nunca expira"
- Utilizador tem se pertencer ao grupo "Utilizadores de Domínio" (Domain Users)
Definir SPN (Service Principal Name) para webservice (mapeia SPN HTTP/<servidor web>.cm-porto.net ao utilizador humanportal):
- Abrir terminal "PowerShell" como administrador
- Executar os seguintes comandos:
- > setspn -A HTTP/<web server> CM-PORTO\humanportal
- > mkdir c:\temp
- > ktpass -princ HTTP/<web server>@CM-PORTO.NET -mapuser CM-PORTO\humanportal -pass <password> -out C:\temp\webserver.keytab -pType KRB5_NT_PRINCIPAL -crypto AES256-SHA1
- enviar ficheiro C:\temp\webserver.keytab à humansoft
- * enviar credenciais do utilizador humanportal à humansoft, para efeitos de testes em qualidade
- * o ficheiro keytab será usado para autenticação kerberos, no servidor web.
No servidor web:
-
copiar o ficheiro gerado c:\temp\webserver.keytab para o webserver linux em /etc/apache2/webserver.keytab
-
atribuir o owner como o apache: sudo chmod www-data:www-data /etc/apache2/webserver.keytab
- atribuir permissões: chmod 600 /etc/apache2/webserver.keytab
-
verificar se ficheiro está bem definido: klist -k -t /etc/apache2/webserver.keytab
- klist deverá mostrar o principal HTTP/<webserver>.cm-porto.pt@CM-PORTO.NET
-
usar o comando kinit para autenticar SPN (Service Principal Name):
-
> kinit -k -t /etc/apache2/webserver.keytab HTTP/<web server>@CM-PORTO.NET
-
este comando irá obter um ticket kerberos para o webservice ospedado no servidor linux.
-
Instalar Kerberos e LDAP (servidor web)
> sudo apt install php8.3-ldap libsasl2-modules-gssapi-mit libsasl2-dev
> sudo apt-get install krb5-config krb5-locales libpam-krb5
> sudo apt-get install libapache2-mod-auth-gssapi (ou mod_auth_gssapi)
verificar a instalação:
> kinit --version
> ls /usr/lib/apache2/modules/ | grep gssapi
Ativar mod_auth_gssapi no apache:
> sudo a2enmod auth_gssapi
> sudo service apache2 restart
> sudo apache2ctl -M | grep gssapi
Configurar Kerberos
> sudo nano /etc/krb5.conf
[libdefaults]
default_realm = CM-PORTO.NET
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 365d
forwardable = true
[realms]
CM-PORTO.NET = {
kdc = <controlador de dominio>.cm-porto.net
admin_server = <controlador de dominio>.cm-porto.net
}
[domain_realm]
.cm-porto.net = CM-PORTO.NET
cm-porto.net = CM-PORTO.NET
* Substituir CM-PORTO.NET pelo FQDN (Fully Qualified Domain Name) do controlador de domínio (KDC)
Verificar resolução do nome do controlador de dominio, a apartir do servidor web:
> nslookup <controlador de dominio>.cm-porto.net ou
> ping <controlador de dominio>.cm-porto.net
* se falhou, adicionar a /etc/hosts
Verificar se porta do KDC está aberta:
> telnet dc1.humansoft.pt 88
Verificar se ficheiro keytab está bem configurado:
> sudo klist -k /etc/krb5.keytab
Configurar Apache
Configurar os browsers para usarem kerberos automaticamente
Microsoft Edge (on Windows):
- Abrir Opções de Internet (a partir do Painel de Controlo ou a partir do browser).
- Clicar no separador Segurança.
- Selecionar a zona (Intranet ou Trusted Sites dependendo das configurações da rede).
- Adicionar o url do portal.