ورود یکپارچه SAML در گیت‌هاب (GitHub SAML SSO) مکانیزمی است که در آن هویت اعضای سازمان از یک ارائه‌دهنده هویت مرکزی (Identity Provider) تأمین می‌شود و دسترسی به مخازن سازمان، بر اساس سیاست‌های متمرکز کنترل می‌گردد.

SAML (Security Assertion Markup Language) یک استاندارد باز برای تبادل داده احراز هویت و مجوزدهی میان دو طرف است: ارائه‌دهنده هویت (IdP) و ارائه‌دهنده سرویس (SP). در GitHub، این مکانیزم اجازه می‌دهد سازمان‌ها عضویت اعضا را از یک سیستم مرکزی (مانند Okta، Azure AD یا OneLogin) مدیریت کنند. آمار نشان می‌دهد سازمان‌هایی که SAML SSO را پیاده‌سازی می‌کنند، تا ۷۰ درصد کاهش در رخدادهای دسترسی غیرمجاز را تجربه می‌کنند. در پروژه‌های متعددی که زیرساخت هویت را برای سازمان‌ها راه‌اندازی کرده‌ام، دیده‌ام که SAML، هم امنیت را افزایش می‌دهد و هم بار عملیاتی را کاهش می‌دهد. این نوشتار، SAML SSO در GitHub را از پایه تا سطح پیشرفته بررسی می‌کند.

مدیریت هویت در سازمان‌های مدرن، یک تصمیم معماری است نه یک تنظیم جانبی. SAML SSO، این تصمیم را از حالت پراکنده به حالت متمرکز منتقل می‌کند.

SAML SSO چیست و چرا سازمان‌ها به آن نیاز دارند؟

SAML (Security Assertion Markup Language) یک استاندارد مبتنی بر XML برای تبادل اطلاعات احراز هویت است که در سال ۲۰۰۲ توسط OASIS معرفی شد. SSO (Single Sign-On) مکانیزمی است که در آن کاربر با یک بار ورود، به چند سرویس دسترسی پیدا می‌کند. SAML 2.0 در ویکی‌پدیا مرور فنی جامعی ارائه می‌دهد.

چرا سازمان‌ها به SAML SSO نیاز دارند؟

  • مدیریت متمرکز: یک محل برای مدیریت کاربران.
  • کاهش بار عملیاتی: حذف مدیریت حساب‌های پراکنده.
  • افزایش امنیت: الزام MFA از طریق IdP.
  • انطباق با قوانین: رعایت الزامات SOC 2، ISO 27001، HIPAA.
  • غیرفعال‌سازی سریع: قطع دسترسی کاربر در لحظه.
  • کاهش هزینه: حذف هزینه Help Desk برای بازیابی رمز.

در MFA چیست و چرا به یک ضرورت امنیتی غیرقابل چشم‌پوشی تبدیل شده است؟ به نقش SAML در افزایش امنیت اشاره کرده‌ام. SSO چیست و چگونه تجربه کاربری سازمانی را متحول می‌کند؟ نیز به این موضوع می‌پردازد.

تفاوت SAML و OAuth و OIDC

سه استاندارد اصلی در حوزه هویت وجود دارد:

  • SAML: مبتنی بر XML، مناسب سازمان‌ها.
  • OAuth 2.0: پروتکل مجوزدهی، نه احراز هویت.
  • OIDC: لایه احراز هویت روی OAuth، مبتنی بر JSON.

OAuth چیست و چگونه کار می‌کند؟ به تفاوت‌های این استانداردها اشاره دارد. چرا انتخاب بین OAuth و JWT اغلب به جای حل مسئله، مشکل جدیدی می‌سازد؟ نیز به این موضوع می‌پردازد.

SSO در برابر SAML

SSO مفهوم کلی است (ورود یکپارچه). SAML یکی از پروتکل‌های پیاده‌سازی SSO است. در GitHub Enterprise، SAML استاندارد اصلی است.

معماری و جریان SAML

جریان SAML از سه بازیگر اصلی تشکیل شده: کاربر، IdP و SP (GitHub).

جریان SP-Initiated

  1. کاربر تلاش می‌کند به GitHub دسترسی پیدا کند.
  2. GitHub تشخیص می‌دهد که سازمان نیازمند SAML است.
  3. GitHub کاربر را به IdP سازمان هدایت می‌کند.
  4. IdP هویت کاربر را احراز می‌کند (با رمز + MFA).
  5. IdP یک SAML Assertion امضاشده برای GitHub صادر می‌کند.
  6. GitHub اعتبارسنجی می‌کند و دسترسی می‌دهد.

جریان IdP-Initiated

در این جریان، کاربر ابتدا وارد IdP می‌شود و از پنل IdP، GitHub را انتخاب می‌کند. این جریان ساده‌تر است اما امنیت کمتری دارد.

اجزای SAML Assertion

یک SAML Assertion شامل:

  • Issuer: شناسه IdP.
  • Subject: شناسه کاربر.
  • Conditions: محدودیت‌های زمانی و مخاطب.
  • AuthnStatement: روش احراز هویت.
  • AttributeStatement: ویژگی‌های کاربر (نام، ایمیل، نقش).
  • Signature: امضای دیجیتال IdP.

Metadata

هر دو طرف، یک فایل Metadata XML تبادل می‌کنند. این فایل شامل:

  • Entity ID
  • URLهای SSO و SLO
  • گواهی‌های امضا
  • الگوریتم‌های پشتیبانی‌شده

جدول خلاصه جریان

مرحله طرف عمل
۱ کاربر ← GitHub درخواست دسترسی
۲ GitHub ← کاربر Redirect به IdP
۳ کاربر ← IdP احراز هویت
۴ IdP ← GitHub SAML Assertion
۵ GitHub اعتبارسنجی و صدور دسترسی

SAML SSO در گیت‌هاب

GitHub SAML SSO در سطح Organization و Enterprise تعریف می‌شود.

سطوح دسترسی

  • Organization: SAML برای یک سازمان.
  • Enterprise: SAML برای کل Enterprise (چند سازمان).

الزامات

  • GitHub Enterprise Cloud یا Enterprise Server.
  • یک IdP سازگار با SAML 2.0.
  • دسترسی Owner در سازمان.

الزام SSO برای اعضا

پس از فعال‌سازی SAML، اعضای سازمان باید حساب GitHub خود را به هویت IdP متصل کنند. اگر عضو جدید باشد، GitHub حساب را به‌طور خودکار ایجاد یا متصل می‌کند.

External Identity

هر عضو، یک External Identity دارد که اتصال بین حساب GitHub و IdP را تعریف می‌کند. این اتصال، پایه مدیریت متمرکز است.

رفع SSO و دسترسی PAT

وقتی SAML فعال می‌شود، Personal Access Tokenها (PAT) نیز تابع SSO می‌شوند. کاربر باید PAT خود را برای دسترسی به سازمان، مجاز کند. این نکته در CI/CD حیاتی است. GitHub Actions راهنمای خودکارسازی گردش کار به این موضوع اشاره دارد. JWT چیست و چگونه احراز هویت را سبک‌تر و مقیاس‌پذیرتر می‌کند؟ نیز به توکن‌ها اشاره دارد.

گزینه‌های IdP

انتخاب IdP، یکی از تصمیم‌های کلیدی است.

IdP ویژگی مناسب برای
Okta اکوسیستم قوی، SCIM سازمان‌های متوسط تا بزرگ
Azure AD ادغام با Microsoft سازمان‌های Microsoft-centric
OneLogin سادگی راه‌اندازی سازمان‌های کوچک
Google Workspace ادغام با GSuite سازمان‌های Google-centric
JumpCloud راه‌حل یکپارچه استارتاپ‌ها
Keycloak Open Source سازمان‌های با تیم فنی

معیارهای انتخاب

  • هزینه: بر اساس تعداد کاربر.
  • پشتیبانی SCIM: برای اتوماسیون مدیریت.
  • MFA: روش‌های پشتیبانی‌شده.
  • Integration: سایر سرویس‌های سازمان.
  • Compliance: رعایت استانداردها.

Self-Hosted IdP

برای سازمان‌های با الزامات داده محلی، Keycloak یا Gluu گزینه‌های Open Source هستند. رایانش ابری چیست و چه مزایایی دارد؟ به تفاوت‌های Self-Hosted و Cloud اشاره دارد.

پیاده‌سازی گام‌به‌گام

پیاده‌سازی SAML SSO، فرآیندی چندمرحله‌ای است.

گام اول: تنظیم IdP

در پنل IdP، یک Application جدید برای GitHub ایجاد کنید. URLهای ACS و Entity ID از GitHub را وارد کنید. این اطلاعات در تنظیمات SAML سازمان GitHub موجود است.

گام دوم: تنظیم GitHub

در تنظیمات سازمان، بخش Security → SAML single sign-on:

  • Sign on URL
  • Issuer
  • Public certificate

گام سوم: تست اتصال

پیش از فعال‌سازی نهایی، با یک حساب تست، جریان را بررسی کنید. GitHub امکان Test SAML configuration را فراهم می‌کند.

گام چهارم: فعال‌سازی و Onboarding

پس از فعال‌سازی، اعضا باید حساب‌های خود را متصل کنند. ایمیل اطلاع‌رسانی و راهنما ضروری است.

گام پنجم: SCIM (اختیاری)

SCIM (System for Cross-domain Identity Management) اتوماسیون Provisioning و Deprovisioning کاربران را ممکن می‌کند. با SCIM، افزودن و حذف کاربران به‌طور خودکار انجام می‌شود.

نمونه تنظیمات YAML (مفهومی)

sso:
  provider: saml
  entity_id: https://github.com/orgs/my-org
  acs_url: https://github.com/orgs/my-org/saml/consume
  idp:
    entity_id: https://idp.example.com/saml
    sso_url: https://idp.example.com/saml/sso
    certificate: |
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
  attributes:
    username: user.email
    email: user.email
    full_name: user.displayName

مدیریت PAT و SSO

پس از فعال‌سازی SAML، PATها نیازمند تأیید SSO هستند. برای CI/CD، باید از GitHub App یا Machine User با SSO Authorization استفاده کرد. بهترین ابزارهای CI/CD؛ کدام برای پروژه شما مناسب است؟ به این موضوع اشاره دارد. ورک‌فلوهای قابل استفاده مجدد در گیت‌هاب: چرا کپی-پیست YAML، بزرگ‌ترین بدهی فنی CI/CD است؟ نیز به این موضوع می‌پردازد.

SCIM و اتوماسیون مدیریت کاربران

SCIM، مکانیزمی برای اتوماسیون مدیریت هویت است.

Provisioning

وقتی کاربر جدید در IdP ایجاد می‌شود، SCIM به‌طور خودکار او را به GitHub اضافه می‌کند.

Deprovisioning

وقتی کاربر از IdP حذف می‌شود، SCIM به‌طور خودکار دسترسی او را در GitHub قطع می‌کند. این ویژگی، حیاتی‌ترین مزیت SCIM است.

گروه‌ها و نقش‌ها

SCIM امکان Sync گروه‌های IdP با Teamهای GitHub را فراهم می‌کند. اعضای گروه، به‌طور خودکار به Team اضافه یا حذف می‌شوند.

نقش SCIM در انطباق

SCIM برای انطباق با استانداردها مانند SOC 2 و ISO 27001 ضروری است. Audit Trail نشان می‌دهد چه زمانی و توسط چه کسی، دسترسی ایجاد یا حذف شده است. اخبار مهم درباره امنیت وب به این موضوع اشاره دارد.

جدول مقایسه SAML و SCIM

ویژگی SAML SCIM
هدف احراز هویت مدیریت هویت
زمان هنگام ورود مداوم
جهت Pull Push
اتوماسیون خیر بله

امنیت و ملاحظات

SAML SSO سطح امنیتی را افزایش می‌دهد اما نیازمند ملاحظات است.

امضای SAML Assertion

Assertion باید توسط IdP امضا شود. GitHub امضا را اعتبارسنجی می‌کند. الگوریتم امضا باید SHA-256 یا بالاتر باشد، نه SHA-1 که ضعیف است.

رمزنگاری

Assertion می‌تواند رمزنگاری شود. این لایه اضافی، از شنود در مسیر جلوگیری می‌کند.

مدیریت گواهی

گواهی IdP باید در GitHub ثبت شود. این گواهی، تاریخ انقضا دارد و باید پیش از انقضا به‌روزرسانی شود. عدم به‌روزرسانی، می‌تواند دسترسی همه اعضا را قطع کند.

Session Timeout

SAML Session می‌تواند Timeout داشته باشد. تنظیم درست این مقدار، تعادل بین امنیت و تجربه کاربر را ممکن می‌کند.

MFA از طریق IdP

MFA (Multi-Factor Authentication) از طریق IdP اعمال می‌شود. این رویکرد، امنیت را یکنواخت می‌سازد. تفاوت MFA و 2FA را درست بفهمید به این موضوع می‌پردازد. چگونه MFA را در اپلیکیشن وب پیاده‌سازی کنیم تا واقعاً امن باشد؟ نیز راهنمای عملی ارائه می‌دهد.

مدیریت دسترسی مبتنی بر نقش

SAML به‌تنهایی مدیریت دسترسی نمی‌دهد. برای RBAC (Role-Based Access Control)، SCIM و Teamها ضروری است. کنترل نقش‌ها و دسترسی‌های وردپرس با افزونه مدیریت کاربران به مفاهیم مشابه در WordPress اشاره دارد. توابع وردپرس برای مدیریت نقش‌ها و دسترسی‌ها نیز به این موضوع می‌پردازد.

Audit Log

هر رویداد SAML باید در Audit Log ثبت شود: ورود موفق، ورود ناموفق، فعال‌سازی، غیرفعال‌سازی. این لاگ‌ها برای تحلیل امنیتی ضروری‌اند. هدرهای امنیتی HTTP (Security Headers) چه کاربردی دارند؟ به لایه‌های امنیتی مشابه اشاره دارد.

اشتباهات رایج

  • نادیده گرفتن SCIM: SAML بدون SCIM، مدیریت کاربران را دستی می‌کند.
  • گواهی منقضی: عدم به‌روزرسانی گواهی IdP، دسترسی همه را قطع می‌کند.
  • نبود Plan B: اگر IdP قطع شود، دسترسی همه قطع می‌شود.
  • نادیده گرفتن PAT: PATهای بدون SSO Authorization، دسترسی را قطع می‌کنند.
  • نبود Onboarding: اعضا نمی‌دانند چگونه حساب خود را متصل کنند.
  • نادیده گرفتن Email Match: اگر ایمیل IdP با ایمیل GitHub مطابقت نداشته باشد، اتصال شکست می‌خورد.
  • نبود Test کامل: فعال‌سازی بدون تست، می‌تواند دسترسی همه را قطع کند.
  • نادیده گرفتن Guest Collaborators: همکاران خارج از سازمان، نیازمند مدیریت جداگانه هستند.
  • نبود SSO برای GitHub Apps: GitHub Appها و OAuth Appها، نیازمند تنظیم جداگانه هستند.
  • نبود مستندسازی: تیم نمی‌داند چه سیاست‌هایی اعمال شده است.

در امنیت وردپرس چیست و چرا یک روز غفلت، همه‌چیز را می‌سوزاند؟ به اصول مشابه در WordPress اشاره کرده‌ام. اشتباهات امنیتی رایج در وب و اشتباهات رایج امنیت وب (Web Security) کدامند؟ نیز به این موضوع می‌پردازند.

اشتباهات پیشرفته

  • نبود Break Glass: دسترسی اضطراری در صورت قطعی IdP.
  • نبود Disaster Recovery: برنامه بازیابی هویت.
  • نادیده گرفتن Session Revocation: قطع دسترسی در لحظه.
  • نبود Monitoring: پایش ناهنجاری‌های ورود.
  • نادیده گرفتن Compliance: عدم انطباق با استانداردها.

تحلیل پیشرفته برای مهندسان ارشد

برای معماران هویت و مهندسان ارشد، درک عمیق‌تر از SAML SSO ضروری است.

الگوی Zero Trust

در معماری Zero Trust، هر درخواست باید احراز هویت شود. SAML + SCIM + MFA + Device Trust، پایه این معماری است. امنیت وب چیست و چه اصولی دارد؟ به این موضوع می‌پردازد.

Just-in-Time Provisioning

JIT Provisioning، کاربر را در لحظه اولین ورود، به‌طور خودکار به GitHub اضافه می‌کند. این الگو، نیاز به Provisioning پیش از موعد را حذف می‌کند.

SCIM در مقیاس

در سازمان‌های بزرگ با هزاران کاربر، SCIM باید Performance بالا داشته باشد. الگوی Bulk Operations، برای Syncهای بزرگ.

Group Sync و Team Mapping

Group Sync، گروه‌های IdP را با Teamهای GitHub نگاشت می‌کند. این نگاشت، باید دقیق و بدون دوری باشد (Circular Membership).

SAML و GitHub Enterprise Server

در GHES، پیکربندی SAML متفاوت است. نیازمند دسترسی SSH به سرور و ویرایش فایل‌های پیکربندی. سرور چیست و چگونه کار می‌کند؟ به این موضوع اشاره دارد.

Integration با SIEM

Audit Logهای GitHub و IdP باید به SIEM ارسال شوند. Correlation میان این دو، تحلیل امنیتی را ممکن می‌کند. بهترین ابزارهای مانیتورینگ سرور؛ کدام برای شما مناسب است؟ به ابزارهای مشابه اشاره دارد.

OIDC در GitHub Actions

GitHub Actions از OIDC برای احراز هویت با سرویس‌های ابری (AWS، GCP، Azure) استفاده می‌کند. این الگو، جایگزین PATهای طولانی‌مدت است. کاهش هزینه‌های AWS با تکنیک‌های ساده به OIDC اشاره دارد.

Multi-IdP و Federation

در سازمان‌های چندملیتی، ممکن است چند IdP وجود داشته باشد. Federation میان IdPها، امکان مدیریت متمرکز را فراهم می‌کند.

SCIM در SaaS

اگر سازمان از SaaSهای متعدد استفاده می‌کند، SCIM می‌تواند کاربران را در همه Sync کند. SaaS چیست و چه تفاوتی با PaaS و IaaS دارد؟ به این موضوع اشاره دارد.

Audit و Compliance

Auditهای SAML و SCIM برای SOC 2، ISO 27001، HIPAA و PCI DSS ضروری هستند. این Auditها باید غیرقابل تغییر و قابل استناد باشند. اخبار مهم درباره حریم خصوصی در دنیای دیجیتال به این موضوع اشاره دارد.

Edge Cases

  • User Rename: تغییر نام کاربری در IdP.
  • Email Change: تغییر ایمیل و اتصال مجدد.
  • Group Restructure: تغییر ساختار گروه‌ها.
  • Certificate Rotation: چرخش گواهی بدون downtime.

پرسش‌های پرتکرار درباره SAML SSO در گیت‌هاب

SAML SSO در گیت‌هاب چیست؟

مکانیزمی که در آن هویت اعضای سازمان از یک ارائه‌دهنده هویت مرکزی (IdP) تأمین و دسترسی به مخازن بر اساس سیاست‌های متمرکز کنترل می‌شود.

چرا سازمان‌ها به SAML SSO نیاز دارند؟

برای مدیریت متمرکز کاربران، افزایش امنیت، انطباق با استانداردها، غیرفعال‌سازی سریع دسترسی و کاهش بار عملیاتی.

SAML چه تفاوتی با OAuth و OIDC دارد؟

SAML مبتنی بر XML و مناسب سازمان‌ها است. OAuth پروتکل مجوزدهی است. OIDC لایه احراز هویت روی OAuth با JSON است.

چگونه SAML SSO را در گیت‌هاب پیاده کنیم؟

با تنظیم IdP، ثبت Metadata در GitHub، تست اتصال، فعال‌سازی و Onboarding اعضا. SCIM برای اتوماسیون توصیه می‌شود.

SCIM چیست و چه نقشی دارد؟

SCIM مکانیزمی برای اتوماسیون Provisioning و Deprovisioning کاربران است. با SCIM، افزودن و حذف کاربران به‌طور خودکار انجام می‌شود.

آیا SAML بر Personal Access Tokenها اثر دارد؟

بله. پس از فعال‌سازی SAML، PATها نیازمند تأیید SSO هستند. برای CI/CD، باید از GitHub App یا Machine User با SSO Authorization استفاده کرد.

چه اشتباهاتی در پیاده‌سازی SAML رایج است؟

نادیده گرفتن SCIM، گواهی منقضی، نبود Plan B، نادیده گرفتن PAT، نبود Onboarding و نبود Test کامل.

آیا SAML برای همه سازمان‌ها مناسب است؟

برای سازمان‌های متوسط تا بزرگ با نیاز امنیتی و انطباق، بله. برای تیم‌های کوچک، ممکن است Overkill باشد.

چگونه SAML را با GitHub Enterprise Server پیاده کنیم؟

در GHES، پیکربندی SAML نیازمند دسترسی SSH به سرور و ویرایش فایل‌های پیکربندی است.

آیا SAML جایگزین MFA می‌شود؟

خیر. SAML و MFA مکمل یکدیگرند. MFA از طریق IdP اعمال می‌شود و SAML جریان احراز هویت را مدیریت می‌کند. MFA چیست و چرا به یک ضرورت امنیتی غیرقابل چشم‌پوشی تبدیل شده است؟ به این موضوع می‌پردازد.

SAML SSO در گیت‌هاب، ابزاری کلیدی برای مدیریت هویت در سازمان‌های مدرن است. اگر تجربه‌ای در پیاده‌سازی آن دارید، به‌خصوص اگر با چالش غیرمنتظره‌ای مواجه شده‌اید، آن را در دیدگاه‌ها بنویسید. تجربه شما می‌تواند راهنمای دیگران باشد. 🔐🏢