|
| 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