تفويض العميل باستخدام PKCE
تنفيذ تدفق رمز التفويض لـ ShareAI باستخدام S256 PKCE، تحقق من الحالة واستبدل الرمز في الواجهة الخلفية لتطبيقك.
في هذه الصفحة
يربط هذا التدفق حساب عميل واحد بتطبيقك. يقوم العميل بتسجيل الدخول، ويختار حسابًا شخصيًا أو حساب مؤسسة، ويوافق على الأذونات المطلوبة. ثم تقوم الواجهة الخلفية الخاصة بك باستبدال الرمز قصير العمر بالرموز.
قبل أن تبدأ#
إكمال تسجيل التطبيق. تحتاج إلى استدعاء مسجل دقيق، بيانات اعتماد العميل المحفوظة على الخادم، وجلسة خادم جانبية للمتصفح الذي يكمل التفويض.
1. إنشاء طلب التفويض#
https://auth.shareai.now/oauth/authorizeاطلب من العميل تفويض التطبيق.
- عنوان URL الأساسي
https://auth.shareai.now- المصادقة
- إعادة توجيه المتصفح؛ التطبيق المسجل
قم بإنشاء مُحقق جديد، وحالة، ورمز nonce لكل محاولة. قم بتخزينها في جلسة الخادم الجانبية للمستخدم الذي بدأ العملية. أرسل تحدي SHA-256، وليس المُحقق، في إعادة توجيه المتصفح. اطلب فقط النطاقات التي يحتاجها تطبيقك.
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. التحقق من الاستدعاء#
إذا تم رفض التفويض، تعامل مع خطأ OAuth كإلغاء عادي. وإلا قارن القيمة المُعادة state مع القيمة المحفوظة قبل استخدام الرمز. ارفض الحالة المفقودة أو غير المتطابقة. استخدم الحالة المحفوظة مرة واحدة؛ لا تقبل عناوين URL للاستدعاء التي يتم إرسالها من جلسة متصفح أخرى.
3. استبدال الرمز#
https://auth.shareai.now/oauth/tokenاستبدل رمز الاستخدام الواحد والمحقق المطابق لـ PKCE.
- عنوان URL الأساسي
https://auth.shareai.now- المصادقة
- مصادقة العميل السري
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"
استخدم طريقة مصادقة العميل التي تم تكوينها للعميل. يستخدم المثال مصادقة العميل المستندة إلى النماذج. لا ترسل نفس الرمز مرتين؛ ابدأ التفويض مرة أخرى بعد استهلاك أو انتهاء صلاحية الرمز.
4. تخزين النتيجة وإنشاء جلسة التطبيق الخاصة بك#
قم بتخزين رموز الوصول والتحديث في الواجهة الخلفية الخاصة بك. استخدم expires_in المُعاد بدلاً من افتراض وجود رمز دائم. إذا كنت تستخدم رمز تعريف، تحقق من توقيعه باستخدام JWKS الخاص بالمصدر، المصدر المتوقع، جمهور العميل، انتهاء الصلاحية، ورمز nonce الأصلي الخاص بك قبل الوثوق بالمطالبات.
متابعة دورة الحياة#
التحديث والتدوير · النطاقات وهوية الحساب · طلبات دردشة OAuth
آخر تحديث سبتمبر 15, 2026