Skip to content

Commit 3fd7993

Browse files
authored
feat: add protected resource metadata wiki (#114)
1 parent de8cf89 commit 3fd7993

13 files changed

+2899
-0
lines changed
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
---
2+
title: بيانات الموارد المحمية (Protected Resource Metadata)
3+
tags: [oauth 2.0]
4+
description: بيانات الموارد المحمية في OAuth 2.0 هي تنسيق موحد يمكّن عملاء OAuth 2.0 وخوادم التفويض من الحصول على المعلومات اللازمة للتفاعل مع الموارد المحمية في OAuth 2.0.
5+
---
6+
7+
## ما هي بيانات الموارد المحمية في OAuth 2.0؟
8+
9+
بيانات الموارد المحمية في OAuth 2.0 هي تنسيق موحد تم تعريفه في [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728). يساعد العملاء وخوادم التفويض على فهم كيفية التفاعل مع الموارد المحمية.
10+
11+
يوفر هذا التنسيق للبيانات معلومات أساسية حول:
12+
- قدرات خادم الموارد
13+
- تنسيقات الرموز المدعومة
14+
- الآليات الأمنية المطلوبة
15+
- علاقات خادم التفويض
16+
- النطاقات والأذونات المتاحة
17+
18+
## ما هي فوائد بيانات الموارد المحمية؟
19+
20+
في نظام OAuth 2.0، هناك أربعة أدوار أساسية:
21+
- <Ref slug="authorization-server"/>: يصدر رموز الوصول للعملاء بعد التحقق بنجاح من مالك المورد
22+
- <Ref slug="client"/>: تطبيق يطلب الوصول إلى الموارد المحمية
23+
- <Ref slug="resource-owner"/>: كيان قادر على منح الوصول إلى الموارد المحمية
24+
- <Ref slug="resource-server"/>: خادم يستضيف الموارد المحمية
25+
26+
تقليديًا، عندما يحتاج العميل إلى الوصول إلى الموارد المحمية، يجب عليه أولاً اكتشاف والتفاعل مع خادم التفويض للحصول على الرموز اللازمة. كان دور خادم الموارد يقتصر بشكل أساسي على التحقق من الرموز وتقديم الموارد، مع تنسيق جميع تفاصيل التحقق والتفويض من خلال خادم التفويض وتطبيق العميل.
27+
28+
هذا يعني أن العملاء لم يكن لديهم طريقة موحدة لاكتشاف متطلبات أو قدرات خادم الموارد مباشرة.
29+
30+
تحول بيانات الموارد المحمية هذه الديناميكية من خلال تمكين خوادم الموارد من نشر متطلباتها وقدراتها بنشاط، وتقدم عدة فوائد رئيسية:
31+
- الاكتشاف المباشر: يمكن للعملاء الآن معرفة متطلبات خادم الموارد مباشرة من المصدر
32+
- تعزيز الاستقلالية: يمكن لخوادم الموارد تحديد تنسيقات الرموز المدعومة، والآليات الأمنية، وخوادم التفويض الموثوقة بشكل صريح
33+
- تحسين التوافق: يضمن التنسيق الموحد التواصل المتسق لمتطلبات الوصول عبر تطبيقات مختلفة
34+
- التكوين الديناميكي: يمكن لخوادم الموارد تحديث متطلباتها دون الاعتماد على تغييرات خادم التفويض
35+
36+
## كيف تعمل بيانات الموارد المحمية في OAuth 2.0؟
37+
38+
تعمل بيانات الموارد المحمية ضمن نظام OAuth 2.0 من خلال عملية اكتشاف وتفاعل موحدة:
39+
40+
```mermaid
41+
sequenceDiagram
42+
participant C as Client
43+
participant RS as Resource Server
44+
participant AS as Authorization Server
45+
autonumber
46+
47+
C->>RS: طلب مورد بدون رمز وصول
48+
RS-->>C: WWW-Authenticate (401 Unauthorized)
49+
C->>RS: جلب بيانات RS
50+
RS-->>C: استجابة بيانات RS
51+
52+
Note over C: تحقق من بيانات RS، بناء URL بيانات AS
53+
54+
C->>AS: جلب بيانات AS
55+
AS-->>C: استجابة بيانات AS
56+
57+
Note over C,AS: تنفيذ تدفق تفويض OAuth ويحصل العميل على رمز الوصول
58+
59+
C->>RS: طلب مورد مع رمز الوصول
60+
RS-->>C: استجابة المورد
61+
```
62+
63+
وثيقة بيانات خادم الموارد هي كائن JSON يحتوي على الحقول التالية:
64+
65+
```json
66+
{
67+
"resource": "https://api.example.com",
68+
"authorization_servers": [
69+
"https://auth.example.com"
70+
],
71+
"scopes_supported": ["read", "write"],
72+
"token_formats_supported": ["jwt"],
73+
"token_introspection_endpoint": "https://api.example.com/introspect",
74+
"dpop_signing_alg_values_supported": ["ES256", "PS256"]
75+
}
76+
```
77+
78+
وبمجرد أن يتلقى العميل وثيقة البيانات، يمكنه استخدامها لتكوين نفسه والتفاعل مع خادم الموارد بشكل رئيسي وفقًا للحقول التالية:
79+
80+
- `resource`: معرف المورد المحمي
81+
- `authorization_servers`: قائمة بخوادم التفويض المصرح بها
82+
- `scopes_supported`: النطاقات المتاحة لهذا المورد
83+
- `token_formats_supported`: تنسيقات الرموز المدعومة
84+
- `token_introspection_endpoint`: نقطة النهاية للتحقق من صحة الرموز
85+
- `dpop_signing_alg_values_supported`: خوارزميات DPoP المدعومة
86+
87+
## كيف تكتشف نقاط نهاية بيانات الموارد المحمية في OAuth 2.0؟
88+
89+
هناك آليتان رئيسيتان لاكتشاف بيانات الموارد المحمية:
90+
91+
1. **اكتشاف رأس WWW-Authenticate (المستند إلى التدفق)**:
92+
93+
عندما يقوم العميل بإجراء طلب غير مصرح به لمورد محمي، يستجيب الخادم برمز حالة 401 ويتضمن URL البيانات في رأس WWW-Authenticate:
94+
95+
```bash
96+
# 1. يقوم العميل بإجراء طلب بدون رمز
97+
GET /api/resource HTTP/1.1
98+
Host: api.example.com
99+
100+
# 2. يستجيب الخادم بـ 401 و URL البيانات
101+
HTTP/1.1 401 Unauthorized
102+
WWW-Authenticate: Bearer realm="example",
103+
scope="read write",
104+
resource_metadata_url="https://api.example.com/.well-known/oauth-resource-server"
105+
```
106+
107+
يوفر الرأس:
108+
- تعريف نطاق المورد
109+
- النطاقات المطلوبة
110+
- موقع URL البيانات
111+
112+
2. **اكتشاف URI المباشر المعروف جيدًا**:
113+
114+
يمكنك الوصول مباشرة إلى البيانات عن طريق إجراء طلب GET إلى نقطة النهاية المعروفة جيدًا:
115+
116+
```bash
117+
GET /.well-known/oauth-resource-server HTTP/1.1
118+
Host: api.example.com
119+
```
120+
121+
تتبع نقطة النهاية تنسيقًا موحدًا:
122+
- URI الأساسي: `https://api.example.com`
123+
- المسار المعروف جيدًا: `/.well-known/oauth-resource-server`
124+
- URL الكامل: `https://api.example.com/.well-known/oauth-resource-server`
125+
126+
## كيف يعمل رأس WWW-Authenticate في بيانات الموارد المحمية؟
127+
128+
يعد رأس WWW-Authenticate مكونًا رئيسيًا في بيانات الموارد المحمية لتنفيذ آلية الاكتشاف التلقائي. يستفيد من رأس HTTP القياسي `WWW-Authenticate` لنقل معلومات البيانات، مما يمكّن العملاء من اكتشاف وتكوين متطلبات الوصول تلقائيًا لخوادم الموارد.
129+
130+
عندما يحاول العميل لأول مرة الوصول إلى مورد محمي دون تقديم رمز وصول، يستجيب خادم الموارد برمز حالة 401 Unauthorized ويتضمن رأس WWW-Authenticate:
131+
132+
```
133+
WWW-Authenticate: Bearer realm="example",
134+
scope="read write",
135+
resource_metadata_url="https://api.example.com/.well-known/oauth-resource-server"
136+
```
137+
138+
قد يحتوي هذا الرأس على عدة قطع رئيسية من المعلومات:
139+
- `Bearer`: يشير إلى أن هذا هو نظام مصادقة رمز OAuth 2.0 Bearer
140+
- `realm`: يحدد مساحة الحماية للمورد
141+
- `scope`: يحدد الأذونات المطلوبة للوصول
142+
- `resource_metadata_url`: يشير إلى موقع وثيقة البيانات التي تحتوي على تكوين خادم الموارد الكامل
143+
144+
عند تلقي هذا الرأس، يستخرج العميل `resource_metadata_url` ويسترجع وثيقة البيانات الكاملة من ذلك URL.
145+
146+
بناءً على معلومات البيانات التي تم الحصول عليها، يمكن للعميل تحديد خوادم التفويض المناسبة، تنسيقات الرموز المدعومة، النطاقات المتاحة، وتفاصيل التكوين الأخرى لتكوين طلبات التحقق بشكل صحيح.
147+
148+
## كيف تؤمن بيانات الموارد المحمية في OAuth 2.0؟
149+
150+
تشمل الاعتبارات الأمنية الأساسية:
151+
152+
1. **أمان النقل**:
153+
- استخدام TLS إلزامي
154+
- التحقق من الشهادات
155+
- معالجة الاتصال الآمن
156+
157+
2. **سلامة البيانات**:
158+
- التحقق من المصدر
159+
- التحقق من التوقيع
160+
- استراتيجيات التخزين المؤقت الآمنة
161+
162+
3. **التحكم في الوصول**:
163+
- تحديد معدل الوصول
164+
- التحقق من الطلبات
165+
- مراقبة الإساءة
166+
167+
## كيف تنفذ بيانات الموارد المحمية في OAuth 2.0؟
168+
169+
إليك كيفية تنفيذ بيانات الموارد المحمية في OAuth 2.0 عبر المكونات المختلفة:
170+
171+
1. **تنفيذ خادم الموارد**
172+
173+
يستجيب خادم الموارد بحالة 401 Unauthorized ويتضمن URL البيانات في رأس WWW-Authenticate عند تلقي محاولة وصول غير مصرح بها:
174+
175+
```
176+
HTTP/1.1 401 Unauthorized
177+
WWW-Authenticate: Bearer realm="example",
178+
resource_metadata_url="https://api.example.com/.well-known/oauth-resource-server"
179+
```
180+
181+
2. **تنفيذ العميل**
182+
183+
ينفذ العميل وظيفة غير متزامنة للتعامل مع الوصول إلى الموارد. عند تلقي استجابة 401، تستخرج هذه الوظيفة URL البيانات من رأس WWW-Authenticate، وتجلب البيانات، وتستخدمها لتكوين العميل:
184+
185+
```javascript
186+
async function handleResourceAccess(response) {
187+
if (response.status === 401) {
188+
const wwwAuthenticate = response.headers.get('WWW-Authenticate');
189+
const metadataUrl = extractMetadataUrl(wwwAuthenticate);
190+
const metadata = await fetchMetadata(metadataUrl);
191+
// تكوين العميل بناءً على البيانات
192+
}
193+
}
194+
```
195+
196+
3. **هيكل وثيقة البيانات**
197+
198+
يوفر خادم الموارد وثيقة بيانات ككائن JSON يحتوي على:
199+
- معرف المورد
200+
- قائمة بخوادم التفويض المصرح بها
201+
- النطاقات المدعومة
202+
- تنسيقات الرموز المدعومة
203+
- خوارزميات توقيع DPoP المدعومة
204+
205+
إليك مثال على وثيقة البيانات:
206+
207+
```json
208+
{
209+
"resource": "https://api.example.com",
210+
"authorization_servers": ["https://auth.example.com"],
211+
"scopes_supported": ["read", "write"],
212+
"token_formats_supported": ["jwt"],
213+
"dpop_signing_alg_values_supported": ["ES256"]
214+
}
215+
```
216+
217+
تعمل هذه المكونات معًا لتشكيل تنفيذ كامل لبيانات الموارد المحمية في OAuth 2.0. من خلال هذا التنفيذ، يمكن للعملاء اكتشاف وتكوين المعلمات اللازمة للوصول إلى الموارد المحمية تلقائيًا.
218+
219+
<SeeAlso slugs={["resource-server", "authorization-server"]} />
220+
221+
<Resources urls={[
222+
"https://datatracker.ietf.org/doc/html/rfc9728",
223+
]} />

0 commit comments

Comments
 (0)