Autorizează un client cu PKCE
Implementează fluxul de cod de autorizare ShareAI cu S256 PKCE, verifică starea și schimbă codul pe backend-ul aplicației tale.
Pe această pagină
Acest flux conectează un cont de client la aplicația ta. Clientul se autentifică, alege un cont personal sau de organizație și aprobă permisiunile solicitate. Backend-ul tău schimbă apoi codul temporar cu token-uri.
Înainte de a începe#
Completează înregistrarea aplicației. Ai nevoie de un callback înregistrat exact, acreditivele clientului stocate pe server și o sesiune pe partea de server pentru browserul care finalizează autorizarea.
1. Creează cererea de autorizare#
https://auth.shareai.now/oauth/authorizeCere clientului să autorizeze aplicația.
- URL de bază
https://auth.shareai.now- Autentificare
- Redirecționare browser; aplicație înregistrată
Generează un verificator nou, o stare și un nonce pentru fiecare încercare. Stochează-le în sesiunea pe partea de server a utilizatorului care inițiază. Trimite provocarea SHA-256, niciodată verificatorul, în redirecționarea browserului. Solicită doar permisiunile de care aplicația ta are nevoie.
Python
import base64
import hashlib
import secrets
import urllib.parse
verifier = secrets.token_urlsafe(48)
challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).rstrip(b"=").decode()
state = secrets.token_urlsafe(32)
nonce = secrets.token_urlsafe(32)
# Store verifier, state and nonce in the user's server-side session.
params = {
"response_type": "code",
"client_id": "YOUR_CLIENT_ID",
"redirect_uri": "https://app.example.com/auth/shareai/callback",
"scope": "openid profile surcharge",
"state": state,
"nonce": nonce,
"code_challenge": challenge,
"code_challenge_method": "S256",
}
print("https://auth.shareai.now/oauth/authorize?" + urllib.parse.urlencode(params))
TypeScript
import { randomBytes, createHash } from "node:crypto";
const verifier = randomBytes(48).toString("base64url");
const state = randomBytes(32).toString("base64url");
const nonce = randomBytes(32).toString("base64url");
const challenge = createHash("sha256").update(verifier).digest("base64url");
// Save verifier, state and nonce in the initiating server-side session.
const params = new URLSearchParams({ response_type: "code", client_id: "YOUR_CLIENT_ID",
redirect_uri: "https://app.example.com/auth/shareai/callback",
scope: "openid profile surcharge", state, nonce,
code_challenge: challenge, code_challenge_method: "S256" });
const authorizationUrl = `https://auth.shareai.now/oauth/authorize?${params}`;
// Redirect the browser to authorizationUrl.
2. Validează callback-ul#
Dacă autorizarea este refuzată, tratează eroarea OAuth ca pe o anulare normală. În caz contrar, compară state cu valoarea salvată înainte de a folosi codul. Respinge o stare lipsă sau care nu se potrivește. Consumă starea salvată o singură dată; nu accepta URL-uri de callback trimise de o altă sesiune de browser.
3. Schimbă codul#
https://auth.shareai.now/oauth/tokenSchimbă un cod de unică folosință și verificatorul PKCE corespunzător.
- URL de bază
https://auth.shareai.now- Autentificare
- Autentificare client confidențial
cURL
curl --fail-with-body "https://auth.shareai.now/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=authorization_code" \
--data-urlencode "client_id=$SHAREAI_CLIENT_ID" \
--data-urlencode "client_secret=$SHAREAI_CLIENT_SECRET" \
--data-urlencode "code=$AUTHORIZATION_CODE" \
--data-urlencode "redirect_uri=https://app.example.com/auth/shareai/callback" \
--data-urlencode "code_verifier=$PKCE_VERIFIER"
Utilizează metoda de autentificare a clientului configurată pentru client. Exemplul folosește autentificarea clientului bazată pe formular. Nu trimite același cod de două ori; începe din nou autorizarea după un cod consumat sau expirat.
4. Stochează rezultatul și stabilește sesiunea aplicației tale#
Stochează token-urile de acces și reîmprospătare în backend-ul tău. Utilizează expires_in returnat în loc să presupui un token permanent. Dacă folosești un ID token, validează semnătura acestuia cu JWKS-ul emitentului, emitentul așteptat, audiența clientului, expirarea și nonce-ul original înainte de a avea încredere în revendicări.
Continuă ciclul de viață#
Reîmprospătare și rotație · Scopuri și identitatea contului · Cereri de chat OAuth
Ultima actualizare: 15 septembrie 2026