تعرف على التصديق بين تطبيقات Python و Oracle Identity Cloud Service
أنت جاهز للتعرف على التصديق بين تطبيقات ويب Python و Oracle Identity Cloud Service. ويتضمن ذلك فهم ما يلي:
-
استخدم الحالات لاستخدام SDK مع تطبيق Python للتصديق باستخدام Oracle Identity Cloud Service.
-
تدفق التصديق المكون من ثلاث مراحل الذي يدعمه Oracle Identity Cloud Service لـ Python SDK
-
طرق ودوال Python SDK
تعرف على تدفقات التصديق ثلاثية الأبعاد
يدعم Oracle Identity Cloud Service تدفق التصديق المكون من ثلاث مراحل لـ Python SDK. في هذا التدفق ، يتفاعل المستخدمون مباشرة مع Oracle Identity Cloud Service. بعد قيام المستخدم بتسجيل الدخول ، يصدر Oracle Identity Cloud Service رمز اعتماد يخول SDK لمقطع وصول المستخدم. يمكن استخدام مقطع الوصول هذا بواسطة تطبيق Python لمنح المستخدمين حق الوصول إلى الموارد المحمية في التطبيق. يستخدم التدفق المكون من ثلاث مراحل نوع منح رمز الصلاحية.
أما في حالة زيادة التأمين ، فإن Oracle ينصح باستخدام تدفقات ذات امتيازات ثلاثية لتكامل تطبيقات الويب "نظرة عامة" مع Oracle Identity Cloud Service للتصديق. باستخدام نوع منح رمز الاعتماد ، يمكنك أيضًا الوصول إلى التطبيقات الأخرى المحمية بواسطة Oracle Identity Cloud Service دون الحاجة إلى إعادة التصديق.
التعرف على حالات الاستخدام الأساسية لاستخدام SDK مع تطبيق Python
يقوم تطبيق ويب Python بتنفيذ حالتا استخدام: أحدهما للتصديق على المستخدمين والأخرى للوصول إلى معلومات تفصيلية عن المستخدم الذي قام بالدخول.
توضح مخططات تدفق البيانات التالية تدفق الأحداث والمكالمات والاستجابات بين مستعرض الويب وتطبيق الويب Oracle Identity Cloud Service لكل حالة استخدام.
يحدث تدفق البيانات بهذه الطريقة:
-
يطلب المستخدم موردًا محميًا.
-
تستخدم الوحدة النمطية للتصديق SDK لإنشاء عنوان URL لطلب الاعتماد الخاص بـ Oracle Identity Cloud Service وإرسال عنوان URL هذا كاستجابة إعادة التوجيه إلى متصفح الويب.
-
يستدعي مستعرض الويب عنوان URL.
-
تظهر صفحة تسجيل الدخول إلى Oracle Identity Cloud Service.
-
يقوم المستخدم بتقديم بيانات اعتماد تسجيل الدخول إلى Oracle Identity Cloud Service.
-
بعد قيام المستخدم بالدخول بنجاح ، يقوم Oracle Identity Cloud Service بتكوين جلسة عمل للمستخدم وإصدار رمز اعتماد.
-
يقوم تطبيق الويب باستدعاء الخلفية (أو الخادم إلى الخادم) لاستبدال رمز الاعتماد الخاص بمقطع وصول المستخدم.
-
يُصدر Oracle Identity Cloud Service مقطع الوصول.
-
يتم إنشاء جلسة عمل ، وتتم إعادة توجيه المستخدم إلى الصفحة الرئيسية.
-
تظهر الصفحة الرئيسية لتطبيق الويب.
الشكل - استخدام الحالة 2: إحضار بيانات المستخدم

وصف "الشكل - استخدام الحالة 2: إحضار بيانات المستخدم"
يحدث تدفق البيانات بهذه الطريقة:
-
يطلب المستخدم مورد
/myProfile
. -
يستدعي تطبيق الويب Oracle Identity Cloud Service باستخدام SDK ، والذي يستخدم مقطع الوصول المخزن في جلسة عمل المستخدم كمعلمة.
-
يتم إرسال بيانات المستخدم إلى تطبيق الويب ككائن JSON.
-
تقدم صفحة مرجعي كائن JSON كمحتوى HTML.
تعرف على طرق ووظائف Python SDK
تتوفر علامة Python SDK كملفات python ، IdcsClient.py
و Constants.py
، التي يجب تضمينها في تطبيق الويب. تعتمد ملفات النسخ هذه على مكتبات الطرف الثالث التي يجب تضمينها في التطبيق. لتضمين هذه الأوامر ، قم بتشغيل أوامر pip install
:
pip install simplejson==3.13.2 pip install cryptography==2.1.4 pip install PyJWT==1.5.2 pip install requests==2.18.4 pip install six==1.10.0 pip install py3_lru_cache==0.1.6
تم تطوير نموذج تطبيق الويب هذا باستخدام إطار عمل Python DJango، الذي يقوم بتنفيذ توجيهات عنوان URL في شكل وظائف.
يتطلب Python SDK متغير JSON الذي تم تحميله باستخدام معلومات اتصال Oracle Identity Cloud Service. يستخدم تطبيق الويب Python ملف config.json
الذي يوفر المعلومات التالية.
//Oracle Identity Cloud Service connection parameters as a json var { "ClientId" : "clientid", "ClientSecret" : "clientsecret", "BaseUrl" : "https://idcs-1234.identity.oraclecloud.com", "AudienceServiceUrl" : "https://idcs-1234.identity.oraclecloud.com", "TokenIssuer" : "https://identity.oraclecloud.com", "scope" : "urn:opc:idm:t.user.me openid", "redirectURL": "http://localhost:8000/callback", "logoutSufix":"/oauth2/v1/userlogout" }
فيما يلي شرح مختصر لكل سمة مطلوبة لـ SDK:
الجدول - السمات المطلوبة لـ Python SDK
اسم السمة | بيان السمة |
---|---|
ClientId |
قيمة معرف العميل التي يتم إنشاؤها بعد تسجيل تطبيق الويب باستخدام وحدة تحكم Oracle Identity Cloud Service. |
ClientSecret |
قيمة كلمة سر العميل التي يتم إنشاؤها بعد تسجيل تطبيق الويب باستخدام وحدة تحكم Oracle Identity Cloud Service. |
BaseUrl |
عنوان URL للنطاق الخاص بطبعة Oracle Identity Cloud Service. |
AdminServiceUrl |
عنوان URL لاسم النطاق الخاص بطبعة Oracle Identity Cloud Service. وعادة ما يكون هذا هو نفسه BaseUrl .
|
TokenIssuer |
احتفظ بالقيمة كما هي مقدمة هنا. |
scope |
يتحكم المجال في البيانات التي يمكن للتطبيق الوصول إليها أو معالجتها نيابة عن المستخدم. ونظرًا لأن التطبيق يستخدم SDK للتصديق فإن المجال هو openid . كما يقوم التطبيق بتنفيذ حالة استخدام get user details ، والتي يجب عليك استخدام المجال urn:opc:idm:t.user.me .
|
يتم استخدام سمتي logoutSufix
و redirectURL
بواسطة التطبيق. ومن ثم ، لا يتم طلبها بواسطة SDK.
يقوم التطبيق بتنفيذ تعريف وظيفة auth
، والذي يقوم بتخطيط عنوان URL لـ /auth
. عندما يقوم مستخدم بالتصديق مع Oracle Identity Cloud Service، فإن المتصفح يقوم بعمل طلب إلى عنوان URL هذا.
تقوم الدالة auth
بتهيئة مدير التصديق ، باستخدام سمات تكوين JSON كمعلمات ، باستخدام SDK لإنشاء عنوان URL لتعليمات اعتماد Oracle Identity Cloud Service، ثم إعادة توجيه المتصفح إلى عنوان URL هذا.
#Loading the SDK Python file. from . import IdcsClient #Function used to load the configurations from the config.json file def getOptions(): fo = open("config.json", "r") config = fo.read() options = json.loads(config) return options # Definition of the /auth route def auth(request): #Loading the configurations options = getOptions() #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(options) #Using Authentication Manager to generate the Authorization Code URL, passing the #application's callback URL as parameter, along with code value and code parameter. url = am.getAuthorizationCodeUrl(options["redirectURL"], options["scope"], "1234", "code") #Redirecting the browser to the Oracle Identity Cloud Service Authorization URL. return HttpResponseRedirect(url)
تستخدم المعاملات التالية لتكوين URL رمز الصلاحية:
الجدول - المعاملات المستخدمة لتكوين URL رمز الصلاحية
اسم المعامل | بيان المعامل |
---|---|
options["redirectURL"] |
بعد تسجيل الدخول بنجاح ، يقوم Oracle Identity Cloud Service بإعادة توجيه متصفح الويب الخاص بالمستخدم إلى عنوان URL هذا. يجب أن يطابق عنوان URL هذا العنوان الذي ستقوم بتكوينه للتطبيق الموثوق به في وحدة تحكم Oracle Identity Cloud Service. |
options["scope"] |
مجال OAuth أو OpenID Connect الخاص بالتصديق. يتطلب هذا التطبيق تصديق openid فقط.
|
state |
يستخدم تطبيق الويب هذا الرمز للتحقق من إمكانية إنشاء اتصال بـ Oracle Identity Cloud Service. يتم تعريف المعلمة بواسطة بروتوكول OAuth. |
response_type |
القيمة المطلوبة بواسطة نوع منح رمز الاعتماد (على سبيل المثال ، code )
|
تستخدم الدالة callback
معلمة عنوان URL لرمز الاعتماد لطلب مقطع وصول. يتم تخزين مقطع الوصول كملف تعريف ارتباط ، ويتم إرساله إلى المتصفح لاستخدامه في المستقبل.
# Definition of the /callback route def callback(request): code = request.GET.get('code') #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(getOptions()) #Using the Authentication Manager to exchange the Authorization Code to an Access Token. ar = am.authorizationCode(code) #Get the access token as a variable access_token = ar.getAccessToken() #User Manager loaded with the configurations. um = IdcsClient.UserManager(getOptions()) #Using the access_token value to get an object instance representing the User Profile. u = um.getAuthenticatedUser(access_token) #Getting the user details in json object format. displayname = u.getDisplayName() #The application then adds these information to the User Session. request.session['access_token'] = access_token request.session['displayname'] = displayname #Rendering the home page and adding displayname to be printed in the page. return render(request, 'sampleapp/home.html', {'displayname': displayname})
تعمل دالة myProfile
على الوصول إلى مقطع وصول المستخدم ، مع استدعاء دالة getAuthenticatedUser
لاسترجاع معلومات المستخدم كنص JSON ، ثم تقوم بإرسال المعلومات إلى myProfile.html
لتصيير.
# Definition of the /myProfile route def myProfile(request): #Getting the Access Token value from the session access_token = request.session.get('access_token', 'none') if access_token == 'none': #If the access token isn't present redirects to login page. return render(request, 'sampleapp/login.html') else: #If the access token is present, then loads the User Manager with the configurations. am = IdcsClient.UserManager(getOptions()) #Using the access_token value to get an object instance representing the User Profile. u = am.getAuthenticatedUser(access_token) #Getting the user details in json format. jsonProfile = json.dumps(u.getUser()) #Getting User information to send to the My Profile page. displayname = request.session.get('displayname', 'displayname') #Rendering the content of the My Profile Page. return render(request, 'sampleapp/myProfile.html', {'displayname': displayname, 'jsonProfile':jsonProfile})
لتوقيع المستخدم من تسجيل الدخول الموحد بين التطبيق و Oracle Identity Cloud Service، يقوم تطبيق ويب Python بتنفيذ وظيفة logout
. تقوم هذه الدالة بإلغاء صلاحية جلسة عمل المستخدم ثم إعادة توجيه المستخدم إلى عنوان URL الخاص بتسجيل الخروج لـ OAuth في Oracle Identity Cloud Service. تم إعداد عنوان URL هذا في ملف config.json
كمعلمة logoutSufix
.
# Definition of the /logout route def logout(request): options = getOptions() url = options["BaseUrl"] url += options["logoutSufix"] del request.session['access_token'] del request.session['displayname'] return HttpResponseRedirect(url)