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.
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'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"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. :)