في هذه المادة ونحن سوف نواصل رحلتنا مع api التنمية باستخدام Oauth2 كما التفويض. السابق Api التنمية المواد المذكورة أدناه: الصابون مقابل بقية بقية Api فهم OAuth2: على أوث 2.0 إذن تمكن إطار تطبيق طرف ثالث للحصول على محدودية الوصول إلى خدمة HTTP ، عن الموارد مالك. وإليك بعض الروابط التي وجدتها مفيدة: knpuniversity سكرينكست Oauth.net rfc6749 المعايير المقترحة من OAuth2 OAuth2 مع Symfony: Symfony يوفر FOSOAuthServerBundle, والتي يمكن استخدامها من جانب الملقم تنفيذ OAuth2. instructions يمكن العثور عليها هنا. تفويض رمزية طرق “@FOSOAuthServerBundle/Resources/config/routing/authorize.xml” & “@FOSOAuthServerBundle/Resources/config/routing/token.xml” المحددة في التوجيه.yml سيتم استخدام رمز وصول الجيل. وهو أوث Server لديه 3 نقاط. كل نقطة النهاية يؤدي وظيفة متميزة في أوث عملية. يأذن نقطة النهاية – يتم إعادة توجيه المستخدم هنا من قبل العميل أن يأذن طلب. رمز نقطة النهاية – العميل طلبا إلى نقطة النهاية من أجل الحصول على رمز وصول. هذا هو نفس المنوال URL المحدد في routing.yml. الموارد نقطة النهاية(s) – يوفر العميل صالح الرمز المميز للوصول طلب الموارد(s) في النهاية مثل /users.json. أنواع المنح المقدمة في OAuth2: OAuth2 توفر مختلف أنواع المنح. هذه المنحة أنواع تسمح لك لكشف طرق متعددة للعميل لتوليد رمز وصول. 1. رمز ترخيص: رمز ترخيص منح النوع يستخدم عندما يريد العميل طلب الحصول على الموارد المحمية نيابة عن مستخدم آخر (أي 3rd الطرف). قراءة المزيد عن رمز ترخيص على سبيل المثال طلب رموز ترخيص يتم استردادها باستخدام يأذن تحكم. يجب على العميل إرسال المستخدم إلى أوث الخادم يأذن URL. Step 1: أولا إعادة توجيه المستخدم إلى تخويل عنوان URL: /authorize?response_type=code&client_id=ClientId&redirect_uri=https://redirecturi.com/processToken 1 /authorize?response_type=code&client_id=ClientId&redirect_uri=https://redirecturi.com/processToken نجاح الطلب تلقائيا تمرير العميل كود الترخيص في URL (الموردة redirect_uri URL) مثل https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 1 https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz Step 2: بعد هذا المنطلق يمكن طلب استخدام الترخيص رمز من رمز url, $ curl -u ClientId:ClientSecret https://api.mysite.com/token -d 'grant_type=authorization_code&code=xyz' 1 $ curl -u ClientId:ClientSecret https://api.mysite.com/token -d 'grant_type=authorization_code&code=xyz' ناجح رمزي طلب العودة معيار الوصول رمزية في شكل JSON: {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 1 {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 2. كلمة المرور غرانت (الموارد منح مالك) الموارد مالك اسم المستخدم وكلمة المرور المقدمة مع الطلب ، و مميز تصدر بعد المصادقة الناجحة. $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=password&username=demouser&password=pass' 1 $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=password&username=demouser&password=pass' نجاح المصادقة سيؤدي إلى رمز وصول, {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 3. العميل تفويض منح العميل يستخدم بيانات الاعتماد الخاصة بهم إلى استرداد الرمز المميز للوصول مباشرة ، مما يسمح بالوصول إلى الموارد في إطار العميل التحكم $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=client_credentials' {"access_token":"6f05ad622a3d32a5a81aee5d73a5826adb8cbf63","expires_in":3600,"token_type":"bearer","scope":null} 1 $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=client_credentials' {"access_token":"6f05ad622a3d32a5a81aee5d73a5826adb8cbf63","expires_in":3600,"token_type":"bearer","scope":null} Note: رمز وصول إنشاؤها من قبل العميل تفويض منح لا يمكن إلا أن تستخدم لقراءة الموارد. لأن هذا رمز وصول غير مصادقة من قبل المستخدم. 4. تحديث رمز منحة رمز وصول(s) محدودة العمر. لذا نحن بحاجة إلى تحديث انتهت رمزية باستخدام تحديث الرموز المتوفرة مع رموز الوصول المميزة. طلب: $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=refresh_token&refresh_token=c54adab1d99d10bnf8sbe3b77ec32a2e402ef7e3' 1 $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=refresh_token&refresh_token=c54adab1d99d10bnf8sbe3b77ec32a2e402ef7e3' النتيجة على نجاح الطلب: {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} طلب الموارد نقطة النهاية: إذا كنت تطلب تأمين الموارد نقطة النهاية في إطار تأمين api جدار الحماية (fos_oauth: true) دون أي رمز وصول. بعد ذلك سوف يؤدي, { "error": "access_denied", "error_description": "OAuth2 authentication required" } 1234 { "error": "access_denied", "error_description": "OAuth2 authentication required"} طلب تأمين الموارد ، إضافة إذن رأس في طلب $ curl -X GET -H "Authorization: Bearer 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" 1 $ curl -X GET -H "Authorization: Bearer 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" إرجاع البيانات من symfony تحكم: في وحدة تحكم المقابلة الموارد.سلمان العودة البيانات <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpFoundation\Response; // ... class DemoController extends FOSRestController { public function getDemosAction() { $user = $this->get('security.context')->getToken()->getUser(); // Do something with the fully authenticated user. // $json = []; $response = new Response(json_encode($json)); $response->headers->set('Content-Type', 'application/json'); return $response; } } 1234567891011121314151617181920 <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException;use Symfony\Component\HttpFoundation\Response; // ...class DemoController extends FOSRestController{ public function getDemosAction() { $user = $this->get('security.context')->getToken()->getUser(); // Do something with the fully authenticated user. // $json = []; $response = new Response(json_encode($json)); $response->headers->set('Content-Type', 'application/json'); return $response; }} اقتراحات: عودة مناسبة رمز الحالة جنبا إلى جنب مع الرد. بدلا من الاعتماد على رمز حالة HTTP صحيح كما في التعليمات البرمجية الخاصة بك, use constants من رد الدرجة. إذا كنت تستخدم سلمان رد ، ثم استخدام JsonResponse فئة بدلا من Response الدرجة. على سبيل المثال: <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; // ... class DemoController extends FOSRestController { // ... public function getDemosAction() { $user = $this->get('security.context')->getToken()->getUser(); // Do something with the fully authenticated user. // $json = []; return new JsonResponse($json, Response::HTTP_OK); } } 12345678910111213141516171819 <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse; // ...class DemoController extends FOSRestController{ // ... public function getDemosAction() { $user = $this->get('security.context')->getToken()->getUser(); // Do something with the fully authenticated user. // $json = []; return new JsonResponse($json, Response::HTTP_OK); }} ما هو أكثر من ذلك: الآن كنت قد حصلت على منصة لتطوير Api. لذا استمري في وضع واحد. منذ Api هو منصة مستقلة ، بحيث يمكن استهلاكها من قبل أي مناسبة Api العميل. Tag(s) api oauth2 rest uvdesk Category(s) API uvdesk