DocumentationConnexion avec Learnya
Exploiter
Connexion avec Learnya
Laissez les personnes se connecter à votre application avec leur compte Learnya. OAuth 2.1 et OpenID Connect, sur auth.learnya.ai.
Sur cette page
Le document de découverte
Tout ce dont une bibliothèque OpenID Connect a besoin est publié à une adresse. La plupart se configurent avec elle seule.
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"]
}Quel flux choisir
| Votre cas | Flux OAuth |
|---|---|
| Une personne se connecte à votre application | authorization_code |
| Votre serveur agit en son propre nom | client_credentials |
| Garder une session ouverte | refresh_token |
| Un service agit pour le compte d’un autre | token-exchange |
Code d’autorisation avec PKCE
PKCE est obligatoire pour toutes les applications, avec la méthode S256. L’adresse de retour doit correspondre exactement à celle enregistrée.
Envoyer la personne se connecter
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=S256Échanger le code contre des jetons
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_generatedRéponse{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6ImF0K2p3dCJ9…", "token_type": "Bearer", "expires_in": 900, "refresh_token": "…", "id_token": "eyJhbGciOiJSUzI1NiJ9…", "scope": "openid profile email offline_access" }
Vérifier un jeton
Les jetons d’accès sont des JWT signés en RS256. Vérifiez-les avec les clés publiques publiées, sans secret partagé. Cinq contrôles comptent : l’algorithme fixé à RS256, le type at+jwt, l’émetteur, votre audience et l’expiration.
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
}Aussi disponible
| Fonction | Pour |
|---|---|
| Requêtes d’autorisation poussées | Envoyer la demande au serveur plutôt que dans l’adresse |
| DPoP | Lier un jeton à une clé que détient votre application |
| Révocation et introspection | Couper un jeton, ou demander s’il est encore valable |
| Déconnexion | Fermer la session Learnya depuis votre application |
Enregistrer votre application
Chaque application est enregistrée par Learnya, avec ses adresses de retour exactes. Écrivez-nous avec le nom de votre application, ses adresses de retour et les informations dont vous avez besoin sur la personne.