33
44from .middleware .create_bearer_auth import BaseBearerAuthConfig , BearerAuthConfig
55from .types import VerifyAccessTokenFunction
6- from .utils .fetch_server_config import ServerMetadataPaths
76from .config import MCPAuthConfig
87from .exceptions import MCPAuthAuthServerException , AuthServerExceptionCode
9- from .utils .validate_server_config import validate_server_config
10- from starlette .middleware .base import BaseHTTPMiddleware , RequestResponseEndpoint
11- from starlette .requests import Request
12- from starlette .responses import Response , JSONResponse
8+ from .utils import validate_server_config
9+ from starlette .middleware .base import BaseHTTPMiddleware
10+ from starlette .responses import JSONResponse
1311
1412
1513class MCPAuth :
14+ """
15+ The main class for the mcp-auth library, which provides methods for creating middleware
16+ functions for handling OAuth 2.0-related tasks and bearer token auth.
17+
18+ See Also: https://mcp-auth.dev for more information about the library and its usage.
19+
20+ :param config: An instance of `MCPAuthConfig` containing the server configuration.
21+ """
22+
1623 def __init__ (self , config : MCPAuthConfig ):
1724 result = validate_server_config (config .server )
1825
@@ -32,41 +39,24 @@ def __init__(self, config: MCPAuthConfig):
3239
3340 self .config = config
3441
35- def delegated_middleware (self ) -> type [ BaseHTTPMiddleware ] :
42+ def metadata_response (self ) -> JSONResponse :
3643 """
37- Returns a middleware that handles OAuth 2.0 Authorization Metadata endpoint
38- (`/.well-known/oauth-authorization-server`) with CORS support (delegated mode).
39-
40- :return: A middleware class that can be used in a Starlette or FastAPI application.
44+ Returns a response containing the server metadata in JSON format with CORS support.
4145 """
4246 server_config = self .config .server
4347
44- class DelegatedMiddleware (BaseHTTPMiddleware ):
45- async def dispatch (
46- self , request : Request , call_next : RequestResponseEndpoint
47- ) -> Response :
48- path = request .url .path
49- if path == ServerMetadataPaths .OAUTH :
50- response = JSONResponse (
51- {
52- k : v
53- for k , v in server_config .metadata .model_dump ().items ()
54- if v is not None
55- },
56- status_code = 200 ,
57- )
58- response .headers ["Access-Control-Allow-Origin" ] = "*"
59- response .headers ["Access-Control-Allow-Methods" ] = "GET, OPTIONS"
60- return response
61- else :
62- return await call_next (request )
63-
64- return DelegatedMiddleware
48+ response = JSONResponse (
49+ server_config .metadata .model_dump (exclude_none = True ),
50+ status_code = 200 ,
51+ )
52+ response .headers ["Access-Control-Allow-Origin" ] = "*"
53+ response .headers ["Access-Control-Allow-Methods" ] = "GET, OPTIONS"
54+ return response
6555
6656 def bearer_auth_middleware (
6757 self ,
6858 mode_or_verify : Union [Literal ["jwt" ], VerifyAccessTokenFunction ],
69- config : BaseBearerAuthConfig ,
59+ config : BaseBearerAuthConfig = BaseBearerAuthConfig () ,
7060 jwt_options : dict [str , Any ] = {},
7161 ) -> type [BaseHTTPMiddleware ]:
7262 """
@@ -83,7 +73,7 @@ def bearer_auth_middleware(
8373
8474 metadata = self .config .server .metadata
8575 if isinstance (mode_or_verify , str ) and mode_or_verify == "jwt" :
86- from .utils . create_verify_jwt import create_verify_jwt
76+ from .utils import create_verify_jwt
8777
8878 if not metadata .jwks_uri :
8979 raise MCPAuthAuthServerException (
0 commit comments