SAML 2.0

Security Assertion Markup Language

SAML 2.0 هو معيار SSO المؤسسي الأقدم والأكثر انتشاراً — يتبادل بيانات الهوية في XML signed. المفضل في بيئات Enterprise مثل SAP, Salesforce, و Microsoft.

نظرة عامة

SAML 2.0 (OASIS Standard) هو بروتوكول SSO قائم على XML — يعتمد على trust بين Identity Provider (IdP) و Service Provider (SP). الفرق الجوهري عن OIDC:

الميزةSAML 2.0OpenID Connect
صيغة البياناتXMLJSON / JWT
البنيةSOAP-heavyREST-light
الأفضل لـالتطبيقات المؤسسية القديمةتطبيقات الويب والتطبيقات الحديثة
حجم Assertionكبير (XML)صغير (JWT)
Native browser flowنعم (redirect/post)نعم (redirect)
Support in Methaq✅ full✅ full

المفاهيم الأساسية

SAML Assertion
البيانات الأساسية — XML document يحتوي على claims هوية المستخدم (NameID, attributes, conditions, auth statement). تُوقعة IdP رققياً.
Service Provider (SP)
التطبيق الذي يعتمد على ميثاق للمصادقة. Example: Salesforce, SAP, internal web app.
Identity Provider (IdP)
الطرف الذي يصدر assertions. ميثاق يعمل كـ IdP في هذا السيناريو.
SAML Request (AuthnRequest)
رسالة XML يرسلها SP إلى IdP لطلب مصادقة مستخدم. ترسل عبر HTTP Redirect أو HTTP POST.
SAML Response
رسالة XML ترد من IdP إلى SP بعد المصادقة. تحتوي على SAML Assertion موقعة.
Metadata
XML document يصف كل طرف (entity ID, endpoints, certificates). يُستخدم لتأسيس trust بين SP و IdP.

تدفق SSO (SP-Initiated)

  1. المستخدم يصل إلى التطبيق (SP)

    يطلب المستخدم صفحة محمية على Service Provider.

  2. SP يُنشئ AuthnRequest ويرسلها إلى IdP
    GET /realms/{realm}/protocol/saml?
      SAMLRequest=Base64(SAML_XML_AuthnRequest)
      &RelayState=return_url
  3. IdP (ميثاق) يُعرض صفحة تسجيل الدخول

    إذا لم يكن المستخدم مسجلاً، تظهر صفحة تسجيل الدخول. يتم التحقق من كلمة المرور + MFA إن وُجد.

  4. IdP يُنشئ SAML Response ويرجعها
    POST /realms/{realm}/protocol/saml
    Content-Type: application/x-www-form-urlencoded
    
    SAMLResponse=Base64(SAML_Response_XML)
    &RelayState=return_url
  5. SP يتحقق من Assertion ويثبت Session

    SP يتحقق من توقيع XML، يصحح audience restriction، يخرج NameID، ينشئ جلسة مستخدم محلية.

روابط SAML (Bindings)

SAML Bindings تحدد كيف تنتقل رسائل SAML عبر HTTP:

Bindingالاستخدامكيفية النقل
HTTP RedirectAuthnRequest (SP→IdP)URL query string (GET with encoded SAML)
HTTP POSTSAML Response (IdP→SP)HTML form auto-submit (POST body)
HTTP Artifactبديل لـ POSTReferences instead of embedding
SOAPSTS interactionsHTTP POST with SOAP envelope

تبادل Metadata

ميثاق كـ Identity Provider (IdP)

# Methaq IdP Metadata
https://your-methaq-server/realms/{realm}/protocol/saml/descriptor

هذا الـ metadata يحتوي على:

  • entityID: معرف كيان ميثاق
  • KeyDescriptor: public key للتوقيع
  • SingleSignOnService: endpoint لتسجيل الدخول (HTTP-POST binding)
  • SingleLogoutService: endpoint لتسجيل الخروج

SP Metadata (للمصادقة)

Service Provider (مثل Salesforce) يوفر metadata خاصة به. تُستورد في ميثاق:

# Admin Console path:
# Clients → Create client → Client type: SAML
# Import metadata document from SP

تكوين ميثاق كـ IdP لـ SAML SP

  1. اذهب إلى ClientsCreate client
  2. Client Type: saml
  3. Client ID: https://salesforce.methaq.org/app (SP Entity ID)
  4. Name ID Format: email أو username
  5. Valid Redirect URIs: https://salesforce.methaq.org/*
  6. Import SP Metadata أو أدخل القيم يدوياً
  7. من SAML signature keys: أدخل certificate الـ SP إذا طلب التوقيع

Signature Verification

# 确保 Response signed by IdP private key
# Ensure Assertion signed
# Ensure Destination matches expected URL