Preserve empty issuer/resource paths on AuthSettings (#2987)
This commit is contained in:
parent
e9cd1692b0
commit
f41a5193f3
1 changed files with 41 additions and 2 deletions
|
|
@ -1,7 +1,8 @@
|
|||
import pytest
|
||||
from pydantic import AnyHttpUrl
|
||||
|
||||
from mcp.server.auth.routes import validate_issuer_url
|
||||
from mcp.server.auth.routes import build_metadata, validate_issuer_url
|
||||
from mcp.server.auth.settings import AuthSettings, ClientRegistrationOptions, RevocationOptions
|
||||
|
||||
|
||||
def test_validate_issuer_url_https_allowed():
|
||||
|
|
@ -45,3 +46,27 @@ def test_validate_issuer_url_fragment_rejected():
|
|||
def test_validate_issuer_url_query_rejected():
|
||||
with pytest.raises(ValueError, match="query"):
|
||||
validate_issuer_url(AnyHttpUrl("https://example.com/path?q=1"))
|
||||
|
||||
|
||||
def test_auth_settings_preserves_path_less_issuer():
|
||||
"""A path-less issuer passed as a string keeps its canonical form (no trailing slash)."""
|
||||
settings = AuthSettings(
|
||||
issuer_url="https://as.example.com", # type: ignore[arg-type]
|
||||
resource_server_url="https://rs.example.com", # type: ignore[arg-type]
|
||||
)
|
||||
assert str(settings.issuer_url) == "https://as.example.com"
|
||||
assert str(settings.resource_server_url) == "https://rs.example.com"
|
||||
|
||||
|
||||
def test_build_metadata_serves_issuer_without_trailing_slash():
|
||||
"""The served issuer matches the configured one exactly (RFC 8414/9207 string comparison)."""
|
||||
settings = AuthSettings(
|
||||
issuer_url="https://as.example.com", # type: ignore[arg-type]
|
||||
resource_server_url="https://rs.example.com", # type: ignore[arg-type]
|
||||
)
|
||||
metadata = build_metadata(settings.issuer_url, None, ClientRegistrationOptions(), RevocationOptions())
|
||||
|
||||
served = metadata.model_dump(mode="json", exclude_none=True)
|
||||
assert served["issuer"] == "https://as.example.com"
|
||||
assert served["authorization_endpoint"] == "https://as.example.com/authorize"
|
||||
assert served["token_endpoint"] == "https://as.example.com/token"
|
||||
|
|
|
|||
Loading…
Reference in a new issue