Add subject and claims to AccessToken (#2686)

This commit is contained in:
Max 2026-05-26 14:13:55 +01:00 • committed by GitHub
commit 3eb579948a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 2 deletions

View file

@ -1,5 +1,5 @@
from dataclasses import dataclass
from typing import Generic, Literal, Protocol, TypeVar
from typing import Any, Generic, Literal, Protocol, TypeVar
from urllib.parse import parse_qs, urlencode, urlparse, urlunparse
from pydantic import AnyUrl, BaseModel
@ -25,6 +25,7 @@ class AuthorizationCode(BaseModel):
redirect_uri: AnyUrl
redirect_uri_provided_explicitly: bool
resource: str | None = None # RFC 8707 resource indicator
subject: str | None = None # resource owner; propagate to the issued AccessToken
class RefreshToken(BaseModel):
@ -32,6 +33,7 @@ class RefreshToken(BaseModel):
client_id: str
scopes: list[str]
expires_at: int | None = None
subject: str | None = None # resource owner; propagate to refreshed AccessTokens
class AccessToken(BaseModel):
@ -40,6 +42,8 @@ class AccessToken(BaseModel):
scopes: list[str]
expires_at: int | None = None
resource: str | None = None # RFC 8707 resource indicator
subject: str | None = None # RFC 7662/9068 `sub`: resource owner; unique only per issuer
claims: dict[str, Any] | None = None # additional claims (e.g. `iss`, `act`)
RegistrationErrorCode = Literal[

View file

@ -208,9 +208,14 @@ class Context(BaseModel, Generic[LifespanContextT, RequestT]):
related_request_id=self.request_id,
)
# TODO(maxisbey): see if this is needed otherwise remove
@property
def client_id(self) -> str | None:
"""Get the client ID if available."""
"""Get the client ID if available.
Note: this reads from the MCP request's `_meta` params, not the OAuth
bearer token. For that, use `get_access_token().client_id`.
"""
return self.request_context.meta.get("client_id") if self.request_context.meta else None # pragma: no cover
@property