Konfigurace mod_auth_openidc
Modul pro Apache webserver který nám umožní zabezpečit stránky či server který proháníme skrz proxy pomocí OIDC kompatibilní brány jako je třeba Entra ID, Keycloak, Authelia, Okta apod..
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) IDOIDCClientSecret=> 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 email ### Location settings # allow .htaccess <Directory /var/www> AllowOverride All </Directory> ### Location settings <Location /> SSLRequireSSL SSLOptions +StdEnvVars Options Indexes Includes FollowSymLinks AllowOverride AuthConfig Limit Order allow,deny Allow from all </Location> <LocationMatch (/info|/login/entra)> AuthType openid-connect Require valid-user </LocationMatch> # 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.
-
.htaccess soubory
Pomocí těchto souborů lze kromě oprávnění i nastavovat tzv. rewrite pravidla. Těmito pravidly si lze udělat jednoduché zkratky pro logout nebo info endpoint na serveru:
RewriteEngine on
RewriteRule ^info "/login/entra?info=json" [R]
RewriteRule ^logout "/login/entra?logout=https://wiki.cvut.it" [R]
No comments to display
No comments to display