تعرف على التصديق بين تطبيقات 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 لكل حالة استخدام.

الشكل - استخدام حالة 1: تصديق المستخدم

فيما يلي وصف للشكل -
وصف "الشكل - استخدام الحالة 1: تصديق المستخدم"

يحدث تدفق البيانات بهذه الطريقة:

  1. يطلب المستخدم موردًا محميًا.

  2. تستخدم الوحدة النمطية للتصديق SDK لإنشاء عنوان URL لطلب الاعتماد الخاص بـ Oracle Identity Cloud Service وإرسال عنوان URL هذا كاستجابة إعادة التوجيه إلى متصفح الويب.

  3. يستدعي مستعرض الويب عنوان URL.

  4. تظهر صفحة تسجيل الدخول إلى Oracle Identity Cloud Service.

  5. يقوم المستخدم بتقديم بيانات اعتماد تسجيل الدخول إلى Oracle Identity Cloud Service.

  6. بعد قيام المستخدم بالدخول بنجاح ، يقوم Oracle Identity Cloud Service بتكوين جلسة عمل للمستخدم وإصدار رمز اعتماد.

  7. يقوم تطبيق الويب باستدعاء الخلفية (أو الخادم إلى الخادم) لاستبدال رمز الاعتماد الخاص بمقطع وصول المستخدم.

  8. يُصدر Oracle Identity Cloud Service مقطع الوصول.

  9. يتم إنشاء جلسة عمل ، وتتم إعادة توجيه المستخدم إلى الصفحة الرئيسية.

  10. تظهر الصفحة الرئيسية لتطبيق الويب.

الشكل - استخدام الحالة 2: إحضار بيانات المستخدم

فيما يلي وصف للشكل -
وصف "الشكل - استخدام الحالة 2: إحضار بيانات المستخدم"

يحدث تدفق البيانات بهذه الطريقة:

  1. يطلب المستخدم مورد /myProfile.

  2. يستدعي تطبيق الويب Oracle Identity Cloud Service باستخدام SDK ، والذي يستخدم مقطع الوصول المخزن في جلسة عمل المستخدم كمعلمة.

  3. يتم إرسال بيانات المستخدم إلى تطبيق الويب ككائن JSON.

  4. تقدم صفحة مرجعي كائن 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)