Skip to main content

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 (jako wiki.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 > Endpoints u 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ý v Certificates & secrets.
    • OIDCCryptoPassphrase => Vygenerovat si zde náhodný string, třeba M4T7CPFqdCUg20qLJYHlDm.
    • OIDCScope => Tady není potřeba nic měnit, pokud chceme mít přístupný i refresh_token je potřeba mít offline_access scope.
    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 => Nastavit Redirect URI na https://<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, zpravidla openid 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 groups pomocí [ + Add groups claim ]
      Zde bych doporučil jen Security groups případně Groups assigned to the application jestli je web řízen na základě skupin.