Willkommen auf dem OAuth-Server

Dieser Server implementiert OAuth 2.0:

Erste Schritte

Um diesen OAuth-Server zu nutzen, kontaktiere uns bitte, um einen OAuth-Antrag anzufordern.

Bitte gib eine kurze Beschreibung der Anwendung, die du erstellen möchtest, zusammen mit den unten stehenden Details an. Keine Sorge, wenn du dir unsicher bist - wir können die Beschreibung, die du uns gibst, zur Hilfe nehmen.

  1. Der Kundentyp: öffentlich oder vertraulich?
  2. Der Zuschusstyp: Autorisierung oder Client-Credentials?
  3. Die erlaubten Redirect URIs.
  4. Die Ressourcen, auf die du zugreifen möchtest. Bitte erkunde unsere API Dokumentation und unsere GraphQL API.

Beispiel (Berechtigung)

1. PKCE Code Verifier und Challenge generieren

// Generate a code verifier (random string)
const codeVerifier = crypto.randomUUID().replace(/-/g, '');

// Create a code challenge (SHA-256 hash of verifier)
const encoder = new TextEncoder();
const data = encoder.encode(codeVerifier);
const digest = await crypto.subtle.digest('SHA-256', data);
const codeChallenge = btoa(String.fromCharCode(...new Uint8Array(digest))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');

2. Genehmigung beantragen

Leiten Sie den User auf die folgende URL weiter:
https://auth.ewi-kraken.energy/authorize/?
  client_id=YOUR_CLIENT_ID&
  response_type=code&
  redirect_uri=YOUR_REDIRECT_URI&
  code_challenge=CODE_CHALLENGE&
  code_challenge_method=S256
Geben Sie NIEMALS ein Geheimnis in dieser URL an, da es in der Adresszeile des Browsers sichtbar ist.
In diesem Schritt wird dem User die Wahl gelassen, den Zugriff zu genehmigen oder zu verweigern. Wenn der User zustimmt, leitet der Browser zu YOUR_REDIRECT_URI weiter und fügt den AUTH_CODE in die URL-Abfrageparameter ein.

3. Autorisierungscode für Zugangstoken austauschen

Ihr Handler unter YOUR_REDIRECT_URI muss den folgenden Aufruf ausführen:
POST https://auth.ewi-kraken.energy/token/
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_CLIENT_ID&
client_secret=CLIENT_SECRET& # für öffentliche Clients weglassen
grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=YOUR_REDIRECT_URI&
code_verifier=YOUR_CODE_VERIFIER
Wenn Sie diesen Aufruf vom Frontend aus tätigen möchten, sollte die OAuth-Anwendung öffentlich sein und das Geheimnis in der Anfrage weggelassen werden.
Wenn Sie diesen Aufruf vom Backend aus tätigen möchten, sollte die OAuth-Anwendung vertraulich sein und das Geheimnis in der Anfrage enthalten sein.

4. Zugang zur geschützten Ressource

GET https://api.ewi-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

Beispiel (Client-Anmeldeinformationen)

1. Zugangsdaten austauschen für ein Zugangs-Token

POST https://auth.ewi-kraken.energy/token/
Authorization: Basic BASE64_ENCODED(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials

2. Zugang zur geschützten Ressource

GET https://api.ewi-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

Beispiel (Gerät)

1. Gerät autorisieren

POST https://auth.ewi-kraken.energy/device-authorization/
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_CLIENT_ID

Das Gerät sollte die Antwort verwenden, um den user_code und die verification_uri für den End-User anzuzeigen oder zu kommunizieren. Geräte mit Bildschirmen können diese Informationen visuell anzeigen, während Geräte ohne Bildschirme Alternativen wie Audio oder Bluetooth nutzen können.

         +-----------------------------------------------+
         |                                               |
         |  Using a browser on another device, visit:    |
         |  https://auth.example.com/device              |
         |                                               |
         |  And enter the code:                          |
         |  ETE39050                                     |
         |                                               |
         +-----------------------------------------------+

Der User besucht die verification_uri, um sich zu authentifizieren, gibt den user_code ein und autorisiert das Gerät.

2. Gerätecode gegen Zugriffstoken austauschen

Während der User die Autorisierung durchführt, sollte das Gerät periodisch versuchen, ein Zugriffstoken zu erwerben (mit der durch interval Sekunden angegebenen Rate):

POST https://auth.ewi-kraken.energy/token/
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_CLIENT_ID&device_code=DEVICE_CODE&grant_type=urn:ietf:params:oauth:grant-type:device_code

3. Zugang zur geschützten Ressource

GET https://api.ewi-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

Beispiel (Token-Austausch)

RFC 8693-Delegationssemantik wird unterstützt. Das bedeutet, dass Sie das Client-Credentials-Token sowohl im Authorization-Header als auch im actor_token verwenden, wie unten dargestellt.

1. Rufen Sie ein Zugriffstoken für Ihre Client-Credentials-App ab, wie beschrieben in Beispiel (Client-Anmeldeinformationen).

2. Unter der Annahme, dass EXTERNAL_IDP_USER_ACCESS_TOKEN von Ihrem externen IdP ausgestellt wurde, führen Sie den Token-Austausch-Aufruf durch:

POST https://auth.ewi-kraken.energy/token
Authorization: YOUR_CLIENT_CREDENTIALS_ACCESS_TOKEN
Content-Type: application/x-www-form-urlencoded

grant_type="urn:ietf:params:oauth:grant-type:token-exchange"&
actor_token_type="urn:ietf:params:oauth:token-type:access_token"&
actor_token=YOUR_CLIENT_CREDENTIALS_ACCESS_TOKEN&
subject_token_type="urn:ietf:params:oauth:token-type:access_token"&
subject_token=EXTERNAL_IDP_USER_ACCESS_TOKEN

3. Zugang zur geschützten Ressource

GET https://api.ewi-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

Ressourcen