OAuth 2.0 و OpenID Connect
طبّق تدفّقات مصادقة آمنة للتطبيقات الحديثة.
فهم التدفّقات
- رمز التفويض (Authorization Code): الأفضل لتطبيقات الخادم
- PKCE: لتطبيقات الصفحة الواحدة والجوال
- بيانات اعتماد العميل (Client Credentials): من آلة إلى آلة
تدفّق رمز التفويض مع PKCE
// Generate code verifier and challenge
function generatePKCE() {
const verifier = crypto.randomBytes(32).toString('base64url');
const challenge = crypto
.createHash('sha256')
.update(verifier)
.digest('base64url');
return { verifier, challenge };
}
// Step 1: Redirect to authorization server
const authUrl = new URL('https://auth.example.com/authorize');
authUrl.searchParams.set('client_id', CLIENT_ID);
authUrl.searchParams.set('redirect_uri', REDIRECT_URI);
authUrl.searchParams.set('response_type', 'code');
authUrl.searchParams.set('scope', 'openid profile email');
authUrl.searchParams.set('code_challenge', challenge);
authUrl.searchParams.set('code_challenge_method', 'S256');
تبادل الرموز (Token Exchange)
// Step 2: Exchange code for tokens
const response = await fetch('https://auth.example.com/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
client_id: CLIENT_ID,
code: authorizationCode,
redirect_uri: REDIRECT_URI,
code_verifier: verifier,
}),
});
const { access_token, id_token, refresh_token } = await response.json();
التحقّق من رموز الهوية (ID Tokens)
import jwt from 'jsonwebtoken';
import jwksClient from 'jwks-rsa';
const client = jwksClient({
jwksUri: 'https://auth.example.com/.well-known/jwks.json'
});
const decoded = jwt.verify(id_token, getKey, {
audience: CLIENT_ID,
issuer: 'https://auth.example.com',
});
تحقّق دائماً من الرموز على الخادم واستخدم HTTPS لجميع اتصالات OAuth.
التعليقات (0)
اترك تعليقًا
لا توجد تعليقات بعد. كن أول من يشارك أفكاره!