DocumentaçãoIniciar sessão com Learnya
Operar
Iniciar sessão com Learnya
Permite que as pessoas iniciem sessão na tua aplicação com a sua conta Learnya. OAuth 2.1 e OpenID Connect, em auth.learnya.ai.
Nesta página
O documento de descoberta
Tudo o que uma biblioteca OpenID Connect precisa está publicado num endereço. A maioria configura-se só com ele.
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"]
}Que fluxo escolher
| O teu caso | Fluxo OAuth |
|---|---|
| Uma pessoa inicia sessão na tua aplicação | authorization_code |
| O teu servidor age em nome próprio | client_credentials |
| Manter uma sessão aberta | refresh_token |
| Um serviço age em nome de outro | token-exchange |
Código de autorização com PKCE
O PKCE é obrigatório para todas as aplicações, com o método S256. O endereço de redirecionamento tem de corresponder exatamente ao que foi registado.
Enviar a pessoa para iniciar sessão
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=S256Trocar o código por tokens
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_generatedResposta{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6ImF0K2p3dCJ9…", "token_type": "Bearer", "expires_in": 900, "refresh_token": "…", "id_token": "eyJhbGciOiJSUzI1NiJ9…", "scope": "openid profile email offline_access" }
Verificar um token
Os tokens de acesso são JWT assinados em RS256. Verifica-os com as chaves públicas publicadas, sem segredo partilhado. Contam cinco verificações: o algoritmo fixado em RS256, o tipo at+jwt, o emissor, a tua audiência e a expiração.
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
}Também disponível
| Funcionalidade | Para |
|---|---|
| Pedidos de autorização enviados previamente | Enviar o pedido ao servidor em vez de o colocar no endereço |
| DPoP | Associar um token a uma chave detida pela tua aplicação |
| Revogação e introspeção | Invalidar um token, ou perguntar se ainda é válido |
| Terminar sessão | Terminar a sessão Learnya a partir da tua aplicação |
Registar a tua aplicação
Cada aplicação é registada pela Learnya, com os seus endereços de redirecionamento exatos. Escreve-nos com o nome da tua aplicação, os seus endereços de redirecionamento e as informações de que precisas sobre a pessoa.