تعرف على التصديق بين تطبيقات Node.js و Oracle Identity Cloud Service
أنت جاهز للتعرف على التصديق بين تطبيقات ويب Node.js و Oracle Identity Cloud Service. ويتضمن ذلك فهم ما يلي:
-
تدفق التصديق ثلاثي المحطات الذي يدعمه Oracle Identity Cloud Service لـ Node.js SDK
-
استخدام حالات استخدام SDK مع تطبيق Node.js للتصديق مع Oracle Identity Cloud Service
-
طرق ووظائف Node.js SDK
تعرف على تدفقات التصديق ثلاثية الأبعاد
يدعم Oracle Identity Cloud Service تدفق التصديق ثلاثي المحطات لـ Node.js SDK. في هذا التدفق ، يتفاعل المستخدمون مباشرة مع Oracle Identity Cloud Service. بعد قيام المستخدم بتسجيل الدخول ، يصدر Oracle Identity Cloud Service رمز اعتماد يخول SDK لمقطع وصول المستخدم. يستخدم تطبيق الويب Node.js مقطع الوصول هذا لمنح المستخدمين حق الوصول إلى الموارد المحمية في التطبيق. يستخدم التدفق المكون من ثلاث مراحل نوع منح رمز الصلاحية.
لزيادة التأمين ، توصي أوراكل باستخدام التدفق ثلاثي المحطات لتكامل تطبيقات الويب Node.js مع خدمة Oracle Identity Cloud للتصديق. باستخدام نوع منح رمز الاعتماد ، يمكنك أيضًا الوصول إلى التطبيقات الأخرى المحمية بواسطة Oracle Identity Cloud Service دون الحاجة إلى إعادة التصديق.
التعرف على حالات الاستخدام الأساسية لاستخدام SDK مع تطبيق Node.js
يقوم تطبيق الويب Node.js بتنفيذ حالتا استخدام: أحدهما للتصديق على المستخدمين ، والأخرى للوصول إلى معلومات تفصيلية عن المستخدم الذي قام بالدخول.
توضح مخططات تدفق البيانات التالية تدفق الأحداث والمكالمات والاستجابات بين مستعرض الويب وتطبيق الويب Oracle Identity Cloud Service لكل حالة استخدام.
استخدام الحالة #1: تصديق مستخدم
يحدث تدفق البيانات بهذه الطريقة:
-
يطلب المستخدم موردًا محميًا.
-
تستخدم الوحدة النمطية للتصديق 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: الحصول على تفاصيل حول المستخدم
يحدث تدفق البيانات بهذه الطريقة:
-
يطلب المستخدم مورد
/myProfile
. -
يستدعي تطبيق الويب Oracle Identity Cloud Service باستخدام SDK ، والذي يستخدم مقطع الوصول المخزن في جلسة عمل المستخدم كمعلمة.
-
يتم إرسال بيانات المستخدم إلى تطبيق الويب ككائن JSON.
-
تقدم صفحة مرجعي كائن JSON كمحتوى HTML.
تعرف على الطرق والوظائف
تعد Node.js SDK إستراتيجية جواز سفر Node.js التي أضفتها إلى مجلد Node.js modules
. يقوم SDK أيضًا على أساس وعد Node.js. كل تبعيات الطرف الثالث التي تحتاج إلى Node.js SDK في ملف package.json
الخاص بـ SDK. يجب عليك استخدام مجموعة الوحدات هذه على الأقل في تطبيق ويب Node.js الخاص بك.
"dependencies": {
"async": "^2.1.2",
"bunyan": "^1.8.5",
"cache-manager": "^2.2.0",
"json-web-token": "^2.1.3",
"jsonwebtoken": "^7.1.9",
"jwk-to-pem": "^1.2.6",
"jws": "^3.1.4",
"lru": "^3.1.0",
"passport": "^0.3.2",
"promise": "^7.1.1",
"querystring": "^0.2.0",
"request": "^2.79.0",
"rsa-pem-to-jwk": "^1.1.3",
"util": "^0.10.3"
},
تم تطوير تطبيق ويب Node.js باستخدام الوحدات النمطية Node.js express
و&express-handlebars
، التي تنفذ توجيهات URL في شكل دالة app.get()
لكل عنوان URL.
يتطلب Node.js SDK متغير JSON تم تحميله باستخدام معلومات اتصال Oracle Identity Cloud Service. يستخدم تطبيق الويب Node.js متغير ids
لتخزين هذه المعلومات:
var ids = {
oracle: {
"ClientId": '123456789abcdefghij',
"ClientSecret": 'abcde-12345-zyxvu-98765-qwerty',
"ClientTenant": 'idcs-abcd1234',
"IDCSHost": 'https://%tenant%.identity.oraclecloud.com',
"AudienceServiceUrl" : 'https://idcs-abcd1234.identity.oraclecloud.com',
"TokenIssuer": 'https://identity.oraclecloud.com/',
"scope": 'urn:opc:idm:t.user.me openid',
"logoutSufix": '/oauth2/v1/userlogout',
"redirectURL": 'http://localhost:3000/callback'
}
};
module.exports = ids;
فيما يلي شرح مختصر لكل سمة مطلوبة لـ SDK:
الاسم | البيان |
---|---|
ClientId |
قيمة معرف العميل التي يتم إنشاؤها بعد تسجيل تطبيق ويب Node.js في وحدة تحكم Identity Cloud Service. |
ClientSecret |
قيمة كلمة سر العميل التي يتم إنشاؤها بعد تسجيل تطبيق ويب Node.js في وحدة تحكم Identity Cloud Service. |
ClientTenant |
بادئة النطاق لطبعة Oracle Identity Cloud Service. عادة ما تكون هذه البادئة مماثلة لـ idcs-abcd1234 .
|
IDCSHost |
لاحقة النطاق لطبعة Oracle Identity Cloud Service. في وقت التشغيل ، يتم استبدال متغير التعويض %المقيم بالنسبة لقيمة سمة ClientTenant. |
AudienceServiceUrl |
عنوان URL لاسم النطاق المؤهل بالكامل لطبعة Oracle Identity Cloud Service. |
TokenIssuer |
بالنسبة لهذه السمة ، توصي Oracle بالاحتفاظ بالقيمة https://identity.oraclecloud.com/ .
|
scope |
يتحكم المجال في البيانات التي يمكن للتطبيق الوصول إليها أو معالجتها نيابة عن مستخدم Oracle Identity Cloud Service. إذا استخدم التطبيق SDK لتصديق مستخدم ، يكون المجال هو |
يستخدم التطبيق كل من سمتي logoutSufix
و redirectURL
. لا تتطلب SDK أي منها.
يقوم تطبيق Node.js بتنفيذ توجيه عنوان URL لـ /oauth/oracle
. عندما يقرر المستخدم التصديق مع Oracle Identity Cloud Service، يقوم متصفح الويب بعمل طلب إلى عنوان URL هذا. يستخدم هذا التوجيه SDK لتكوين URL للاعتماد الخاص بـ Oracle Identity Cloud Service.
//Loading the configurations
var auth = require('./auth.js');
//Route for /oauth/oracle
app.get("/auth/oracle", function(req, res){
//Authentication Manager loaded with the configurations.
am = new IdcsAuthenticationManager(auth.oracle);
//Using Authentication Manager to generate the Authorization Code URL, passing the
//application's callback URL as parameter, along with code value and code parameter.
am.getAuthorizationCodeUrl(auth.oracle.redirectURL, auth.oracle.scope, "1234", "code")
.then(function(authZurl){
//Redirecting the browser to the Oracle Identity Cloud Service Authorization URL.
res.redirect(authZurl);
}).catch(function(err){
res.end(err);
})
});
تقوم هذه الدالة بتحميل معلمات JSON إلى متغير ، مع تهيئة مدير التصديق ، واستخدام دالة IdcsAuthenticationManager.getAuthorizationCodeUrl()
في Node.js SDK لإنشاء عنوان URL لرمز الاعتماد. تستخدم هذه الدالة "الوعد" إما لإعادة توجيه متصفح الويب للمستخدم عند إنشاء عنوان URL لرمز الاعتماد أو لعرض خطأ في المتصفح.
تستخدم المعاملات التالية لتكوين URL رمز الصلاحية:
الاسم | البيان |
---|---|
auth.oracle.redirectURL |
بعد قيام المستخدم بتسجيل الدخول ، يقوم Oracle Identity Cloud Service بإعادة توجيه مستعرض الويب الخاص بالمستخدم إلى عنوان URL هذا. يجب أن يتطابق عنوان URL هذا مع العنوان الذي ستقوم بتكوينه للتطبيق الموثوق به في وحدة تحكم Identity Cloud Service. يرجى الاطلاع على تسجيل تطبيق Node.js لمزيد من المعلومات حول تحديد عنوان URL لإعادة التوجيه لتطبيق ويب Node.js. |
auth.oracle.scope |
مجال OAuth أو OpenID Connect الخاص بالتصديق. يتطلب هذا التطبيق تصديق openid فقط.
|
state |
يقوم بروتوكول OAuth بتعريف هذه المعلمة. يستخدم تطبيق ويب Node.js هذا الرمز للتحقق من إمكانية إنشاء اتصال بـ Oracle Identity Cloud Service. على سبيل المثال ، قيمة هذه المعلمة هي 1234 .
|
response_type |
المعامل المطلوب بواسطة نوع منح رمز الصلاحية. على سبيل المثال ، قيمة هذه المعلمة هي code .
|
بعد قيام المستخدم بتسجيل الدخول ، يقوم Oracle Identity Cloud Service بإعادة توجيه مستعرض الويب الخاص بالمستخدم إلى عنوان URL للاستدعاء ، والذي يجب على المطور تنفيذه. يستخدم تطبيق الويب Node.js توجيه /callback
لمعالجة هذا الطلب.
//Route for /callback
app.get("/callback", function(req,res){
//Authentication Manager loaded with the configurations.
var am = new IdcsAuthenticationManager(auth.oracle);
//Getting the authorization code from the "code" parameter
var authZcode = req.query.code;
//Using the Authentication Manager to exchange the Authorization Code to an Access Token.
am.authorizationCode(authZcode)
.then(function(result){
//Getting the Access Token Value.
res.cookie(config.IDCS_COOKIE_NAME, result.access_token);
res.redirect('/auth.html');
}).catch(function(err){
res.end(err);
})
});
يستخدم تطبيق Node.js رمز الاعتماد لطلب مقطع وصول. يتم تخزين مقطع الوصول كملف تعريف ارتباط ، ويتم إرساله بعد ذلك إلى متصفح الويب للاستخدام في المستقبل.
كما تستخدم دالة IdcsAuthenticationManager.authorizationCode()
في Node.js SDK أيضًا الوعد (جملة التجميع تلك) لتعيين مقطع الوصول كملف تعريف ارتباط ، ولإعادة توجيه المتصفح إلى صفحة /auth.html
.
يستند Node.js SDK إلى إطار عمل جواز سفر Node.js. وبالتالي ، يتعين عليك إعادة توجيه مقطع الوصول كمتغير رأس إلى مرجع عنوان URL الخاص بـ /auth
، واستخدام أسلوب passport.authenticate()
مع اسم إستراتيجية Oracle Identity Cloud Service كمعلمة:
//Uses passport to create a User Session in Node.js.
//Passport sets a user attribute in the request as a json object.
app.get('/auth', passport.authenticate(config.IDCS_STRATEGY_NAME, {}), function(req, res) {
res.redirect('/home');
});
بعد أن يقوم أسلوب passport.authenticate()
بتكوين جلسة عمل التطبيق ، تقوم الدالة بإعادة توجيه متصفح ويب المستخدم إلى عنوان URL محمي في تطبيق /home
. بالإضافة إلى /home
، يشتمل تطبيق ويب Node.js على ثلاثة عناوين URL محمية أخرى: /
appDetails و /
userInfo و /myProfile
.
تحتاج كل عنوان URL محمي إلى التحقق مما إذا كانت جلسة عمل المستخدم قد تم تكوينها مسبقًا. يتم استخدام الدالة التالية بواسطة كل دالة app.get()
لهذه URLs.
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login')
}
يعالج تطبيق Node.js توجيه /myProfile
ويحصل على المعلومات التي تم تعيينها في جلسة العمل بواسطة طريقة passport.authenticate()
، كما يلي:
app.get("/myProfile", ensureAuthenticated, function(req,res){
//User Manager loaded with the configurations
var um = new IdcsUserManager(auth.oracle);
//Using the user id in the request attribute to render the user json in the screen.
um.getUser(req.user.id)
.then(function(user){
res.render('myProfile', {
layout: 'privateLayout',
title: 'My Profile',
user: req.user,
userInfo: JSON.stringify(user, null, 2)
});
}).catch(function(err1){
res.end(err1);
})
});
بعد تهيئة كائن UserManager
، يستخدم مرجع توجيه /myProfile
دالة IdcsUserManager.getUser()
الخاصة بـ SDK للحصول على كائن JSON الذي يمثل ملف تعريف المستخدم. يرسل التطبيق كائن JSON إلى ملف myProfile.handlebars
لعرضه في متصفح الويب.
لتوقيع المستخدم من الدخول الموحد بين التطبيق و Oracle Identity Cloud Service ، يقوم تطبيق ويب Node.js بتنفيذ توجيه /logout
، كما يلي:
app.get('/logout', function(req, res){
req.logout();
res.clearCookie();
res.redirect(auth.oracle.IDCSHost + auth.oracle.logoutSufix);
});
يقوم هذا المسار بإلغاء صلاحية جلسة عمل التطبيق ، وإزالة أية ملفات تعريف ارتباط تم تعيينها سابقًا ، ثم إعادة توجيه متصفح الويب الخاص بالمستخدم إلى عنوان URL للخروج من OAuth الخاص بـ Oracle Identity Cloud Service. يتم إعداد عنوان URL هذا في كائن تكوين JSON.