1- """Token verification protocol and implementations ."""
1+ """Token verification protocol."""
22
3- from typing import Any , Protocol , runtime_checkable
3+ from typing import Protocol , runtime_checkable
44
5- from mcp .server .auth .provider import AccessToken , OAuthAuthorizationServerProvider
5+ from mcp .server .auth .provider import AccessToken
66
77
88@runtime_checkable
@@ -12,49 +12,3 @@ class TokenVerifier(Protocol):
1212 async def verify_token (self , token : str ) -> AccessToken | None :
1313 """Verify a bearer token and return access info if valid."""
1414 ...
15-
16-
17- class ProviderTokenVerifier :
18- """Token verifier that uses an OAuthAuthorizationServerProvider."""
19-
20- def __init__ (self , provider : OAuthAuthorizationServerProvider [Any , Any , Any ]):
21- self .provider = provider
22-
23- async def verify_token (self , token : str ) -> AccessToken | None :
24- """Verify token using the provider's load_access_token method."""
25- return await self .provider .load_access_token (token )
26-
27-
28- class IntrospectionTokenVerifier :
29- """Token verifier that uses OAuth 2.0 Token Introspection (RFC 7662)."""
30-
31- def __init__ (self , introspection_endpoint : str ):
32- self .introspection_endpoint = introspection_endpoint
33-
34- async def verify_token (self , token : str ) -> AccessToken | None :
35- """Verify token via introspection endpoint."""
36- import httpx
37-
38- async with httpx .AsyncClient () as client :
39- try :
40- response = await client .post (
41- self .introspection_endpoint ,
42- data = {"token" : token },
43- headers = {"Content-Type" : "application/x-www-form-urlencoded" },
44- )
45-
46- if response .status_code != 200 :
47- return None
48-
49- data = response .json ()
50- if not data .get ("active" , False ):
51- return None
52-
53- return AccessToken (
54- token = token ,
55- client_id = data .get ("client_id" , "unknown" ),
56- scopes = data .get ("scope" , "" ).split () if data .get ("scope" ) else [],
57- expires_at = data .get ("exp" ),
58- )
59- except Exception :
60- return None
0 commit comments