استخدام Apache APISIX OpenID Connect Plugin للمصادقة المركزية للهوية

API7.ai

September 7, 2021

Ecosystem

استخدام مكون Apache APISIX OpenID Connect لتكوين مصادقة Okta هو عملية بسيطة من ثلاث خطوات. يتيح لك التحول من وضع المصادقة التقليدية إلى وضع المصادقة المركزية للهوية. تصف الأقسام التالية الخطوات اللازمة لتكوين مصادقة Okta باستخدام مكون OpenID Connect لـ Apache APISIX.

مقارنة بوضع المصادقة التقليدية، يتمتع وضع المصادقة المركزية للهوية بالمزايا التالية:

  1. تبسيط عملية تطوير التطبيقات.
  2. تحسين أمان الأعمال.

المتطلبات الأساسية

يجب أن يكون لديك حساب Okta جاهز للاستخدام.

الخطوة 1: تكوين Okta

  1. سجل الدخول إلى حساب Okta الخاص بك، وانقر على "Create App Integration" لإنشاء تطبيق Okta. إنشاء تكامل تطبيق
  2. اختر "OIDC- OpenID Connect" كطريقة تسجيل الدخول، واختر "Web Application" كنوع التطبيق. إنشاء تكامل تطبيق جديد
  3. قم بتعيين عنوان URL لإعادة التوجيه لتسجيل الدخول والخروج. "Sign-in redirect URIs" هي الروابط المسموح بإعادة توجيهها بعد تسجيل الدخول الناجح، و"Sign-out redirect URIs" هي الروابط التي يتم إعادة توجيهها بعد تسجيل الخروج الناجح. في هذا المثال، قمنا بتعيين كل من عناوين URL لإعادة توجيه تسجيل الدخول والخروج إلى http://127.0.0.1:9080/. تعيين عنوان URL لإعادة التوجيه لتسجيل الدخول والخروج
  4. بعد الانتهاء من الإعدادات، انقر على "Save" لحفظ التغييرات. حفظ التغييرات
  5. قم بزيارة صفحة General للتطبيق للحصول على التكوين التالي، والذي يلزم لتكوين Apache APISIX OpenID Connect.
  • معرف العميل (Client ID): معرف التطبيق، والذي يتوافق مع client_id أدناه.
  • سر العميل (Client secret): مفتاح التطبيق، والذي يتوافق مع client_secret أدناه.
  • نطاق Okta (Okta domain): اسم النطاق المستخدم من قبل التطبيق، والذي يتوافق مع {ISSUER} أدناه.

الحصول على التكوين

الخطوة 2: تثبيت Apache APISIX

تثبيت التبعيات

يتطلب بيئة تشغيل Apache APISIX تبعيات على NGINX و etcd. قبل تثبيت Apache APISIX، يرجى تثبيت التبعيات وفقًا لنظام التشغيل الذي تستخدمه. نوفر تعليمات تثبيت التبعيات لأنظمة CentOS7، Fedora 31 & 32، Ubuntu 16.04 & 18.04، Debian 9 & 10، و MacOS، يرجى الرجوع إلى تثبيت التبعيات لمزيد من التفاصيل.

التثبيت عبر حزمة RPM (CentOS 7)

هذه الطريقة مناسبة لـ CentOS 7، يرجى تشغيل الأمر التالي لتثبيت Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

التثبيت عبر Docker

يرجى الرجوع إلى: تثبيت Apache APISIX باستخدام Docker.

التثبيت عبر Helm Chart

يرجى الرجوع إلى: تثبيت Apache APISIX باستخدام Helm Chart.

التثبيت عبر الإصدار المصدر

  1. قم بإنشاء دليل باسم apisix-2.7.

    mkdir apisix-2.7
    
  2. قم بتنزيل حزمة مصدر Apache APISIX Release.

    wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz
    

    يمكنك أيضًا تنزيل حزمة مصدر Apache APISIX Release من موقع Apache APISIX. يوفر موقع Apache APISIX الرسمي - صفحة التنزيلات أيضًا حزم مصدر لـ Apache APISIX، ولوحة تحكم APISIX و APISIX Ingress Controller.

  3. قم بفك ضغط حزمة مصدر Apache APISIX Release.

    tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
    
  4. قم بتثبيت مكتبات Lua المطلوبة للتشغيل.

    # انتقل إلى دليل apisix-2.7
    cd apisix-2.7
    # إنشاء التبعيات
    make deps
    

تهيئة التبعيات

قم بتشغيل الأمر التالي لتهيئة ملف تكوين NGINX و etcd.

# تهيئة ملف تكوين NGINX و etcd
make init

الخطوة 3: بدء Apache APISIX وتكوين المسار المقابل

  1. قم بتشغيل الأمر التالي لبدء Apache APISIX.

    apisix start
    
  2. قم بإنشاء مسار وتكوين مكون OpenID Connect. يقوم مثال الكود التالي بإنشاء مسار عبر واجهة برمجة تطبيقات Apache APISIX Admin، مع تعيين المسار العلوي إلى httpbin.org، وهي خدمة خلفية بسيطة لاستقبال الطلبات والرد عليها. سيتم استخدام صفحة get من httpbin.org. يرجى الرجوع إلى http bin get لمزيد من المعلومات. بالنسبة لعناصر التكوين المحددة، يرجى الرجوع إلى مكون Apache APISIX OpenID Connect.

يتم سرد حقول تكوين OpenID Connect أدناه:

الحقلالقيمة الافتراضيةالوصف
client_id""معرف عميل OAuth.
client_secret""سر عميل OAuth.
discovery""نقاط نهاية اكتشاف الخدمة لمزودي الهوية.
scopeopenidنطاق الموارد المطلوب الوصول إليها.
relmapisixتحديد معلومات المصادقة في رأس استجابة WWW-Authenticate.
bearer_onlyfalseما إذا كان سيتم التحقق من الرمز المميز في رأس الطلب.
logout_path/logoutمسار تسجيل الخروج.
redirect_urirequest_uriعنوان URI الذي يعيد مزود الهوية التوجيه إليه، ويتم تعيينه افتراضيًا إلى عنوان الطلب.
timeout3وقت انتهاء صلاحية الطلب، يتم تعريف الوحدة بالثواني.
ssl_verifyfalseالتحقق من شهادة SSL لمزود الهوية.
introspection_endpoint""عنوان URL لنقطة نهاية التحقق من الرمز المميز لمزود الهوية، والذي سيتم استخراجه من الاستجابة إذا تم تركه فارغًا.
introspection_endpoint_auth_methodclient_secret_basicاسم طريقة المصادقة للتحقق من الرمز المميز.
public_key""المفتاح العام لرمز المصادقة.
token_signing_alg_values_expected""خوارزمية لرموز المصادقة.
set_access_token_headertrueما إذا كان سيتم حمل رمز الوصول في رأس الطلب.
access_token_in_authorization_headerfalseما إذا كان سيتم وضع رمز الوصول في رأس Authorization. يتم وضع رمز الوصول في رأس Authorization عندما تكون هذه القيمة صحيحة وفي رأس X-Access-Token عندما تكون خاطئة.
set_id_token_headertrueما إذا كان سيتم حمل رمز الهوية في رأس الطلب X-ID-Token.
set_userinfo_headertrueما إذا كان سيتم حمل معلومات المستخدم في رأس الطلب X-Userinfo.
curl  -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
    "uri":"/*",
    "plugins":{
        "openid-connect":{
            "client_id":"{YOUR_CLIENT_ID}",
            "client_secret":"{YOUR_CLIENT_SECRET}",
            "discovery":"https://{YOUR_ISSUER}/.well-known/openid-configuration",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"master",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

التحقق

  1. قم بزيارة "http://127.0.0.1:9080/get" وسيتم إعادة توجيه الصفحة إلى صفحة تسجيل الدخول Okta لأن مكون OpenID Connect مفعل. زيارة صفحة تسجيل الدخول Okta

  2. أدخل اسم المستخدم وكلمة المرور لحساب Okta الخاص بالمستخدم وانقر على "Sign In" لتسجيل الدخول إلى حساب Okta الخاص بك.

  3. بعد تسجيل الدخول الناجح، يمكنك الوصول إلى صفحة get في "httpbin.org". ستقوم صفحة "httpbin.org/get" بإرجاع البيانات المطلوبة مع X-Access-Token، X-Id-Token، و X-Userinfo كما يلي.

    "X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****",
    "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****",
    "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
    

X-Access-Token: يقوم Apache APISIX بوضع رمز الوصول الذي تم الحصول عليه من مزود المستخدم في رأس الطلب X-Access-Token، ويمكن اختيار وضعه في رأس Authorization عبر access_token_in_authorization_header في تكوين المكون.

X-Access-Token

X-Id-Token: سيحصل Apache APISIX على رمز الهوية من مزود المستخدم ويضعه في رأس الطلب X-Id-Token بعد ترميزه بـ Base64، ويمكنك اختيار تفعيل هذه الوظيفة عبر set_id_token_header في تكوين المكون، وهي مفعلة افتراضيًا.

X-Id-Token

X-Userinfo: سيحصل Apache APISIX على معلومات المستخدم من مزود المستخدم ويضعها في X-Userinfo بعد ترميزها بـ Base64، ويمكنك اختيار تفعيل هذه الوظيفة عبر set_userinfo_header في تكوين المكون، وهي مفعلة افتراضيًا.

X-Userinfo

كما ترى، سيحمل Apache APISIX رؤوس الطلبات X-Access-Token، X-Id-Token، و X-Userinfo إلى الخادم العلوي. يمكن للخادم العلوي تحليل هذه الرؤوس للحصول على معلومات هوية المستخدم وبيانات المستخدم.

لقد أظهرنا عملية بناء مصادقة هوية مركزية من Okta مباشرة إلى بوابة Apache APISIX. من السهل التسجيل للحصول على حساب Okta Developer مجاني للبدء. نهجنا يقلل من عبء المطورين ويوفر تجربة آمنة وسلسة.

حول Okta

Okta هو حل قابل للتخصيص وآمن وسهل الإضافة لتوفير خدمات المصادقة والتفويض لتطبيقاتك. احصل على مصادقة قابلة للتوسع مدمجة مباشرة في تطبيقك دون الحاجة إلى عبء التطوير والمخاطر الأمنية والصيانة التي تأتي مع برمجتها بنفسك. يمكنك توصيل أي تطبيق بأي لغة أو على أي منصة بـ Okta وتحديد كيفية تسجيل دخول المستخدمين. في كل مرة يحاول المستخدم المصادقة، سيقوم Okta بالتحقق من هويته وإرسال المعلومات المطلوبة إلى تطبيقك.

حول Apache APISIX

Apache APISIX هو بوابة API ديناميكية وفعالة وعالية الأداء. يوفر Apache APISIX ميزات غنية لإدارة حركة المرور مثل موازنة الحمل، والخادم العلوي الديناميكي، والإصدار التدريجي، وكسر الدائرة، والمصادقة، والمراقبة، والمزيد. يمكنك استخدام Apache APISIX للتعامل مع حركة المرور التقليدية من الشمال إلى الجنوب، وكذلك حركة المرور بين الخدمات من الشرق إلى الغرب. يمكن أيضًا استخدامه كوحدة تحكم دخول k8s.

استخدمت المئات من الشركات حول العالم Apache APISIX، بما في ذلك ناسا، المصنع الرقمي للاتحاد الأوروبي، TravelSky، Tencent، Huawei، Weibo، China Mobile، Taikang، 360، وغيرها.

Github: https://github.com/apache/apisix

الموقع الإلكتروني: https://apisix.apache.org

Tags: