Aller au contenu principal

Configurer MCP Auth sur le serveur MCP

Pour connecter votre serveur MCP à un fournisseur OAuth 2.1 ou OpenID Connect, vous devez configurer l’instance MCP Auth. Cela implique d’initialiser l’instance avec les métadonnées du serveur d’autorisation de votre fournisseur et de mettre en place les flux d’autorisation nécessaires.

Initialiser MCP Auth

Récupération automatique des métadonnées

La façon la plus simple d’initialiser l’instance MCP Auth est d’utiliser les fonctions intégrées qui récupèrent les métadonnées à partir d’une URL bien connue. Si votre fournisseur est conforme à l’une des normes suivantes :

Vous pouvez utiliser fetchServerConfig pour récupérer automatiquement les métadonnées en fournissant l’URL de l’issuer :

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

Si votre issuer inclut un chemin, le comportement diffère légèrement entre OAuth 2.0 et OpenID Connect :

  • OAuth 2.0 : L’URL bien connue est ajoutée au domaine de l’issuer. Par exemple, si votre issuer est https://my-project.logto.app/oauth, l’URL bien connue sera https://auth.logto.io/.well-known/oauth-authorization-server/oauth.
  • OpenID Connect : L’URL bien connue est ajoutée directement à l’issuer. Par exemple, si votre issuer est https://my-project.logto.app/oidc, l’URL bien connue sera https://auth.logto.io/oidc/.well-known/openid-configuration.

Autres méthodes d’initialisation de MCP Auth

Transpilation personnalisée des données

Dans certains cas, les métadonnées renvoyées par le fournisseur peuvent ne pas être conformes au format attendu. Si vous êtes certain que le fournisseur est conforme, vous pouvez utiliser l’option transpile_data pour modifier les métadonnées avant leur utilisation :

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']} 
    )
)

Cela vous permet de modifier l’objet de métadonnées avant qu’il ne soit utilisé par MCP Auth. Par exemple, vous pouvez ajouter ou supprimer des champs, modifier leurs valeurs ou les convertir dans un autre format.

Récupérer les métadonnées depuis une URL spécifique

Si votre fournisseur dispose d’une URL de métadonnées spécifique plutôt que des URLs standard, vous pouvez l’utiliser de manière similaire :

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

Récupérer les métadonnées depuis une URL spécifique avec transpilation personnalisée

Dans certains cas, la réponse du fournisseur peut être mal formée ou non conforme au format de métadonnées attendu. Si vous êtes certain que le fournisseur est conforme, vous pouvez transpiler les métadonnées via l’option de configuration :

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']} 
    )
)

Fournir manuellement les métadonnées

Si votre fournisseur ne prend pas en charge la récupération des métadonnées, vous pouvez fournir manuellement l’objet de métadonnées :

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

mcp_auth = MCPAuth(
    server=AuthServerConfig(
        type=AuthServerType.OIDC,  # ou AuthServerType.OAUTH
        metadata=AuthorizationServerMetadata(
            issuer='<issuer-url>',
            authorization_endpoint='<authorization-endpoint-url>',
            # ... autres champs de métadonnées
        ),
    )
)