Zum Hauptinhalt springen

Authentifizierung

Bevor Ihre Anwendung eine Methode aufrufen darf, meldet sie sich beim Anmeldedienst (IdentityServer) von Netxp-Verein an und erhält dafür ein Access Token — einen zeitlich begrenzten Zugangsausweis. Dieses Token schickt sie bei jedem Aufruf im HTTP-Header mit:

Authorization: Bearer <access_token>

Die Adressen des Anmeldedienstes finden Sie in der Übersicht. Wie Sie den zugehörigen API-Client einrichten, beschreibt die Seite API-Clients.

Anmeldewege im Überblick​

AnmeldewegMO-APIVO-APIVerein-APIWer meldet sich an?Zugriffsart im API-Client
E-Mail-Adresse und Passwort✓––Ein MitgliedPassword
VereinsID, Benutzername und Passwort–✓✓Ein Benutzer des VereinsPassword
API-Schlüssel–✓✓Der API-Benutzer des ClientsAPI Key
Client Credentials––✓Die Anwendung selbstClient Credentials
Login über Browser✓✓✓Eine Person im BrowserLogin über Browser

Wessen Rechte beim jeweiligen Anmeldeweg gelten, steht unter Wer meldet sich an?.

Token anfordern​

Für alle Anmeldewege außer Login über Browser schickt Ihre Anwendung eine POST-Anfrage an die Token URL https://zugang.netxp-verein.de/connect/token. Die Angaben stehen als Formular im Inhalt der Anfrage (Content-Type: application/x-www-form-urlencoded):

FeldInhalt
grant_typeDer Anmeldeweg, z. B. password oder api_key
client_idDie Client-ID Ihres API-Clients
client_secretDas Secret Ihres API-Clients
scopeDie gewünschten Scopes, durch Leerzeichen getrennt
…Je nach Anmeldeweg weitere Felder (siehe unten)

client_id und client_secret können Sie statt im Formular auch per HTTP-Basic-Authentifizierung im Header Authorization übergeben.

Mit Benutzerdaten (Passwort)​

Die Anwendung nimmt die Anmeldedaten einer Person entgegen und reicht sie an den Anmeldedienst weiter. Es gelten die Rechte dieser Person. Welche Daten erwartet werden, hängt von der Schnittstelle ab:

Mitglieder melden sich immer mit E-Mail-Adresse und Passwort ihres MitgliederOnline-Zugangs an — ohne Benutzername und ohne VereinsID.

FeldWert
grant_typepassword
usernameDie E-Mail-Adresse des Mitglieds
passwordDas Passwort des Mitglieds
Eingabeaufforderung (CMD): Token anfordern
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"
set "EMAIL=mitglied@example.de"
set "PASSWORD=mein_passwort"

REM Token mit E-Mail-Adresse und Passwort des Mitglieds anfordern und die Antwort ausgeben
powershell -NoProfile -Command "$body = @{grant_type='password'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; username='%EMAIL%'; password='%PASSWORD%'; scope='mo_member'}; Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body | ConvertTo-Json"

echo.
pause
Kein API-Schlüssel für Mitglieder

Mit einem API-Schlüssel melden sich nur API-Benutzer von Clients für die VO-API oder die Verein-API an. Für die MO-API gibt es keinen API-Schlüssel — dort meldet sich immer ein Mitglied an.

Mit API-Schlüssel​

Die Anwendung meldet sich mit dem API-Schlüssel des API-Benutzers an. Es gelten die Benutzerrollen dieses API-Benutzers. Möglich bei VO-API und Verein-API.

FeldWert
grant_typeapi_key
apikeyDer API-Schlüssel aus dem Reiter API-Benutzer

Beispiel für die Verein-API (Scope va_mitglied) — für die VO-API tauschen Sie nur den Scope, z. B. gegen vo_member.

Eingabeaufforderung (CMD): Token anfordern
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"
set "API_KEY=mein_api_schluessel"

REM Token mit dem API-Schluessel anfordern und die Antwort ausgeben
powershell -NoProfile -Command "$body = @{grant_type='api_key'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; apikey='%API_KEY%'; scope='va_mitglied'}; Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body | ConvertTo-Json"

echo.
pause

Mit Client Credentials (nur Verein-API)​

Die Anwendung meldet sich als sie selbst an, nur mit Client-ID und Secret. Dieser Weg steht ausschließlich bei der Verein-API zur Verfügung. Der Zugriff erfolgt über einen von Netxp vorgegebenen Standardnutzer; bei Änderungen ist daher nicht erkennbar, welche Person sie veranlasst hat — siehe Wer meldet sich an?.

Eingabeaufforderung (CMD): Token anfordern
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"

REM Token mit Client-ID und Secret (Client Credentials) anfordern und die Antwort ausgeben
powershell -NoProfile -Command "$body = @{grant_type='client_credentials'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; scope='va_mitglied'}; Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body | ConvertTo-Json"

echo.
pause

Login über Browser (eigene Oberflächen)​

Für eigene Oberflächen, an denen sich Personen selbst anmelden, ist der Login über Browser der empfohlene Weg. Ihre Anwendung sieht das Passwort dabei nie.

  1. Die Anwendung leitet den Browser zur Authorization URL https://zugang.netxp-verein.de/connect/authorize weiter — mit client_id, redirect_uri, response_type=code, scope und den PKCE-Angaben code_challenge und code_challenge_method=S256.
  2. Die Person meldet sich auf der Anmeldeseite von Netxp-Verein an — als Mitglied mit E-Mail-Adresse und Passwort, als Vereinsbenutzer mit VereinsID, Benutzer und Passwort oder mit einem API-Schlüssel.
  3. Der Browser kehrt mit einem kurzlebigen Code zur redirect_uri zurück.
  4. Die Anwendung tauscht den Code an der Token URL gegen das Access Token (grant_type=authorization_code).

Setzen Sie diesen Ablauf nicht selbst um, sondern verwenden Sie eine erprobte Bibliothek. Diese lesen alle Adressen selbstständig aus dem Discovery-Dokument:

SpracheBibliothek (Beispiele)
C#Microsoft.AspNetCore.Authentication.OpenIdConnect (ASP.NET Core)
TypeScriptoidc-client-ts
PHPleague/oauth2-client
PythonAuthlib

Im API-Client muss die Rücksprungadresse Ihrer Anwendung als Redirect-URI eingetragen sein. Läuft die Anwendung vollständig im Browser oder auf dem Smartphone, wählen Sie den Typ öffentlich — dann entfällt das Secret.

Die Token-Antwort​

Bei Erfolg antwortet der Anmeldedienst mit einem JSON-Objekt (Beispielwerte):

Antwort der Token URL
{
"access_token": "eyJhbGciOiJSUzI1NiIs…",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "va_mitglied"
}
FeldBedeutung
access_tokenDas Token für den Header Authorization: Bearer …
token_typeImmer Bearer
expires_inGültigkeit in Sekunden — standardmäßig 3600 (1 Stunde)
scopeDie tatsächlich gewährten Scopes
refresh_tokenNur vorhanden, wenn ein Refresh Token angefordert wurde (siehe unten)

Tokens wiederverwenden und erneuern​

  • Wiederverwenden: Fordern Sie nicht für jeden Aufruf ein neues Token an. Speichern Sie es zwischen und verwenden Sie es, bis es kurz vor dem Ablauf steht (expires_in).
  • Neu anfordern: Bei API-Schlüssel und Client Credentials fordern Sie nach Ablauf einfach ein neues Token an.
  • Refresh Token: Bei Login über Browser und bei der Passwort-Anmeldung kann die Anwendung ein Token ohne erneute Eingabe der Anmeldedaten verlängern. Dafür muss im API-Client die Zugriffsart Anmeldung automatisch verlängern (Refresh Token) angekreuzt sein und die Anwendung bei der Anmeldung zusätzlich den Scope offline_access anfordern — siehe Welche Scopes gibt es?. Die Token-Antwort enthält dann ein refresh_token:
Eingabeaufforderung (CMD): Token anfordern
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"
set "REFRESH_TOKEN=refresh_token_aus_der_token_antwort"

REM Token mit dem Refresh Token anfordern und die Antwort ausgeben
powershell -NoProfile -Command "$body = @{grant_type='refresh_token'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; refresh_token='%REFRESH_TOKEN%'}; Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body | ConvertTo-Json"

echo.
pause

Zugangsdaten sicher ablegen​

Die Beispiele auf diesen Seiten enthalten die Zugangsdaten zum Ausprobieren direkt im Code. Für den dauerhaften Betrieb gehören Secret, API-Schlüssel und Passwörter nicht in den Quellcode, denn sie gewähren Zugriff auf die Daten Ihres Vereins. Geeignete Ablageorte sind:

  • Umgebungsvariablen oder eine .env-Datei, die in .gitignore eingetragen ist
  • .NET: User Secrets für die Entwicklung, im Betrieb z. B. ein Schlüsseltresor (Azure Key Vault o. Ä.)
  • WordPress: Konstanten in der wp-config.php statt in Plugin- oder Theme-Einstellungen, die in der Datenbank landen
Keine Zugangsdaten in Browser- oder App-Code

Alles, was im Browser oder in einer App beim Anwender läuft, ist für jeden einsehbar. Secret, API-Schlüssel und Passwörter gehören ausschließlich auf einen Server, den Sie kontrollieren. Anwendungen im Browser verwenden den Login über Browser mit einem öffentlichen API-Client.

Zugang sperren

Muss eine Anbindung sofort gestoppt werden — etwa weil Zugangsdaten in falsche Hände geraten sind —, löschen Sie den API-Client oder erzeugen Sie ein neues Secret. Das bisherige Secret wird nach kurzer Verzögerung ungültig. Siehe Reiter „Secret".

Token widerrufen​

Beim Abmelden kann Ihre Anwendung ein Token aktiv ungültig machen. Dafür muss im API-Client unter Technische Details der Endpunkt Revocation angekreuzt sein.

Token widerrufen
curl -s -X POST "https://zugang.netxp-verein.de/connect/revocation" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET" \
--data-urlencode "token=$REFRESH_TOKEN" \
--data-urlencode "token_type_hint=refresh_token"

Browser-Anwendungen und CORS​

Ruft eine Anwendung im Browser die MO-API oder VO-API direkt auf, muss ihre Adresse dort freigegeben sein (CORS). Netxp-Verein übernimmt diese Freigabe automatisch aus den Redirect- und Post-Logout-URIs der API-Clients. Tragen Sie die Adresse Ihrer Anwendung dort ein; die Freigabe wirkt nach einigen Minuten.

Verwandte Themen​