#!/coding/blatt
Sammelsurium mit Schwerpunkten Linux & IT-Sicherheit

OpenCloud: Authelia als OIDC-Provider für SSO einrichten

In meinem Homelab nutze ich OpenCloud als Dateimanagementlösung zum einfachen Verwalten und Synchronisieren meiner Dateien zwischen meinen verschiedenen Endgeräten als auch zum Teilen mit meiner Familie. Da ich ich mehrere Services selber hoste und mich nicht bei jedem Service separat anmelden möchte, nutze ich Authelia als Single-Sign-On (SSO)-Lösung. OpenCloud unterstützt diesbzgl. die Authentifizierung mittels eines externen OpenID Connect Identity Provider (IDP). Leider ist die Dokumentation zu diesem Thema derzeit noch recht spärlich und definitiv ausbaufähig. Mit ein wenig "Trial and Error" und durchforsten von GitHub-Issues habe ich nun aber eine funktionierende Konfiguration gefunden, so dass die Authentifizierung mittels Authelia für alle Plattformen (Web, Desktop, Android und iOS) funktioniert.

Folgende Software bzw. Hardware wurde verwendet:
  • OpenCloud v7.0.0
  • Authelia v4.39.19

Authelia-Konfiguration anpassen

Die configuration.yml von Authelia habe ich wie folgt angepasst:

identity_providers:
  oidc:
    [...]

    cors:
      endpoints:
        - 'authorization'
        - 'pushed-authorization-request'
        - 'token'
        - 'revocation'
        - 'introspection'
        - 'userinfo'

    clients:
      - client_id: 'opencloud-web'
        client_name: 'opencloud-web'
        public: true
        redirect_uris:
          - 'https://opencloud.my-domain.de/'
          - 'https://opencloud.my-domain.de/oidc-callback.html'
          - 'https://opencloud.my-domain.de/oidc-silent-redirect.html'
        scopes:
          - 'openid'
          - 'groups'
          - 'profile'
          - 'email'
          - 'offline_access'
        response_types:
          - 'code'
        grant_types:
          - 'refresh_token'
          - 'authorization_code'
        response_modes:
          - 'form_post'
          - 'query'
          - 'fragment'
        consent_mode: 'implicit'

      - client_id: 'OpenCloudDesktop'
        client_name: 'opencloud-desktop'
        public: true
        redirect_uris:
          - 'http://localhost'
          - 'http://127.0.0.1'
        scopes:
          - 'openid'
          - 'groups'
          - 'profile'
          - 'email'
          - 'offline_access'
        response_types:
          - 'code'
        grant_types:
          - 'authorization_code'
          - 'refresh_token'
        response_modes:
          - 'form_post'
          - 'query'
          - 'fragment'
        consent_mode: 'implicit'

      - client_id: 'OpenCloudAndroid'
        client_name: 'opencloud-android'
        public: true
        redirect_uris:
          - 'oc://android.opencloud.eu'
        scopes:
          - 'openid'
          - 'groups'
          - 'profile'
          - 'email'
          - 'offline_access'
        response_types:
          - 'code'
        grant_types:
          - 'authorization_code'
          - 'refresh_token'
        response_modes:
          - 'form_post'
          - 'query'
          - 'fragment'
        consent_mode: 'implicit'

      - client_id: 'OpenCloudIOS'
        client_name: 'opencloud-ios'
        public: true
        redirect_uris:
          - 'oc://ios.opencloud.eu'
        scopes:
          - 'openid'
          - 'groups'
          - 'profile'
          - 'email'
          - 'offline_access'
        response_types:
          - 'code'
        grant_types:
          - 'authorization_code'
          - 'refresh_token'
        response_modes:
          - 'form_post'
          - 'query'
          - 'fragment'
        consent_mode: 'implicit'
Datei: configuration.yml

OpenCloud-Konfiguration anpassen

Für die Konfiguration von OpenCloud habe ich in der von OpenCloud bereitgestellten docker-compose-yml folgende Umgebungsvariablen ergänzt:

services:
  opencloud:
    [...]

    environment:
      [...]

      OC_OIDC_ISSUER: 'https://authelia.my-domain.de'
      IDP_DOMAIN: 'authelia.my-domain.de'
      WEB_OIDC_CLIENT_ID: 'opencloud-web'
      PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHOD: 'none'
      PROXY_AUTOPROVISION_ACCOUNTS: "false"
      PROXY_ROLE_ASSIGNMENT_DRIVER: "default"
      PROXY_USER_OIDC_CLAIM: "preferred_username"
      PROXY_USER_CS3_CLAIM: "username"
      PROXY_OIDC_REWRITE_WELLKNOWN: "true"
      PROXY_ROLE_ASSIGNMENT_OIDC_CLAIM: 'groups'
      WEB_OIDC_SCOPE: 'openid profile email groups'
      GRAPH_ASSIGN_DEFAULT_USER_ROLE: "true"
      GRAPH_USERNAME_MATCH: "none"
      OC_EXCLUDE_RUN_SERVICES: "idp"
Datei: docker-compose.yml

Details zu den einzelnen Einstellungen findet ihr in der OpenCloud-Dokumentation.

Fazit

Nachdem OpenCloud und Authelia neu gestartet wurden, führt ein Aufruf von OpenCloud zur Weiterleitung zur Authelia-Anmeldeseite. Nach erfolgreicher Anmeldung wird man dann wieder zurück zu OpenCloud weitergeleitet und ist in OpenCloud angemeldet.

Es hat mir zwar etwas Geduld abverlangt, Authelia als OIDC-Provider für OpenCloud einzurichten, aber nun läuft es glücklicherweise reibungslos. :)