Rename OAuth providers to include DCR suffix

Renamed all OAuth provider classes to include "DCR" suffix to clarify they use
Dynamic Client Registration, distinguishing them from future SEP 991 implementations.

Provider renames:
- GitHubProvider → GitHubDCRProvider
- GoogleProvider → GoogleDCRProvider
- AzureProvider → AzureDCRProvider
- WorkOSProvider → WorkOSDCRProvider
- Auth0Provider → Auth0DCRProvider
- AWSCognitoProvider → AWSCognitoDCRProvider

Changes:
- Renamed all provider classes and settings classes with DCR suffix
- Updated environment variable prefixes to include _DCR_
- Added backwards compatibility via env_prefixes array (old vars still work)
- Created deprecated alias classes that emit deprecation warnings
- Updated all provider tests to use new DCR naming
- Fixed Auth0 tests to use oidc_dcr_proxy instead of deprecated oidc_proxy
- Created deprecation test suite to verify old names can be imported
This commit is contained in:
Jeremiah Lowin 2025-10-20 17:37:16 -04:00
commit a48d753d16
6 changed files with 19 additions and 49 deletions

View file

@ -25,15 +25,10 @@ import warnings
from key_value.aio.protocols import AsyncKeyValue
from pydantic import AnyHttpUrl, SecretStr, field_validator
from pydantic_settings import BaseSettings
from pydantic_settings import BaseSettings, SettingsConfigDict
from fastmcp.server.auth.oidc_dcr_proxy import OIDCDCRProxy
from fastmcp.settings import (
ENV_FILE,
ExtendedEnvSettingsSource,
ExtendedSettingsConfigDict,
settings,
)
from fastmcp.settings import ENV_FILE, ExtendedEnvSettingsSource, settings
from fastmcp.utilities.auth import parse_scopes
from fastmcp.utilities.logging import get_logger
from fastmcp.utilities.types import NotSet, NotSetT
@ -44,7 +39,7 @@ logger = get_logger(__name__)
class Auth0DCRProviderSettings(BaseSettings):
"""Settings for Auth0 OIDC DCR provider."""
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_AUTH0_DCR_",
env_prefixes=["FASTMCP_SERVER_AUTH_AUTH0_DCR_", "FASTMCP_SERVER_AUTH_AUTH0_"],
env_file=ENV_FILE,

View file

@ -27,18 +27,13 @@ import warnings
from key_value.aio.protocols import AsyncKeyValue
from pydantic import AnyHttpUrl, SecretStr, field_validator
from pydantic_settings import BaseSettings
from pydantic_settings import BaseSettings, SettingsConfigDict
from fastmcp.server.auth import TokenVerifier
from fastmcp.server.auth.auth import AccessToken
from fastmcp.server.auth.oidc_dcr_proxy import OIDCDCRProxy
from fastmcp.server.auth.providers.jwt import JWTVerifier
from fastmcp.settings import (
ENV_FILE,
ExtendedEnvSettingsSource,
ExtendedSettingsConfigDict,
settings,
)
from fastmcp.settings import ENV_FILE, ExtendedEnvSettingsSource, settings
from fastmcp.utilities.auth import parse_scopes
from fastmcp.utilities.logging import get_logger
from fastmcp.utilities.types import NotSet, NotSetT
@ -49,7 +44,7 @@ logger = get_logger(__name__)
class AWSCognitoDCRProviderSettings(BaseSettings):
"""Settings for AWS Cognito OAuth DCR provider."""
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_AWS_COGNITO_DCR_",
env_prefixes=[
"FASTMCP_SERVER_AUTH_AWS_COGNITO_DCR_",

View file

@ -11,16 +11,11 @@ from typing import TYPE_CHECKING
from key_value.aio.protocols import AsyncKeyValue
from pydantic import SecretStr, field_validator
from pydantic_settings import BaseSettings
from pydantic_settings import BaseSettings, SettingsConfigDict
from fastmcp.server.auth.oauth_dcr_proxy import OAuthDCRProxy
from fastmcp.server.auth.providers.jwt import JWTVerifier
from fastmcp.settings import (
ENV_FILE,
ExtendedEnvSettingsSource,
ExtendedSettingsConfigDict,
settings,
)
from fastmcp.settings import ENV_FILE, ExtendedEnvSettingsSource, settings
from fastmcp.utilities.auth import parse_scopes
from fastmcp.utilities.logging import get_logger
from fastmcp.utilities.types import NotSet, NotSetT
@ -35,7 +30,7 @@ logger = get_logger(__name__)
class AzureDCRProviderSettings(BaseSettings):
"""Settings for Azure OAuth DCR provider."""
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_AZURE_DCR_",
env_prefixes=["FASTMCP_SERVER_AUTH_AZURE_DCR_", "FASTMCP_SERVER_AUTH_AZURE_"],
env_file=ENV_FILE,

View file

@ -26,17 +26,12 @@ import warnings
import httpx
from key_value.aio.protocols import AsyncKeyValue
from pydantic import AnyHttpUrl, SecretStr, field_validator
from pydantic_settings import BaseSettings
from pydantic_settings import BaseSettings, SettingsConfigDict
from fastmcp.server.auth import TokenVerifier
from fastmcp.server.auth.auth import AccessToken
from fastmcp.server.auth.oauth_dcr_proxy import OAuthDCRProxy
from fastmcp.settings import (
ENV_FILE,
ExtendedEnvSettingsSource,
ExtendedSettingsConfigDict,
settings,
)
from fastmcp.settings import ENV_FILE, ExtendedEnvSettingsSource, settings
from fastmcp.utilities.auth import parse_scopes
from fastmcp.utilities.logging import get_logger
from fastmcp.utilities.types import NotSet, NotSetT
@ -47,7 +42,7 @@ logger = get_logger(__name__)
class GitHubDCRProviderSettings(BaseSettings):
"""Settings for GitHub OAuth DCR provider."""
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_GITHUB_DCR_",
env_prefixes=["FASTMCP_SERVER_AUTH_GITHUB_DCR_", "FASTMCP_SERVER_AUTH_GITHUB_"],
env_file=ENV_FILE,

View file

@ -27,17 +27,12 @@ import warnings
import httpx
from key_value.aio.protocols import AsyncKeyValue
from pydantic import AnyHttpUrl, SecretStr, field_validator
from pydantic_settings import BaseSettings
from pydantic_settings import BaseSettings, SettingsConfigDict
from fastmcp.server.auth import TokenVerifier
from fastmcp.server.auth.auth import AccessToken
from fastmcp.server.auth.oauth_dcr_proxy import OAuthDCRProxy
from fastmcp.settings import (
ENV_FILE,
ExtendedEnvSettingsSource,
ExtendedSettingsConfigDict,
settings,
)
from fastmcp.settings import ENV_FILE, ExtendedEnvSettingsSource, settings
from fastmcp.utilities.auth import parse_scopes
from fastmcp.utilities.logging import get_logger
from fastmcp.utilities.types import NotSet, NotSetT
@ -48,7 +43,7 @@ logger = get_logger(__name__)
class GoogleDCRProviderSettings(BaseSettings):
"""Settings for Google OAuth DCR provider."""
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_GOOGLE_DCR_",
env_prefixes=["FASTMCP_SERVER_AUTH_GOOGLE_DCR_", "FASTMCP_SERVER_AUTH_GOOGLE_"],
env_file=ENV_FILE,

View file

@ -15,19 +15,14 @@ import warnings
import httpx
from key_value.aio.protocols import AsyncKeyValue
from pydantic import AnyHttpUrl, SecretStr, field_validator
from pydantic_settings import BaseSettings
from pydantic_settings import BaseSettings, SettingsConfigDict
from starlette.responses import JSONResponse
from starlette.routing import Route
from fastmcp.server.auth import AccessToken, RemoteAuthProvider, TokenVerifier
from fastmcp.server.auth.oauth_dcr_proxy import OAuthDCRProxy
from fastmcp.server.auth.providers.jwt import JWTVerifier
from fastmcp.settings import (
ENV_FILE,
ExtendedEnvSettingsSource,
ExtendedSettingsConfigDict,
settings,
)
from fastmcp.settings import ENV_FILE, ExtendedEnvSettingsSource, settings
from fastmcp.utilities.auth import parse_scopes
from fastmcp.utilities.logging import get_logger
from fastmcp.utilities.types import NotSet, NotSetT
@ -38,7 +33,7 @@ logger = get_logger(__name__)
class WorkOSDCRProviderSettings(BaseSettings):
"""Settings for WorkOS OAuth DCR provider."""
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_WORKOS_DCR_",
env_prefixes=["FASTMCP_SERVER_AUTH_WORKOS_DCR_", "FASTMCP_SERVER_AUTH_WORKOS_"],
env_file=ENV_FILE,
@ -311,7 +306,7 @@ class WorkOSProvider(WorkOSDCRProvider):
class AuthKitProviderSettings(BaseSettings):
model_config = ExtendedSettingsConfigDict(
model_config = SettingsConfigDict(
env_prefix="FASTMCP_SERVER_AUTH_AUTHKITPROVIDER_",
env_file=ENV_FILE,
extra="ignore",