DokumentationAnmelden mit Learnya
Betreiben
Anmelden mit Learnya
Lassen Sie Personen sich mit ihrem Learnya-Konto bei Ihrer Anwendung anmelden. OAuth 2.1 und OpenID Connect, auf auth.learnya.ai.
Auf dieser Seite
Das Discovery-Dokument
Alles, was eine OpenID-Connect-Bibliothek braucht, ist unter einer Adresse veröffentlicht. Die meisten lassen sich allein damit konfigurieren.
curl https://auth.learnya.ai/.well-known/openid-configuration{
"issuer": "https://auth.learnya.ai",
"authorization_endpoint": "https://auth.learnya.ai/authorize",
"token_endpoint": "https://auth.learnya.ai/token",
"jwks_uri": "https://auth.learnya.ai/.well-known/jwks.json",
"grant_types_supported": [
"authorization_code",
"refresh_token",
"client_credentials",
"urn:ietf:params:oauth:grant-type:token-exchange"
],
"code_challenge_methods_supported": ["S256"]
}Welchen Flow wählen
| Ihr Fall | OAuth-Flow |
|---|---|
| Eine Person meldet sich bei Ihrer Anwendung an | authorization_code |
| Ihr Server handelt im eigenen Namen | client_credentials |
| Eine Sitzung offen halten | refresh_token |
| Ein Dienst handelt im Auftrag eines anderen | token-exchange |
Autorisierungscode mit PKCE
PKCE ist für alle Anwendungen Pflicht, mit der Methode S256. Die Redirect-URI muss exakt der registrierten entsprechen.
Die Person zur Anmeldung weiterleiten
GET https://auth.learnya.ai/authorize ?response_type=code &client_id=lyc_your_client &redirect_uri=https://app.example.ch/callback &scope=openid profile email offline_access &state=a value you check on return &code_challenge=BASE64URL(SHA256(verifier)) &code_challenge_method=S256Den Code gegen Tokens tauschen
curl https://auth.learnya.ai/token \ -u "lyc_your_client:$CLIENT_SECRET" \ -d grant_type=authorization_code \ -d code=the_code_from_the_callback \ -d redirect_uri=https://app.example.ch/callback \ -d code_verifier=the_verifier_you_generatedAntwort{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6ImF0K2p3dCJ9…", "token_type": "Bearer", "expires_in": 900, "refresh_token": "…", "id_token": "eyJhbGciOiJSUzI1NiJ9…", "scope": "openid profile email offline_access" }
Ein Token prüfen
Zugriffstokens sind mit RS256 signierte JWT. Prüfen Sie sie mit den veröffentlichten öffentlichen Schlüsseln, ohne gemeinsames Secret. Fünf Prüfungen zählen: der Algorithmus fest auf RS256, der Typ at+jwt, der Aussteller, Ihre Audience und der Ablauf.
import jwt from "jsonwebtoken"
const ISSUER = "https://auth.learnya.ai"
const AUDIENCE = "https://api.example.ch"
// keyFor maps a kid to a public key from the JWKS.
export function verifyAccessToken(token, keyFor) {
const decoded = jwt.decode(token, { complete: true })
if (!decoded?.header.kid) throw new Error("no kid in header")
if (decoded.header.typ !== "at+jwt")
throw new Error("not an access token")
return jwt.verify(token, keyFor(decoded.header.kid), {
algorithms: ["RS256"],
issuer: ISSUER,
audience: AUDIENCE,
})
}import type { KeyObject } from "node:crypto"
import jwt, { type JwtPayload } from "jsonwebtoken"
const ISSUER = "https://auth.learnya.ai"
const AUDIENCE = "https://api.example.ch"
// keyFor maps a kid to a public key from the JWKS.
export function verifyAccessToken(
token: string,
keyFor: (kid: string) => KeyObject,
): JwtPayload {
const decoded = jwt.decode(token, { complete: true })
if (!decoded?.header.kid) throw new Error("no kid in header")
if (decoded.header.typ !== "at+jwt")
throw new Error("not an access token")
const payload = jwt.verify(
token,
keyFor(decoded.header.kid),
{
algorithms: ["RS256"],
issuer: ISSUER,
audience: AUDIENCE,
},
)
if (typeof payload === "string")
throw new Error("not a JSON payload")
return payload
}Ebenfalls verfügbar
| Funktion | Für |
|---|---|
| Pushed Authorization Requests | Die Anfrage direkt an den Server senden statt in der URL |
| DPoP | Ein Token an einen Schlüssel binden, den Ihre Anwendung besitzt |
| Widerruf und Introspection | Ein Token sperren oder abfragen, ob es noch gültig ist |
| Abmeldung | Die Learnya-Sitzung aus Ihrer Anwendung beenden |
Ihre Anwendung registrieren
Jede Anwendung wird von Learnya registriert, mit ihren exakten Redirect-URIs. Schreiben Sie uns den Namen Ihrer Anwendung, ihre Redirect-URIs und die Angaben, die Sie über die Person benötigen.