انتقل للمحتوى
Rasel Mailمركز المساعدة
الأقسام والأدلة
للمطورين

موافقة المستخدم وPKCE وتبادل الرمز

نفّذ Authorization Code من أول رابط إلى access token.

آخر تحديث تحريري: ٣٠ أكتوبر ٢٠٢٦
في هذا الدليل

المسار الكامل

تطبيق خارجي يطلب الموافقة من راسل ميل، ثم يتبادل الرمز على الخادم.
السر وcode_verifier يظلان عند خادم التطبيق. فتح الصورة
  1. ولّد state عشوائيًا وcode_verifier عشوائيًا آمنًا بطول 43–128 محرفًا URL-safe، ثم challenge باستخدام SHA-256 وBase64URL بدون padding.
  2. احفظ state وverifier مرتبطين بجلسة بدء الربط، ووجّه المستخدم لصفحة التفويض.
  3. المستخدم يسجل الدخول ويختار صندوقه ويوافق أو يرفض. تحقق من state عند callback قبل التعامل مع code أو error.
  4. بادل code من الخادم مع verifier نفسه وredirect_uri نفسه. الرمز قصير العمر ويستخدم مرة واحدة.

مثال توليد رابط التفويض

Node.js — احفظ state وverifier قبل التحويل
import { randomBytes, createHash } from 'node:crypto';
const state = randomBytes(32).toString('base64url');
const verifier = randomBytes(32).toString('base64url');
const challenge = createHash('sha256').update(verifier).digest('base64url');
// Store { state, verifier } in the initiating server-side session.
const url = new URL('https://raselmail.com/oauth/authorize');
url.search = new URLSearchParams({
  response_type: 'code', client_id: 'YOUR_CLIENT_ID',
  redirect_uri: 'https://client.example/oauth/callback',
  scope: 'mail.read', state,
  code_challenge: challenge, code_challenge_method: 'S256',
}).toString();
// Redirect the browser to url.href.

تبادل الرمز من الخادم

Code exchange
curl -i 'https://raselmail.com/api/v1/oauth/token'   -u "$RASEL_CLIENT_ID:$RASEL_CLIENT_SECRET"   --data-urlencode 'grant_type=authorization_code'   --data-urlencode "code=$AUTHORIZATION_CODE"   --data-urlencode 'redirect_uri=https://client.example/oauth/callback'   --data-urlencode "code_verifier=$PKCE_VERIFIER"

لا تنفذ تبادل السر من JavaScript عام في المتصفح. عند access_denied احترم قرار المستخدم. لا تسجل code أو رموز الوصول في السجلات أو عنوان صفحة تحليلات.