OpenID Connect · OAuth 2.1

Mit Orneos anmelden

Authentifizieren Sie Ihre Nutzer mit ihrem Orneos-Konto über OpenID Connect und OAuth 2.1 (Authorization Code + obligatorisches PKCE S256).

1. Discovery und Endpunkte

Der OpenID-Connect-Anbieter von Orneos veröffentlicht seine Konfiguration unter https://orneos.eu/.well-known/openid-configuration. Der Aussteller (iss) der mit RS256 signierten JWT-Tokens lautet immer https://orneos.eu.

Autorisierung und Zustimmung erfolgen im Browser auf https://login.orneos.eu/oauth/authorize, während Server-zu-Server-Aufrufe (/oauth/token, /oauth/userinfo, /oauth/revoke, /oauth/jwks) über https://orneos.eu laufen.

OIDC Discovery
curl -s https://orneos.eu/.well-known/openid-configuration | jq .

2. Autorisierung und PKCE (S256 erforderlich)

Alle Drittanbieter-Anwendungen (vertrauliche wie öffentliche) müssen PKCE (RFC 7636) mit der Methode S256 verwenden. Anfragen ohne code_challenge oder mit plain werden abgelehnt.

Erzeugen Sie einen zufälligen code_verifier (43 bis 128 URL-sichere Zeichen), berechnen Sie dessen Base64url-kodierten SHA-256-Hash (code_challenge) und leiten Sie den Nutzer zu https://login.orneos.eu/oauth/authorize weiter.

  • response_type=code und code_challenge_method=S256 sind Pflicht
  • scope: openid (Pflicht), profile (Anzeigename, Benutzername, Avatar), email (bestätigte E-Mail-Adresse)
  • state: zufälliges CSRF-Token, das bei der Rückkehr zur redirect_uri geprüft wird
  • prompt=consent (optional): erzwingt die erneute Anzeige des Zustimmungsbildschirms
Autorisierungs-URL
https://login.orneos.eu/oauth/authorize
  ?client_id=orn_0123456789abcdef01234567
  &redirect_uri=https%3A%2F%2Fexample.com%2Foauth%2Fcallback
  &response_type=code
  &scope=openid%20profile%20email
  &state=9f8e7d6c5b4a3f2e1d0c
  &code_challenge=E9Melhoa2OwvFrGMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256

3. Code-Austausch und Refresh-Token-Rotation

Nach der Zustimmung leitet Orneos mit ?code=...&state=... an Ihre redirect_uri weiter. Der Autorisierungscode ist 120 Sekunden gültig und nur einmal verwendbar.

Tauschen Sie ihn unter POST https://orneos.eu/oauth/token zusammen mit Ihrem code_verifier ein. Sie erhalten ein access_token (1 Stunde), ein RS256-signiertes id_token und ein refresh_token (90 Tage, Einmal-Rotation).

Jeder Aufruf mit grant_type=refresh_token macht das verwendete Token sofort ungültig und gibt ein neues zurück. Wird ein bereits verbrauchtes refresh_token erneut gesendet, wird die gesamte Sitzung dieser App für den Nutzer widerrufen.

Austausch authorization_code
curl -X POST https://orneos.eu/oauth/token \
  -u "orn_0123456789abcdef01234567:orns_IHR_GEHEIMNIS" \
  -d "grant_type=authorization_code" \
  -d "code=ERHALTENER_CODE" \
  -d "redirect_uri=https://example.com/oauth/callback" \
  -d "code_verifier=IHR_CODE_VERIFIER"
Erneuerung über refresh_token
curl -X POST https://orneos.eu/oauth/token \
  -u "orn_0123456789abcdef01234567:orns_IHR_GEHEIMNIS" \
  -d "grant_type=refresh_token" \
  -d "refresh_token=ornr_IHR_REFRESH_TOKEN"

4. UserInfo und Widerruf (RFC 7009)

Rufen Sie GET https://orneos.eu/oauth/userinfo mit Authorization: Bearer <access_token> auf, um die vom Nutzer freigegebenen Profildaten abzurufen.

Um einen Zugriff serverseitig zu beenden, senden Sie das refresh_token oder access_token an POST https://orneos.eu/oauth/revoke.

UserInfo-Abfrage
curl -H "Authorization: Bearer ACCESS_TOKEN" https://orneos.eu/oauth/userinfo
Widerruf (RFC 7009)
curl -X POST https://orneos.eu/oauth/revoke \
  -u "orn_0123456789abcdef01234567:orns_IHR_GEHEIMNIS" \
  -d "token=ornr_IHR_REFRESH_TOKEN"

5. Offizieller Button „Mit Orneos anmelden“

Verwenden Sie den offiziellen Button für ein vertrautes, barrierefreies Erscheinungsbild im hellen oder dunklen Design.

Eigenständiges HTML + CSS
<a class="orneos-signin-btn" href="/auth/orneos">
  <svg aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2">
    <circle cx="12" cy="12" r="9"/>
    <path d="M12 3a9 9 0 0 0 0 18"/>
  </svg>
  <span>Mit Orneos anmelden</span>
</a>

<style>
.orneos-signin-btn {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 10px 18px; border-radius: 8px; font: 600 15px/1.2 system-ui, sans-serif;
  background: #ffffff; color: #0f172a; border: 1px solid #cbd5e1; text-decoration: none;
}
.orneos-signin-btn:hover { border-color: #002FA7; color: #002FA7; }
</style>