برنامه نویسی

با OpenID Connect و Apache APISIX احراز هویت

بسیاری از شرکت‌ها مشتاق هستند تا ارائه‌دهنده هویت خود را ارائه دهند: توییتر، فیس‌بوک، گوگل و غیره. برای کسب‌وکارهای کوچک‌تر، عدم مدیریت هویت یک مزیت است. با این حال، ما می خواهیم از قفل شدن در یک ارائه دهنده جلوگیری کنیم. در این پست، می‌خواهم نحوه استفاده از OpenID Connect را با استفاده از گوگل زیر نمایش دهم و سپس به Azure تغییر دهید.

اتصال OpenID

ایده یک مجوز استاندارد باز با OAuth در حدود سال 2006 شروع شد. به دلیل یک مشکل امنیتی، OAuth 2.0 جایگزین نسخه اولیه شد. OAuth 2.0 تبدیل به یک شد IETF RFC در سال 2012:

چارچوب مجوز OAuth 2.0 یک شخص ثالث را فعال می کند
برنامه برای دسترسی محدود به یک سرویس HTTP، یا در
از طرف مالک منبع با هماهنگ کردن یک تعامل تایید
بین مالک منبع و سرویس HTTP یا با اجازه دادن به
برنامه شخص ثالث برای به دست آوردن دسترسی از طرف خود

– RFC 7469 – چارچوب مجوز OAuth 2.0

OAuth بیشتر بر روی مجوز;
را احراز هویت بخش بسیار سبک است:
این شامل یک بخش در مورد احراز هویت رمز عبور مشتری و یک روش دیگر احراز هویت است.

سرور مجوز ممکن است از هر گونه احراز هویت مناسب HTTP پشتیبانی کند
طرحی که با الزامات امنیتی آن مطابقت دارد. هنگام استفاده از دیگر
روش های احراز هویت، سرور مجوز باید a را تعریف کند
نگاشت بین شناسه مشتری (رکورد ثبت نام) و
طرح احراز هویت

— 2.3.2. سایر روش های احراز هویت

OpenID Connect از OAuth 2.0 استفاده می کند و اضافه می کند احراز هویت بخش:

OpenID Connect 1.0 یک لایه هویت ساده در بالای پروتکل OAuth 2.0 است. این به مشتریان اجازه می دهد تا هویت کاربر نهایی را بر اساس احراز هویت انجام شده توسط یک سرور مجوز تأیید کنند، و همچنین اطلاعات نمایه اولیه در مورد کاربر نهایی را به شیوه ای متقابل و مشابه REST به دست آورند.

OpenID Connect به مشتریان از انواع مختلف، از جمله کلاینت‌های مبتنی بر وب، تلفن همراه و جاوا اسکریپت اجازه می‌دهد تا اطلاعاتی درباره جلسات تأیید شده و کاربران نهایی درخواست و دریافت کنند. مجموعه مشخصات قابل توسعه است و به شرکت‌کنندگان اجازه می‌دهد تا از ویژگی‌های اختیاری مانند رمزگذاری داده‌های هویت، کشف ارائه‌دهندگان OpenID، و خروج از سیستم، زمانی که برایشان منطقی است، استفاده کنند.

— OpenID Connect چیست؟

در اینجا چند ارائه دهنده هویت که با OpenID Connect سازگار هستند آورده شده است:

  • GitHub
  • گوگل
  • مایکروسافت
  • سیب
  • فیس بوک
  • توییتر
  • Spotify

در ادامه، ما با گوگل شروع می کنیم و به Azure می رویم تا تنظیمات خود را تأیید کنیم.

راه اندازی OpenID Connect با Apache APISIX

تصور کنید ما یک برنامه وب پشت Apache APISIX داریم که می‌خواهیم با OpenID Connect ایمن کنیم. در اینجا فایل Docker Compose مربوطه آمده است:

version: "3"

services:
  apisix:
    image: apache/apisix:3.1.0-debian                              #1
    ports:
      - "9080:9080"
    volumes:
      - ./apisix/config.yml:/usr/local/apisix/conf/config.yaml:ro  #2
      - ./apisix/apisix.yml:/usr/local/apisix/conf/apisix.yaml:ro  #3
    env_file:
      - .env
  httpbin:
    image: kennethreitz/httpbin                                    #4
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. Apache APISIX API Gateway
  2. پیکربندی APISIX – برای پیکربندی استاتیک آن در خط زیر استفاده می شود
  3. مسیر واحد را پیکربندی کنید
  4. برنامه وب برای محافظت هر انجام خواهد داد

Apache APISIX معماری مبتنی بر پلاگین را ارائه می دهد. یکی از این پلاگین ها پلاگین openid-connect است که امکان استفاده از OpenID Connect را می دهد.

بیایید آن را پیکربندی کنیم:

routes:
  - uri: /*                                                                    #1
    upstream:
      nodes:
        "httpbin:80": 1                                                        #1
    plugins:
      openid-connect:
        client_id: ${{OIDC_CLIENTID}}                                          #2
        client_secret: ${{OIDC_SECRET}}                                        #2
        discovery: https://${{OIDC_ISSUER}}/.well-known/openid-configuration   #2#3
        redirect_uri: http://localhost:9080/callback                           #4
        scope: openid                                                          #5
        session:
          secret: ${{SESSION_SECRET}}                                          #6
#END
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. مسیر همه جانبه به برنامه وب زیرین
  2. پارامترهای پیکربندی پلاگین مقادیر به ارائه دهنده دقیق بستگی دارد (به زیر مراجعه کنید)
  3. OpenID Connect می‌تواند از یک نقطه پایانی Discovery برای دریافت تمام نقاط پایانی OAuth استفاده کند. برای اطلاعات بیشتر به مشخصات OpenID Connect Discovery 1.0 مراجعه کنید
  4. در صورت موفقیت آمیز بودن احراز هویت به کجا تغییر مسیر دهیم. نباید با هیچ یک از مسیرهای مشخص شده در تضاد باشد. این افزونه یک مسیر اختصاصی در آنجا ایجاد می کند تا جادوی خود را انجام دهد.
  5. محدوده پیش فرض
  6. کلید رمزگذاری داده های جلسه هر چی میخوای بذار

پیکربندی Google برای OIDC

مانند همه ارائه دهندگان ابر، گوگل یک راه حل کامل مدیریت هویت ارائه می دهد که ممکن است برای تازه واردان دلهره آور باشد. در این بخش، من فقط مراحل لازم برای پیکربندی آن را شرح می دهم OIDC.

در Cloud Console، یک پروژه اختصاصی ایجاد کنید (یا از یک موجود استفاده کنید).

اگر قبلاً این کار را انجام نداده‌اید، صفحه رضایت OAuth را سفارشی کنید.

در زمینه پروژه، پیمایش کنید API ها و خدمات | اعتبارنامه.

Google Cloud - منوی اعتبار

سپس، را فشار دهید + اعتبارنامه ایجاد کنید دکمه در نوار منوی بالایی.

Google Cloud - دکمه ایجاد اعتبار

انتخاب کنید شناسه مشتری OAuth در منوی پیمایش

Google Cloud - نوع اعتبارنامه را انتخاب کنید

فیلدها را پر کنید:

  • نوع برنامه: اپلیکیشن تحت وب
  • نام: هر چه شما بخواهید
  • URIهای مجاز تغییر مسیر: <URL>/callback، به عنوان مثال، http://localhost:9080/callback

Google Cloud - شناسه مشتری OAuth ایجاد کنید

URL باید آدرس وب اپلیکیشن باشد. به همین ترتیب، /callback باید مطابقت داشته باشد openid-connect پیکربندی افزونه در بالا توجه داشته باشید که گوگل URL های نسبی را مجاز نمی کند، بنابراین اگر نیاز به استفاده مجدد از برنامه در محیط های مختلف دارید، باید URL هر محیط را اضافه کنید. کلیک کنید بر روی ايجاد كردن دکمه.

Google Cloud - مشتری OAuth ایجاد شد

در پیکربندی Docker Compose بالا، از Client ID و Client Secret as استفاده کنید OIDC_CLIENTID و OIDC_SECRET. من آنها را به عنوان متغیرهای محیطی در a یادداشت کردم .env فایل.

آخرین متغیر گم شده است OIDC_ISSUER: این است accounts.google.com. اگر به https://accounts.google.com/.well-known/openid-configuration بروید، تمام داده های مورد نیاز OAuth 2.0 (و بیشتر) را خواهید دید.

در این مرحله، ما می توانیم راه اندازی خود را با docker compose up. وقتی به http://localhost:9080/ می رویم، مرورگر ما را به صفحه احراز هویت گوگل هدایت می کند. از آنجایی که من قبلاً احراز هویت شده‌ام، می‌توانم شناسه خود را انتخاب کنم – و به شناسه‌ای نیاز دارم که به سازمان پروژه‌ای که در بالا ایجاد کردم، محدود شود.

حساب Google مورد نظر برای احراز هویت را انتخاب کنید

سپس، می توانم آزادانه به منبع دسترسی داشته باشم.

پیکربندی Azure برای OIDC

همکار من Bobur قبلاً همه چیزهایی را که برای پیکربندی Azure برای OIDC باید انجام دهید توضیح داده است.

ما فقط باید پارامترهای OIDC را تغییر دهیم:

  • OIDC_CLIENTID
  • OIDC_SECRET
  • OIDC_ISSUER: در Azure، باید چیزی شبیه به آن باشد login.microsoftonline.com/<TENANT_ID>/v2.0

اگر Docker Compose را با پارامترهای جدید راه اندازی مجدد کنید، صفحه اصلی اکنون توسط لاگین Azure محافظت می شود.

نتیجه

خارجی کردن فرآیند احراز هویت خود به شخص ثالث ممکن است معقول باشد، اما شما می خواهید از الزام کردن زیرساخت خود به فرآیند اختصاصی آن اجتناب کنید. OpenID Connect یک استاندارد صنعتی است که به راحتی امکان تعویض ارائه دهندگان را فراهم می کند.

Apache APISIX پلاگینی را ارائه می دهد که OIDC را ادغام می کند تا بتوانید از برنامه های خود با دومی محافظت کنید. دلیلی برای عدم استفاده از آن وجود ندارد، زیرا همه ارائه دهندگان هویت اختصاصی، مانند Okta و Keycloak، با OIDC سازگار هستند.

کد منبع کامل این پست را می توانید در GitHub بیابید:

فراتر رفتن:

در ابتدا در A Java Geek در 5 مارس منتشر شدهفتم، 2023

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا