Otorisasi pelanggan dengan PKCE
Implementasikan alur authorization-code ShareAI dengan S256 PKCE, verifikasi state, dan tukarkan kode di backend aplikasi Anda.
Di halaman ini
Alur ini menghubungkan satu akun pelanggan ke aplikasi Anda. Pelanggan masuk, memilih akun pribadi atau organisasi, dan menyetujui izin yang diminta. Backend Anda kemudian menukarkan kode sementara dengan token.
Sebelum Anda memulai#
Selesai pendaftaran aplikasi. Anda memerlukan callback yang terdaftar secara tepat, kredensial klien yang disimpan di server, dan sesi sisi server untuk browser yang menyelesaikan otorisasi.
1. Buat permintaan otorisasi#
https://auth.shareai.now/oauth/authorizeMinta pelanggan untuk mengotorisasi aplikasi.
- URL Dasar
https://auth.shareai.now- Otentikasi
- Pengalihan browser; aplikasi yang terdaftar
Hasilkan verifier, state, dan nonce baru untuk setiap percobaan. Simpan di sesi sisi server pengguna yang memulai. Kirim tantangan SHA-256, bukan verifier, dalam pengalihan browser. Minta hanya scope yang dibutuhkan aplikasi Anda.
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. Validasi callback#
Jika otorisasi ditolak, tangani kesalahan OAuth sebagai pembatalan normal. Jika tidak, bandingkan state dengan nilai yang disimpan sebelum menggunakan kode. Tolak state yang hilang atau tidak cocok. Gunakan state yang disimpan hanya sekali; jangan terima URL callback yang dikirimkan oleh sesi browser lain.
3. Tukarkan kode#
https://auth.shareai.now/oauth/tokenTukarkan kode satu kali pakai dan verifier PKCE yang cocok.
- URL Dasar
https://auth.shareai.now- Otentikasi
- Otentikasi klien rahasia
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"
Gunakan metode otentikasi klien yang dikonfigurasi untuk klien. Contoh ini menggunakan otentikasi klien berbasis formulir. Jangan kirim kode yang sama dua kali; mulai otorisasi lagi setelah kode digunakan atau kedaluwarsa.
4. Simpan hasil dan bangun sesi aplikasi Anda#
Simpan token akses dan refresh di backend Anda. Gunakan expires_in yang dikembalikan daripada mengasumsikan token permanen. Jika Anda menggunakan ID token, validasi tanda tangannya dengan JWKS penerbit, penerbit yang diharapkan, audiens klien, masa berlaku, dan nonce asli Anda sebelum mempercayai klaim.
Lanjutkan siklus hidup#
Refresh dan rotasi · Scope dan identitas akun · Permintaan chat OAuth
Terakhir diperbarui 15 September 2026