Zum Hauptinhalt springen

Klasse: MCPAuth

Die Hauptklasse der mcp-auth-Bibliothek. Sie fungiert als Factory und Registry zur Erstellung von Authentifizierungsrichtlinien für deine geschützten Ressourcen.

Sie wird mit deinen Serverkonfigurationen initialisiert und stellt eine bearerAuth-Methode bereit, um Express-Middleware für tokenbasierte Authentifizierung zu generieren.

Beispiel

Verwendung im Resource Server-Modus

Dies ist der empfohlene Ansatz für neue Anwendungen.

Verwende dies, wenn Metadaten bei Bedarf abgerufen werden sollen. Dies ist besonders nützlich für Edge-Runtimes wie Cloudflare Workers, bei denen asynchrone Fetch-Operationen auf Top-Level-Ebene nicht erlaubt sind.

import express from 'express';
import { MCPAuth } from 'mcp-auth';

const app = express();
const resourceIdentifier = 'https://api.example.com/notes';

const mcpAuth = new MCPAuth({
  protectedResources: [
    {
      metadata: {
        resource: resourceIdentifier,
        // Nur issuer und type angeben – Metadaten werden bei der ersten Anfrage abgerufen
        authorizationServers: [{ issuer: 'https://auth.logto.io/oidc', type: 'oidc' }],
        scopesSupported: ['read:notes', 'write:notes'],
      },
    },
  ],
});

Option 2: Resolved-Konfiguration (vorgefetchte Metadaten)

Verwende dies, wenn du Metadaten beim Start abrufen und validieren möchtest.

import express from 'express';
import { MCPAuth, fetchServerConfig } from 'mcp-auth';

const app = express();
const resourceIdentifier = 'https://api.example.com/notes';
const authServerConfig = await fetchServerConfig('https://auth.logto.io/oidc', { type: 'oidc' });

const mcpAuth = new MCPAuth({
  protectedResources: [
    {
      metadata: {
        resource: resourceIdentifier,
        authorizationServers: [authServerConfig],
        scopesSupported: ['read:notes', 'write:notes'],
      },
    },
  ],
});

Verwendung der Middleware

// Router für Protected Resource Metadata einbinden
app.use(mcpAuth.protectedResourceMetadataRouter());

// Einen API-Endpunkt für die konfigurierte Ressource schützen
app.get(
  '/notes',
  mcpAuth.bearerAuth('jwt', {
    resource: resourceIdentifier, // Gibt an, zu welcher Ressource dieser Endpunkt gehört
    audience: resourceIdentifier, // Optional: das 'aud'-Claim validieren
    requiredScopes: ['read:notes'],
  }),
  (req, res) => {
    console.log('Auth info:', req.auth);
    res.json({ notes: [] });
  },
);

Legacy-Verwendung im Authorization Server-Modus (Veraltet)

Dieser Ansatz wird aus Gründen der Abwärtskompatibilität unterstützt.

import express from 'express';
import { MCPAuth } from 'mcp-auth';

const app = express();
const mcpAuth = new MCPAuth({
  // Discovery-Konfiguration – Metadaten werden bei Bedarf abgerufen
  server: { issuer: 'https://auth.logto.io/oidc', type: 'oidc' },
});

// Router für Legacy Authorization Server Metadata einbinden
app.use(mcpAuth.delegatedRouter());

// Einen Endpunkt mit der Standardrichtlinie schützen
app.get(
  '/mcp',
  mcpAuth.bearerAuth('jwt', { requiredScopes: ['read', 'write'] }),
  (req, res) => {
    console.log('Auth info:', req.auth);
    // Hier die MCP-Anfrage bearbeiten
  },
);

Konstruktoren

Konstruktor

new MCPAuth(config: MCPAuthConfig): MCPAuth;

Erstellt eine Instanz von MCPAuth. Die gesamte Konfiguration wird im Voraus validiert, um Fehler frühzeitig zu erkennen.

Parameter

config

MCPAuthConfig

Die Authentifizierungskonfiguration.

Rückgabewert

MCPAuth

Eigenschaften

config

readonly config: MCPAuthConfig;

Die Authentifizierungskonfiguration.

Methoden

bearerAuth()

Aufrufsignatur

bearerAuth(verifyAccessToken: VerifyAccessTokenFunction, config?: Omit<BearerAuthConfig, "issuer" | "verifyAccessToken">): RequestHandler;

Erstellt einen Bearer-Auth-Handler (Express-Middleware), der das Zugangstoken (Access token) im Authorization-Header der Anfrage überprüft.

Parameter
verifyAccessToken

VerifyAccessTokenFunction

Eine Funktion, die das Zugangstoken (Access token) überprüft. Sie sollte das Zugangstoken als String akzeptieren und ein Promise (oder einen Wert) zurückgeben, das/die das Überprüfungsergebnis liefert.

Siehe

VerifyAccessTokenFunction für die Typdefinition der verifyAccessToken-Funktion.

config?

Omit<BearerAuthConfig, "issuer" | "verifyAccessToken">

Optionale Konfiguration für den Bearer-Auth-Handler.

Siehe

BearerAuthConfig für die verfügbaren Konfigurationsoptionen (ohne verifyAccessToken und issuer).

Rückgabewert

RequestHandler

Eine Express-Middleware-Funktion, die das Zugangstoken (Access token) überprüft und das Überprüfungsergebnis dem Request-Objekt (req.auth) hinzufügt.

Siehe

handleBearerAuth für die Implementierungsdetails und die erweiterten Typen des req.auth (AuthInfo) Objekts.

Aufrufsignatur

bearerAuth(mode: "jwt", config?: Omit<BearerAuthConfig, "issuer" | "verifyAccessToken"> & VerifyJwtConfig): RequestHandler;

Erstellt einen Bearer-Auth-Handler (Express-Middleware), der das Zugangstoken (Access token) im Authorization-Header der Anfrage mit einem vordefinierten Verifizierungsmodus überprüft.

Im 'jwt'-Modus erstellt der Handler eine JWT-Überprüfungsfunktion unter Verwendung des JWK-Sets von der JWKS-URI des Authorization Servers.

Parameter
mode

"jwt"

Der Verifizierungsmodus für das Zugangstoken (Access token). Derzeit wird nur 'jwt' unterstützt.

Siehe

VerifyAccessTokenMode für die verfügbaren Modi.

config?

Omit<BearerAuthConfig, "issuer" | "verifyAccessToken"> & VerifyJwtConfig

Optionale Konfiguration für den Bearer-Auth-Handler, einschließlich JWT-Überprüfungsoptionen und Remote-JWK-Set-Optionen.

Siehe

  • VerifyJwtConfig für die verfügbaren Konfigurationsoptionen für die JWT- Überprüfung.
  • BearerAuthConfig für die verfügbaren Konfigurationsoptionen (ohne verifyAccessToken und issuer).
Rückgabewert

RequestHandler

Eine Express-Middleware-Funktion, die das Zugangstoken (Access token) überprüft und das Überprüfungsergebnis dem Request-Objekt (req.auth) hinzufügt.

Siehe

handleBearerAuth für die Implementierungsdetails und die erweiterten Typen des req.auth (AuthInfo) Objekts.

Wirft

wenn die JWKS-URI in den Server-Metadaten nicht angegeben ist, wenn der 'jwt'-Modus verwendet wird.


delegatedRouter()

delegatedRouter(): Router;

Erstellt einen Delegated Router, um den veralteten OAuth 2.0 Authorization Server Metadata Endpoint (/.well-known/oauth-authorization-server) mit den der Instanz bereitgestellten Metadaten bereitzustellen.

Rückgabewert

Router

Ein Router, der den OAuth 2.0 Authorization Server Metadata Endpoint mit den der Instanz bereitgestellten Metadaten bereitstellt.

Veraltet

Verwende stattdessen protectedResourceMetadataRouter.

Beispiel

import express from 'express';
import { MCPAuth } from 'mcp-auth';

const app = express();
const mcpAuth: MCPAuth; // Angenommen, dies ist initialisiert
app.use(mcpAuth.delegatedRouter());

Wirft

Wenn im Resource Server-Modus aufgerufen.


protectedResourceMetadataRouter()

protectedResourceMetadataRouter(): Router;

Erstellt einen Router, der den OAuth 2.0 Protected Resource Metadata Endpoint für alle konfigurierten Ressourcen bereitstellt.

Dieser Router erstellt automatisch die korrekten .well-known-Endpunkte für jede Ressourcenkennung, die in deiner Konfiguration angegeben ist.

Rückgabewert

Router

Ein Router, der den OAuth 2.0 Protected Resource Metadata Endpoint bereitstellt.

Wirft

Wenn im Authorization Server-Modus aufgerufen.

Beispiel

import express from 'express';
import { MCPAuth } from 'mcp-auth';

// Angenommen, mcpAuth ist mit einer oder mehreren `protectedResources`-Konfigurationen initialisiert
const mcpAuth: MCPAuth;
const app = express();

// Dies stellt Metadaten unter `/.well-known/oauth-protected-resource/...` bereit
// basierend auf deinen Ressourcenkennungen.
app.use(mcpAuth.protectedResourceMetadataRouter());