Zum Hauptinhalt springen

MCP Auth im MCP-Server konfigurieren

Um deinen MCP-Server mit einem OAuth 2.1- oder OpenID Connect-Anbieter zu verbinden, musst du die MCP Auth-Instanz konfigurieren. Dies beinhaltet die Initialisierung der Instanz mit den Metadaten des Autorisierungsservers deines Anbieters und das Einrichten der notwendigen Autorisierungsflüsse.

MCP Auth initialisieren

Automatisches Metadaten-Fetching

Der einfachste Weg, die MCP Auth-Instanz zu initialisieren, ist die Verwendung der eingebauten Funktionen, die die Metadaten von einer Well-Known-URL abrufen. Wenn dein Anbieter einem der folgenden Standards entspricht:

Kannst du fetchServerConfig verwenden, um die Metadaten automatisch abzurufen, indem du die issuer-URL angibst:

from mcpauth import MCPAuth
from mcpauth.config import AuthServerType, fetch_server_config

mcp_auth = MCPAuth(
    server=fetch_server_config(
        '<auth-server-url>',
        type=AuthServerType.OIDC  # oder AuthServerType.OAUTH
    )
)

Wenn dein Issuer einen Pfad enthält, unterscheidet sich das Verhalten leicht zwischen OAuth 2.0 und OpenID Connect:

  • OAuth 2.0: Die Well-Known-URL wird an die Domain des Issuers angehängt. Zum Beispiel, wenn dein Issuer https://my-project.logto.app/oauth ist, wird die Well-Known-URL https://auth.logto.io/.well-known/oauth-authorization-server/oauth sein.
  • OpenID Connect: Die Well-Known-URL wird direkt an den Issuer angehängt. Zum Beispiel, wenn dein Issuer https://my-project.logto.app/oidc ist, wird die Well-Known-URL https://auth.logto.io/oidc/.well-known/openid-configuration sein.

Weitere Möglichkeiten zur Initialisierung von MCP Auth

Eigene Daten-Transpilation

In manchen Fällen entsprechen die vom Anbieter zurückgegebenen Metadaten nicht dem erwarteten Format. Wenn du sicher bist, dass der Anbieter konform ist, kannst du die Option transpile_data verwenden, um die Metadaten vor der Verwendung zu modifizieren:

from mcpauth import MCPAuth
from mcpauth.config import AuthServerType
from mcpauth.utils import fetch_server_config

mcp_auth = MCPAuth(
    server=fetch_server_config(
        '<auth-server-url>',
        type=AuthServerType.OIDC,
        transpile_data=lambda data: {**data, 'response_types_supported': ['code']} 
    )
)

Dies ermöglicht es dir, das Metadaten-Objekt zu modifizieren, bevor es von MCP Auth verwendet wird. Zum Beispiel kannst du Felder hinzufügen oder entfernen, deren Werte ändern oder sie in ein anderes Format umwandeln.

Metadaten von einer spezifischen URL abrufen

Wenn dein Anbieter eine spezifische Metadaten-URL anstelle der Standard-URLs hat, kannst du diese ähnlich verwenden:

from mcpauth import MCPAuth
from mcpauth.config import AuthServerType
from mcpauth.utils import fetch_server_config_by_well_known_url

mcp_auth = MCPAuth(
    server=fetch_server_config_by_well_known_url(
        '<metadata-url>',
        type=AuthServerType.OIDC # oder AuthServerType.OAUTH
    )
)

Metadaten von einer spezifischen URL mit eigener Daten-Transpilation abrufen

In manchen Fällen kann die Antwort des Anbieters fehlerhaft oder nicht im erwarteten Metadatenformat sein. Wenn du sicher bist, dass der Anbieter konform ist, kannst du die Metadaten über die Konfigurationsoption transpiliert bereitstellen:

from mcpauth import MCPAuth
from mcpauth.config import AuthServerType, fetch_server_config_by_well_known_url

mcp_auth = MCPAuth(
    server=fetch_server_config_by_well_known_url(
        '<metadata-url>',
        type=AuthServerType.OIDC,
        transpile_data=lambda data: {**data, 'response_types_supported': ['code']} 
    )
)

Metadaten manuell bereitstellen

Wenn dein Anbieter kein Metadaten-Fetching unterstützt, kannst du das Metadaten-Objekt manuell bereitstellen:

from mcpauth import MCPAuth
from mcpauth.config import AuthServerConfig, AuthServerType, AuthorizationServerMetadata

mcp_auth = MCPAuth(
    server=AuthServerConfig(
        type=AuthServerType.OIDC,  # oder AuthServerType.OAUTH
        metadata=AuthorizationServerMetadata(
            issuer='<issuer-url>',
            authorization_endpoint='<authorization-endpoint-url>',
            # ... weitere Metadatenfelder
        ),
    )
)