You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django中SAML服务提供商(SP)疑问:如何生成SP元数据文件

解答你的Django SAML SP元数据疑问

Hey Daniel, let's break this down clearly since you're new to SAML and trying to get your Django app integrated with your existing IDP.

首先:Django的SAML包到底是什么角色?

Most popular Django SAML packages (like djangosaml2 or django-saml2-auth) act as a full Service Provider (SP) implementation for your Django app—they're not just simple "connectors". They handle all core SP responsibilities out of the box:

  • Generating valid SP metadata XML
  • Processing SAML authentication requests and responses from your IDP
  • Managing user sessions after successful authentication
  • Handling single logout workflows (if configured)

You don't need to install any separate, standalone SP components—these packages turn your Django app into the SP itself.

如何生成SP元数据文件给IDP?

Let's walk through a common example with djangosaml2 (one of the most widely used, well-maintained options):

  1. Install the package

    pip install djangosaml2
    
  2. Configure Django settings
    Add saml2 to your INSTALLED_APPS, then add SAML-specific configuration to settings.py:

    INSTALLED_APPS = [
        # ... your other existing apps
        'saml2',
    ]
    
    # SAML Core Configuration
    SAML_CONFIG = {
        'xmlsec_binary': '/usr/bin/xmlsec1',  # Path to xmlsec1 tool (install via your OS package manager if missing)
        'entityid': 'https://your-django-app-domain.com/saml/metadata/',  # Unique identifier for your SP
        'service': {
            'sp': {
                'name': 'Your Django Application',
                'endpoints': {
                    'assertion_consumer_service': [
                        ('https://your-django-app-domain.com/saml/acs/', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST'),
                    ],
                    'single_logout_service': [
                        ('https://your-django-app-domain.com/saml/sls/', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect'),
                    ],
                },
                'allow_unsolicited': True,
                'authn_requests_signed': False,
                'logout_requests_signed': True,
                'want_assertions_signed': True,
                'want_response_signed': False,
            },
        },
        # Leave empty for now—you'll add your IDP's metadata here later
        'metadata': {
            'local': [],
        },
    }
    
  3. Add URL routes
    In your project's urls.py, map the SAML endpoints:

    from django.urls import path, include
    
    urlpatterns = [
        # ... your other existing routes
        path('saml/', include('djangosaml2.urls')),
    ]
    
  4. Retrieve your SP metadata
    Start your Django server (ensure it's accessible over HTTPS—SAML requires secure connections), then visit:

    https://your-django-app-domain.com/saml/metadata/
    

    The XML content returned here is your SP metadata. Copy it into a file (e.g., sp_metadata.xml) and send that to your IDP administrator—they can import this directly into their IDP system.

关于第三方SP供应商(Onelogin/Auth0)

Since you don't want to use external SP providers, that's totally fine! The Django SAML packages let your app function as its own SP, eliminating the need for middleman services. You keep full control over the authentication flow within your Django app.

Quick Tips

  • Always use HTTPS for your Django app when working with SAML—most IDPs will reject unencrypted connections.
  • Double-check that the URLs in your SP metadata (entity ID, ACS endpoint) match exactly what's configured in your settings and are publicly accessible to the IDP.
  • If you prefer django-saml2-auth instead, the process is nearly identical—it also includes a metadata endpoint you can access after configuration.

内容的提问来源于stack exchange,提问作者daniel8x

火山引擎 最新活动