Zum Hauptinhalt springen
Version: 0.2.0-beta.1

Erste Schritte

MCP-Autorisierungsspezifikation-Unterstützung

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

Die MCP-Spezifikation hat spezifische Anforderungen für die Autorisierung. Der Autorisierungsmechanismus basiert auf etablierten Spezifikationen und implementiert eine ausgewählte Teilmenge ihrer Funktionen, um Sicherheit und Interoperabilität bei gleichzeitiger Einfachheit zu gewährleisten:

Diese Spezifikationen arbeiten zusammen, um ein sicheres und standardisiertes Autorisierungs-Framework für MCP-Implementierungen bereitzustellen.

Du kannst die MCP-kompatible Anbieter-Liste 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, deinen Ressourcenbezeichner zu definieren und den Autorisierungsserver zu konfigurieren, dem für die Authentifizierung vertraut wird. MCP Auth arbeitet jetzt im Ressourcenserver-Modus und entspricht der aktualisierten MCP-Spezifikation, die OAuth 2.0 Protected Resource Metadata (RFC 9728) erfordert.

Wenn dein Anbieter konform ist mit:

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

from mcpauth import MCPAuth
from mcpauth.config import AuthServerType, ResourceServerConfig, ResourceServerMetadata
from mcpauth.utils import fetch_server_config

# 1. Definiere deinen Ressourcenbezeichner und hole die Konfiguration für den vertrauenswürdigen Autorisierungsserver.
resource_id = "https://api.example.com/notes"
auth_server_config = fetch_server_config("https://auth.logto.io/oidc", AuthServerType.OIDC)

# 2. Initialisiere MCPAuth im Ressourcenserver-Modus.
# `protected_resources` kann ein einzelnes Objekt oder eine Liste für mehrere Ressourcen sein.
mcp_auth = MCPAuth(
    protected_resources=ResourceServerConfig(
        metadata=ResourceServerMetadata(
            resource=resource_id,
            authorization_servers=[auth_server_config],
            scopes_supported=[
                "read:notes",
                "write:notes",
            ],
        )
    )
)

Für weitere Möglichkeiten, die Metadaten des Autorisierungsservers zu konfigurieren, einschließlich benutzerdefinierter Metadaten-URLs, Daten-Transpilation oder manueller Metadatenspezifikation, siehe Weitere Möglichkeiten zur Konfiguration von MCP Auth.

Binde den Endpunkt für die Metadaten der geschützten Ressource ein

Um der aktualisierten MCP-Spezifikation zu entsprechen, bindet MCP Auth den OAuth 2.0 Protected Resource Metadata-Endpunkt (RFC 9728) in deinen MCP-Server ein. Dieser Endpunkt ermöglicht es Clients, zu entdecken:

  • Welche Autorisierungsserver gültige Tokens für deine geschützten Ressourcen ausstellen können
  • Welche Berechtigungen (Scopes) für jede Ressource unterstützt werden
  • Weitere Metadaten, die für die korrekte Token-Validierung erforderlich sind

Der Endpunktpfad wird automatisch durch den Pfadbestandteil deines Ressourcenbezeichners bestimmt:

  • Kein Pfad: https://api.example.com/.well-known/oauth-protected-resource
  • Mit Pfad: https://api.example.com/notes/.well-known/oauth-protected-resource/notes

Der MCP-Server dient jetzt als Ressourcenserver, der Tokens validiert und Metadaten über seine geschützten Ressourcen bereitstellt, während er sich vollständig auf externe Autorisierungsserver für Authentifizierung und Autorisierung verlässt.

Du kannst die vom SDK bereitgestellte Methode verwenden, um diesen Endpunkt einzubinden:

from starlette.applications import Starlette

# Binde den Router ein, um die Protected Resource Metadata bereitzustellen.
# Für Ressource "https://api.example.com" → Endpunkt: /.well-known/oauth-protected-resource
# Für Ressource "https://api.example.com/notes" → Endpunkt: /.well-known/oauth-protected-resource/notes
app = Starlette(routes=[
    *mcp_auth.resource_metadata_router().routes,
])

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. Das Middleware erfordert jetzt die Angabe, zu welcher Ressource der Endpunkt gehört, um eine korrekte Token-Validierung zu ermöglichen:

Zielgruppenvalidierung (Audience Validation)

Der Parameter audience ist erforderlich gemäß der OAuth 2.0-Spezifikation für eine sichere Token-Validierung. Er ist jedoch derzeit optional, um die Kompatibilität mit Autorisierungsservern zu gewährleisten, die noch keine Ressourcenbezeichner unterstützen. Aus Sicherheitsgründen bitte immer den audience-Parameter angeben, wenn möglich. Zukünftige Versionen werden die Zielgruppenvalidierung verpflichtend machen, um die Spezifikation vollständig zu erfüllen.

from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.routing import Mount

# Erstelle das Middleware, um deinen MCP-Server mit der ressourcenspezifischen Richtlinie zu schützen.
bearer_auth = Middleware(mcp_auth.bearer_auth_middleware('jwt', 
    resource=resource_id,
    audience=resource_id,  # Zielgruppenvalidierung für Sicherheit aktivieren
    required_scopes=['read:notes']
))

# Binde den Router ein, um die Protected Resource Metadata bereitzustellen und schütze den MCP-Server.
app = Starlette(
    routes=[
        *mcp_auth.resource_metadata_router().routes,
        # Schütze den MCP-Server mit dem Bearer-Auth-Middleware.
        Mount("/", app=mcp.sse_app(), middleware=[bearer_auth]),
    ],
)

In den obigen Beispielen geben wir den Token-Typ jwt und den Ressourcenbezeichner an. Das Middleware validiert das JWT-Token automatisch gegen die für diese Ressource konfigurierten vertrauenswürdigen Autorisierungsserver und befüllt die Informationen des authentifizierten Benutzers.

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 ist. Du kannst darauf in deinen MCP-Tool-Handlern wie folgt zugreifen:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP()

# Initialisiere mit MCP Auth wie in den vorherigen Beispielen gezeigt
# ...

@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 behandelst.