Konfigurace mod_auth_openidc
V následujícím případě používáme Debian Linux.
Instalace
ℹ️ Tento postup je aplikovatelný pro Debian Linux
- Nainstalovat balíčky:
apt -yq update apt -yq install apache2 libapache2-mod-auth-openidc certbot python3-certbot-apache - Aktivovat SSL modul (budeme potřebovat HTTPS)
a2enmod ssl - Vytvořit si konfiguraci pro přesměrování HTTP na HTTPS viz stránku na WiKi
- Zažádat si o HTTPS certifikát:
certbot certonly --apache --non-interactive --no-redirect --agree-tos -m <MAIL_SPRAVCE> -d <FQDN_SERVERU> - Vytvořit konfiguraci např.
001-EntraID-login.conf, kde nastavíme-
<SERVER_FQDN>=> Veřejná adresa serveru (jakowiki.cvut.it). -
ServerAdmin=> Kontaktní email administrátora serveru. -
OIDCProviderMetadataURL=> Do adresy stačí doplnit ID tenantu (<TENANT_ID>).💡 V EntraID lze tohle najít v
Overview > Endpointsu aplikace. -
OIDCRedirectURI=> Tady nastavit libovolnou URI na webserveru. Ta později bude zkopírována do Entry. -
OIDCClientID=> Zde vyplnit AppID aplikace💡 V EntraID lze tohle najít v
Overview > Application (client) ID -
OIDCClientSecret=> Vyplnit aplikační heslo (secret) vytvořený vCertificates & secrets. -
OIDCCryptoPassphrase=> Vygenerovat si zde náhodný string, třebaM4T7CPFqdCUg20qLJYHlDm. -
OIDCScope=> Tady není potřeba nic měnit, pokud chceme mít přístupný i refresh_token je potřeba mítoffline_accessscope.
LoadModule auth_openidc_module modules/mod_auth_openidc.so <VirtualHost *:443> ### Base settings ServerAdmin webmaster@localhost DocumentRoot /var/www/html ## SSL ServerName <SERVER_FQDN> SSLCertificateFile /etc/letsencrypt/live/<SERVER_FQDN>/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/<SERVER_FQDN>/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf ## Log # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ### EntraID Login # https://github.com/OpenIDC/mod_auth_openidc/wiki/Single-Page-Applications#refresh-access-token-ahead-of-expiry OIDCInfoHook iat id_token access_token access_token_expires refresh_token exp timeout remote_user OIDCProviderMetadataURL https://login.microsoftonline.com/<TENANT_ID>/v2.0/.well-known/openid-configuration OIDCRedirectURI https://<SERVER_FQDN>/login/entra OIDCClientID [app_id] OIDCClientSecret [app_password] OIDCCryptoPassphrase [some_custom_passphrase] OIDCScope "openid profile offline_access" OIDCRemoteUserClaim upn ### Location settings <Location /secure> SSLRequireSSL SSLOptions +StdEnvVars AuthType openid-connect require valid-user Options Includes FollowSymLinks AllowOverride AuthConfig Limit Order allow,deny Allow from all </Location> # to limit access to groups #<Location /secure> # Require claim groups:<ENTRA_ID_GROUP> #</Location> # to limit access to users <Location /secure> <RequireAny> Require claim upn:stepatch@cvut.it Require claim upn:bali@cvut.it </RequireAny> </Location> </VirtualHost> -
💡 Apache Require => https://httpd.apache.org/docs/2.4/howto/access.html
Entra ID
🗒️ Oficiální návod je k dispozici ZDE
Jak nastavíme přihlášení pomocí vlastní Entra ID ?
-
EntraID
-
Vytvořit App registration.
-
Authentication=>[ + Add a platform ]=>Web=> NastavitRedirect URInahttps://<SERVER_FQDN>/login/entraℹ️ Redirect URI lze nastavit libovolně, jen je nutné v konfiguraci Apache mít to stejné.
-
Certificates & secrets-
[ + New client secret ]=> < Pojmenovat si klíč a nastavit platnost (volil bych nejdelší - 24 měsíců) > =>[Add]. Zkopírovat HODNOTU (Value), nikoliv Secret ID a uložit si jej někam (v konfiguraci apache je bude nutné zadat)
-
-
API permissions-
[ + Add a permission ]=>Microsoft Graph=>Delegated permissions=> Zde vyplnit stejné scopes jaké požadujeme v apache konfiguraci, zpravidlaopenid profile offline_access.
-
-
Token configuration-
[ + Add optional claim ]=>ID=>ÙPN(An identifier for the user that can be used with the username_hint parameter; ...)
💡 Pro čtení skupin je potřeba přidat ještě claim
groupspomocí[ + Add groups claim ]
Zde bych doporučil jenSecurity groupspřípadněGroups assigned to the applicationjestli je web řízen na základě skupin. -
-