Zum Hauptinhalt springen

Erste Schritte

Wähle einen kompatiblen OAuth 2.1- oder OpenID Connect-Anbieter

Die MCP-Spezifikation hat einige spezifische Anforderungen für die Autorisierung:

Während die letzten beiden nicht zwingend erforderlich sind, ist die erste notwendig, um eine sichere und konforme Implementierung zu gewährleisten.

hinweis

Im neuen MCP-Entwurf wird RFC 8414 für Autorisierungsserver (Anbieter) verpflichtend sein. Wir werden die Dokumentation aktualisieren, sobald der neue Entwurf finalisiert ist.

Du kannst die Liste der MCP-kompatiblen Anbieter prüfen, um zu sehen, ob dein Anbieter unterstützt wird.

Installiere MCP Auth SDK

MCP Auth ist sowohl für Python als auch für TypeScript verfügbar. Lass uns wissen, wenn du Unterstützung für eine andere Sprache oder ein anderes Framework benötigst!

pip install mcpauth

Oder ein anderer Paketmanager deiner Wahl, wie pipenv oder poetry.

Initialisiere MCP Auth

Der erste Schritt ist die Initialisierung der MCP Auth-Instanz mit den Metadaten deines Anbieter-Autorisierungsservers. Wenn dein Anbieter eine der folgenden Spezifikationen unterstützt:

kannst du die eingebaute Funktion verwenden, um die Metadaten abzurufen und die MCP Auth-Instanz zu initialisieren:

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 # oder AuthServerType.OAUTH
    )
)

Wenn du die Metadaten-URL oder Endpunkte manuell angeben musst, siehe Weitere Möglichkeiten zur Initialisierung von MCP Auth.

Binde den Metadaten-Endpunkt ein

Um der aktuellen MCP-Spezifikation zu entsprechen, bindet MCP Auth den OAuth 2.0 Authorization Server Metadata-Endpunkt (/.well-known/oauth-authorization-server) in deinen MCP-Server ein:

from starlette.applications import Starlette

app = Starlette(routes=[
    mcp_auth.metadata_route(),
])

Die URLs in den Metadaten bleiben unverändert, sodass die Rolle des Autorisierungsservers vollständig an den Anbieter delegiert wird. Du kannst den Metadaten-Endpunkt testen, indem du /.well-known/oauth-authorization-server in deinem MCP-Server aufrufst.

Warum nur der Metadaten-Endpunkt?

Du wirst vielleicht sehen, dass die offiziellen SDKs einen Auth-Router bereitstellen, der Autorisierungsendpunkte wie /authorize, /token usw. einbindet. Hier ist der Grund, warum wir das nicht tun:

  1. Nur den Metadaten-Endpunkt einzubinden, ermöglicht es dir, die vollen Fähigkeiten deines Anbieters zu nutzen, ohne das Rad neu zu erfinden und unnötige Komplexität in deinen MCP-Server zu bringen.
  2. Es gibt außerdem Bestrebungen, die Rolle des MCP-Servers zu einem Ressourcenserver zu verschieben und OAuth 2.0 Protected Resource Metadata (RFC 9728) zu verlangen. Das bedeutet, dass der MCP-Server keine Autorisierungslogik mehr übernimmt (einschließlich des Metadaten-Endpunkts), sondern nur noch als Ressourcenserver dient, der sich für Authentifizierung und Autorisierung auf den Anbieter verlässt.
hinweis

Wir werden MCP Auth aktualisieren, um die neue MCP-Spezifikation zu unterstützen, sobald sie finalisiert ist. In der Zwischenzeit kannst du die aktuelle Version verwenden, die mit der aktuellen Spezifikation kompatibel ist.

Verwende das Bearer-Auth-Middleware

Sobald die MCP Auth-Instanz initialisiert ist, kannst du das Bearer-Auth-Middleware anwenden, um deine MCP-Routen zu schützen:

from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.routing import Mount
from mcpauth import MCPAuth
from mcp.server.fastmcp import FastMCP

mcp = FastMCP()
mcp_auth = MCPAuth(
  # Initialisiere mit deiner Auth-Server-Konfiguration
)
bearer_auth = mcp_auth.bearer_auth_middleware(
    "jwt", required_scopes=["read", "write"]
)

app = Starlette(routes=[
    mcp_auth.metadata_route(),
    Mount(
        "/",
        app=mcp.sse_app(),
        middleware=[Middleware(bearer_auth)],
    ),
])

Im obigen Beispiel haben wir den Token-Typ jwt angegeben und die Berechtigungen read und write gefordert. Es wird automatisch das JWT (JSON Web Token) validieren und ein Objekt mit den Informationen des authentifizierten Benutzers befüllen.

info

Noch nie von JWT (JSON Web Token) gehört? Keine Sorge, du kannst die Dokumentation einfach weiterlesen – wir erklären es, wenn es nötig ist. Du kannst auch das Auth Wiki für eine kurze Einführung besuchen.

Weitere Informationen zur Bearer-Auth-Konfiguration findest du unter Bearer-Auth konfigurieren.

Auth-Informationen in deiner MCP-Implementierung abrufen

Sobald das Bearer-Auth-Middleware angewendet ist, kannst du auf die Informationen des authentifizierten Benutzers (oder der Identität) in deiner MCP-Implementierung zugreifen:

MCP Auth speichert die Informationen des authentifizierten Benutzers nach erfolgreicher Authentifizierung in einer Kontextvariablen, sobald das Bearer-Auth-Middleware angewendet wurde. Du kannst darauf in deinen MCP-Tool-Handlern wie folgt zugreifen:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP()
mcp_auth = MCPAuth(
  # Initialisiere mit deiner Auth-Server-Konfiguration
)

@mcp.tool()
def add(a: int, b: int):
    """
    Ein Tool, das zwei Zahlen addiert.
    Die Informationen des authentifizierten Benutzers sind im Kontext verfügbar.
    """
    auth_info = mcp_auth.auth_info # Zugriff auf die Auth-Informationen im aktuellen Kontext
    if auth_info:
        print(f"Authentifizierter Benutzer: {auth_info.claims}")
    return a + b

Nächste Schritte

Lies weiter, um ein End-to-End-Beispiel zu erfahren, wie du MCP Auth mit deinem MCP-Server integrierst und wie du den Auth-Flow in MCP-Clients handhabst.