App per OIDC anbinden¶
Ziel¶
Mitglieder melden sich bei einer App über Authentik an, aber nur die, die in ihrer Access-Gruppe sind, und die App bekommt, wo sie es auswerten kann, ihre Rollen als Gruppen.
Voraussetzungen¶
- du kannst Terraform für Authentik ausführen (Terraform ausführen)
- gelesen: Authentik, Gruppenmodell in Authentik, SSO und OIDC und Terraform
- die App läuft schon oder wird gerade nach App hinzufügen eingerichtet
- aus der Doku der App weißt du:
- welche Adresse sie als Redirect-URI (Callback) erwartet
- ob sie Gruppen oder Rollen aus dem Login übernehmen kann, und unter welchem Claim
In den Beispielen heißt die App beispiel und läuft unter beispiel.garage-lab.de.
Alle Dateien liegen in apps/authentik/tf-core/.
Schritte¶
1. Neuesten Stand holen und plan ausführen¶
Wie in Terraform ausführen, Schritt 1 bis 4, im Ordner tf-core.
Erwartet: No changes. Your infrastructure matches the configuration.
2. Access-Gruppe anlegen¶
Trag in group_access.tf, alphabetisch einsortiert, eine Gruppe ein:
| Terraform | |
|---|---|
application ist der Name der App, klein geschrieben.
Setz is_default_member_group bewusst: true, wenn alle Mitglieder die App nutzen sollen, sonst false, und schreib den Grund als Kommentar dazu, wie bei den anderen Gruppen in der Datei.
is_default_member_group gilt nur für neue Mitglieder
Mit true kommen nur Mitglieder in die Gruppe, die sich ab jetzt registrieren.
Alle, die schon ein Konto haben, fügst du in Schritt 8 von Hand hinzu.
3. Application und Provider anlegen¶
Kopier die Datei einer ähnlichen App:
- die App übernimmt keine Gruppen:
application_hedgedoc.tf - die App übernimmt Gruppen:
application_nextcloud.tf
| Bash | |
|---|---|
Ersetze überall den Namen der alten App, sodass die Resources beispiel-prod heißen, und pass an:
authentik_application:name(so heißt die Kachel im App-Dashboard),slugundclient_idalsbeispiel-prod,meta_description,meta_icon(Schritt 5) undmeta_launch_url, die Adresse, unter der die App den Login startetauthentik_policy_binding:group = authentik_group.beispiel-access.id; damit kommt nur durch den Login, wer in der Access-Gruppe istauthentik_provider_oauth2: unterallowed_redirect_urisdie Redirect-URI aus der Doku der App, etwahttps://beispiel.garage-lab.de/auth/callback
Alles andere, etwa die Flows, signing_key und die Gültigkeit der Tokens, bleibt wie in der Vorlage.
4. Property Mappings wählen¶
In property_mappings des Providers:
- Die App übernimmt keine Gruppen: so lassen wie in
application_hedgedoc.tf, mitoauth-mapping-profile-without-groupsausproperty_mapping_oauth.tfund einem Kommentar, warum keine Gruppen. - Die App übernimmt Gruppen: ein eigenes Mapping für den Claim
groupsin derselben Datei anlegen, wienextcloud-oauth-mapping-groupsinapplication_nextcloud.tf, mitattributes__application="beispiel"als Filter, und es zusätzlich zu den anderen inproperty_mappingseintragen. Erwartet die App die Gruppen unter einem anderen Claim, nimm dessen Namen alsscope_name, und trag ihn in der App als Scope ein.
Die Rollen selbst legst du danach nach Gruppe für eine App anlegen an.
5. Icon bereitstellen¶
Leg das Icon der App als icon-beispiel.svg in apps/authentik/media/ und trag als meta_icon https://garage-lab.de/sso/icon-beispiel.svg ein.
Auf die Vereinswebseite kopiert es jemand mit SSH-Zugang zum Webspace der Webseite (siehe hosting.de); bitte in Signal darum, wenn du keinen Zugang hast.
glwp ist dabei der Name, unter dem der Zugang in der eigenen ~/.ssh/config eingetragen ist:
| Bash | |
|---|---|
Erwartet: https://garage-lab.de/sso/icon-beispiel.svg zeigt im Browser das Icon.
6. Ausrollen¶
Wie in Terraform ausführen, Schritt 5 bis 9.
Erwartet bei plan: neu angelegt werden authentik_group.beispiel-access, authentik_application.beispiel-prod, authentik_policy_binding.beispiel-access, authentik_provider_oauth2.beispiel-prod und gegebenenfalls das Gruppen-Mapping, also Plan: 4 to add, 0 to change, 0 to destroy. bzw. 5 to add.
7. Client-ID und Client-Secret in der App hinterlegen¶
Die Client-ID ist der Wert von client_id, also beispiel-prod.
Das Client-Secret erzeugt Authentik selbst; du findest es in der Admin-Oberfläche von Authentik unter Applications → Providers → „Provider for beispiel-prod“.
Trag beide nach Secret anlegen oder ändern als oidcclientid und oidcclientsecret in creds-beispiel-server.enc.yaml ein und gib sie der App über die Umgebungsvariablen, die ihre Doku nennt.
Die Adressen, die die App außerdem braucht, stehen in Authentik auf derselben Seite; meist reicht die OpenID Configuration URL https://login.garage-lab.de/application/o/beispiel-prod/.well-known/openid-configuration.
8. Bestehende Mitglieder hinzufügen¶
Nur wenn die Access-Gruppe is_default_member_group = true hat oder schon jetzt bestimmte Leute die App nutzen sollen.
Füg die Mitglieder in der Admin-Oberfläche von Authentik unter Directory → Groups → „Beispiel Access“ → Users hinzu.
Sollen alle Mitglieder hinein, bitte in Signal jemanden mit Admin-Rechten in Authentik darum; das geht bisher nur von Hand.
Prüfen¶
- Mit einem Konto, das in „Beispiel Access“ ist, erscheint die Kachel im App-Dashboard von Authentik, und die Anmeldung bei der App klappt.
- Mit einem Konto, das nicht in der Gruppe ist, lehnt Authentik die Anmeldung ab.
- Übernimmt die App Gruppen: Ein Konto in einer App-Gruppe hat in der App die passende Rolle.
terraform planzeigt „No changes“.
Wenn etwas schiefgeht¶
- Authentik meldet beim Login
Redirect URI Error: Die Adresse unterallowed_redirect_urisstimmt nicht genau mit der überein, die die App schickt; die richtige steht in der Fehlermeldung. - Die App meldet
invalid_clientoder lehnt die Anmeldung ab: Client-ID oder Client-Secret stimmen nicht; vergleiche sie mit der Provider-Seite in Authentik und prüf mitsops -d, was im Secret steht. - Die App bekommt keine Gruppen: Mapping in
property_mappingseingetragen, Filter auf den richtigen Namen inapplicationgesetzt und der Scope in der App angefordert? - Allgemeines: Authentik-Doku: OAuth2 Provider und Integrations mit Anleitungen für viele Apps