fastmcp 2.14.4__py3-none-any.whl → 3.0.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fastmcp/_vendor/__init__.py +1 -0
- fastmcp/_vendor/docket_di/README.md +7 -0
- fastmcp/_vendor/docket_di/__init__.py +163 -0
- fastmcp/cli/cli.py +112 -28
- fastmcp/cli/install/claude_code.py +1 -5
- fastmcp/cli/install/claude_desktop.py +1 -5
- fastmcp/cli/install/cursor.py +1 -5
- fastmcp/cli/install/gemini_cli.py +1 -5
- fastmcp/cli/install/mcp_json.py +1 -6
- fastmcp/cli/run.py +146 -5
- fastmcp/client/__init__.py +7 -9
- fastmcp/client/auth/oauth.py +18 -17
- fastmcp/client/client.py +100 -870
- fastmcp/client/elicitation.py +1 -1
- fastmcp/client/mixins/__init__.py +13 -0
- fastmcp/client/mixins/prompts.py +295 -0
- fastmcp/client/mixins/resources.py +325 -0
- fastmcp/client/mixins/task_management.py +157 -0
- fastmcp/client/mixins/tools.py +397 -0
- fastmcp/client/sampling/handlers/anthropic.py +2 -2
- fastmcp/client/sampling/handlers/openai.py +1 -1
- fastmcp/client/tasks.py +3 -3
- fastmcp/client/telemetry.py +47 -0
- fastmcp/client/transports/__init__.py +38 -0
- fastmcp/client/transports/base.py +82 -0
- fastmcp/client/transports/config.py +170 -0
- fastmcp/client/transports/http.py +145 -0
- fastmcp/client/transports/inference.py +154 -0
- fastmcp/client/transports/memory.py +90 -0
- fastmcp/client/transports/sse.py +89 -0
- fastmcp/client/transports/stdio.py +543 -0
- fastmcp/contrib/component_manager/README.md +4 -10
- fastmcp/contrib/component_manager/__init__.py +1 -2
- fastmcp/contrib/component_manager/component_manager.py +95 -160
- fastmcp/contrib/component_manager/example.py +1 -1
- fastmcp/contrib/mcp_mixin/example.py +4 -4
- fastmcp/contrib/mcp_mixin/mcp_mixin.py +11 -4
- fastmcp/decorators.py +41 -0
- fastmcp/dependencies.py +12 -1
- fastmcp/exceptions.py +4 -0
- fastmcp/experimental/server/openapi/__init__.py +18 -15
- fastmcp/mcp_config.py +13 -4
- fastmcp/prompts/__init__.py +6 -3
- fastmcp/prompts/function_prompt.py +465 -0
- fastmcp/prompts/prompt.py +321 -271
- fastmcp/resources/__init__.py +5 -3
- fastmcp/resources/function_resource.py +335 -0
- fastmcp/resources/resource.py +325 -115
- fastmcp/resources/template.py +215 -43
- fastmcp/resources/types.py +27 -12
- fastmcp/server/__init__.py +2 -2
- fastmcp/server/auth/__init__.py +14 -0
- fastmcp/server/auth/auth.py +30 -10
- fastmcp/server/auth/authorization.py +190 -0
- fastmcp/server/auth/oauth_proxy/__init__.py +14 -0
- fastmcp/server/auth/oauth_proxy/consent.py +361 -0
- fastmcp/server/auth/oauth_proxy/models.py +178 -0
- fastmcp/server/auth/{oauth_proxy.py → oauth_proxy/proxy.py} +24 -778
- fastmcp/server/auth/oauth_proxy/ui.py +277 -0
- fastmcp/server/auth/oidc_proxy.py +2 -2
- fastmcp/server/auth/providers/auth0.py +24 -94
- fastmcp/server/auth/providers/aws.py +26 -95
- fastmcp/server/auth/providers/azure.py +41 -129
- fastmcp/server/auth/providers/descope.py +18 -49
- fastmcp/server/auth/providers/discord.py +25 -86
- fastmcp/server/auth/providers/github.py +23 -87
- fastmcp/server/auth/providers/google.py +24 -87
- fastmcp/server/auth/providers/introspection.py +60 -79
- fastmcp/server/auth/providers/jwt.py +30 -67
- fastmcp/server/auth/providers/oci.py +47 -110
- fastmcp/server/auth/providers/scalekit.py +23 -61
- fastmcp/server/auth/providers/supabase.py +18 -47
- fastmcp/server/auth/providers/workos.py +34 -127
- fastmcp/server/context.py +372 -419
- fastmcp/server/dependencies.py +541 -251
- fastmcp/server/elicitation.py +20 -18
- fastmcp/server/event_store.py +3 -3
- fastmcp/server/http.py +16 -6
- fastmcp/server/lifespan.py +198 -0
- fastmcp/server/low_level.py +92 -2
- fastmcp/server/middleware/__init__.py +5 -1
- fastmcp/server/middleware/authorization.py +312 -0
- fastmcp/server/middleware/caching.py +101 -54
- fastmcp/server/middleware/middleware.py +6 -9
- fastmcp/server/middleware/ping.py +70 -0
- fastmcp/server/middleware/tool_injection.py +2 -2
- fastmcp/server/mixins/__init__.py +7 -0
- fastmcp/server/mixins/lifespan.py +217 -0
- fastmcp/server/mixins/mcp_operations.py +392 -0
- fastmcp/server/mixins/transport.py +342 -0
- fastmcp/server/openapi/__init__.py +41 -21
- fastmcp/server/openapi/components.py +16 -339
- fastmcp/server/openapi/routing.py +34 -118
- fastmcp/server/openapi/server.py +67 -392
- fastmcp/server/providers/__init__.py +71 -0
- fastmcp/server/providers/aggregate.py +261 -0
- fastmcp/server/providers/base.py +578 -0
- fastmcp/server/providers/fastmcp_provider.py +674 -0
- fastmcp/server/providers/filesystem.py +226 -0
- fastmcp/server/providers/filesystem_discovery.py +327 -0
- fastmcp/server/providers/local_provider/__init__.py +11 -0
- fastmcp/server/providers/local_provider/decorators/__init__.py +15 -0
- fastmcp/server/providers/local_provider/decorators/prompts.py +256 -0
- fastmcp/server/providers/local_provider/decorators/resources.py +240 -0
- fastmcp/server/providers/local_provider/decorators/tools.py +315 -0
- fastmcp/server/providers/local_provider/local_provider.py +465 -0
- fastmcp/server/providers/openapi/__init__.py +39 -0
- fastmcp/server/providers/openapi/components.py +332 -0
- fastmcp/server/providers/openapi/provider.py +405 -0
- fastmcp/server/providers/openapi/routing.py +109 -0
- fastmcp/server/providers/proxy.py +867 -0
- fastmcp/server/providers/skills/__init__.py +59 -0
- fastmcp/server/providers/skills/_common.py +101 -0
- fastmcp/server/providers/skills/claude_provider.py +44 -0
- fastmcp/server/providers/skills/directory_provider.py +153 -0
- fastmcp/server/providers/skills/skill_provider.py +432 -0
- fastmcp/server/providers/skills/vendor_providers.py +142 -0
- fastmcp/server/providers/wrapped_provider.py +140 -0
- fastmcp/server/proxy.py +34 -700
- fastmcp/server/sampling/run.py +341 -2
- fastmcp/server/sampling/sampling_tool.py +4 -3
- fastmcp/server/server.py +1214 -2171
- fastmcp/server/tasks/__init__.py +2 -1
- fastmcp/server/tasks/capabilities.py +13 -1
- fastmcp/server/tasks/config.py +66 -3
- fastmcp/server/tasks/handlers.py +65 -273
- fastmcp/server/tasks/keys.py +4 -6
- fastmcp/server/tasks/requests.py +474 -0
- fastmcp/server/tasks/routing.py +76 -0
- fastmcp/server/tasks/subscriptions.py +20 -11
- fastmcp/server/telemetry.py +131 -0
- fastmcp/server/transforms/__init__.py +244 -0
- fastmcp/server/transforms/namespace.py +193 -0
- fastmcp/server/transforms/prompts_as_tools.py +175 -0
- fastmcp/server/transforms/resources_as_tools.py +190 -0
- fastmcp/server/transforms/tool_transform.py +96 -0
- fastmcp/server/transforms/version_filter.py +124 -0
- fastmcp/server/transforms/visibility.py +526 -0
- fastmcp/settings.py +34 -96
- fastmcp/telemetry.py +122 -0
- fastmcp/tools/__init__.py +10 -3
- fastmcp/tools/function_parsing.py +201 -0
- fastmcp/tools/function_tool.py +467 -0
- fastmcp/tools/tool.py +215 -362
- fastmcp/tools/tool_transform.py +38 -21
- fastmcp/utilities/async_utils.py +69 -0
- fastmcp/utilities/components.py +152 -91
- fastmcp/utilities/inspect.py +8 -20
- fastmcp/utilities/json_schema.py +12 -5
- fastmcp/utilities/json_schema_type.py +17 -15
- fastmcp/utilities/lifespan.py +56 -0
- fastmcp/utilities/logging.py +12 -4
- fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +3 -3
- fastmcp/utilities/openapi/parser.py +3 -3
- fastmcp/utilities/pagination.py +80 -0
- fastmcp/utilities/skills.py +253 -0
- fastmcp/utilities/tests.py +0 -16
- fastmcp/utilities/timeout.py +47 -0
- fastmcp/utilities/types.py +1 -1
- fastmcp/utilities/versions.py +285 -0
- {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/METADATA +8 -5
- fastmcp-3.0.0b1.dist-info/RECORD +228 -0
- fastmcp/client/transports.py +0 -1170
- fastmcp/contrib/component_manager/component_service.py +0 -209
- fastmcp/prompts/prompt_manager.py +0 -117
- fastmcp/resources/resource_manager.py +0 -338
- fastmcp/server/tasks/converters.py +0 -206
- fastmcp/server/tasks/protocol.py +0 -359
- fastmcp/tools/tool_manager.py +0 -170
- fastmcp/utilities/mcp_config.py +0 -56
- fastmcp-2.14.4.dist-info/RECORD +0 -161
- /fastmcp/server/{openapi → providers/openapi}/README.md +0 -0
- {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/WHEEL +0 -0
- {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/entry_points.txt +0 -0
- {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/licenses/LICENSE +0 -0
|
@@ -12,48 +12,19 @@ from __future__ import annotations
|
|
|
12
12
|
|
|
13
13
|
import httpx
|
|
14
14
|
from key_value.aio.protocols import AsyncKeyValue
|
|
15
|
-
from pydantic import AnyHttpUrl
|
|
16
|
-
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
15
|
+
from pydantic import AnyHttpUrl
|
|
17
16
|
from starlette.responses import JSONResponse
|
|
18
17
|
from starlette.routing import Route
|
|
19
18
|
|
|
20
19
|
from fastmcp.server.auth import AccessToken, RemoteAuthProvider, TokenVerifier
|
|
21
20
|
from fastmcp.server.auth.oauth_proxy import OAuthProxy
|
|
22
21
|
from fastmcp.server.auth.providers.jwt import JWTVerifier
|
|
23
|
-
from fastmcp.settings import ENV_FILE
|
|
24
22
|
from fastmcp.utilities.auth import parse_scopes
|
|
25
23
|
from fastmcp.utilities.logging import get_logger
|
|
26
|
-
from fastmcp.utilities.types import NotSet, NotSetT
|
|
27
24
|
|
|
28
25
|
logger = get_logger(__name__)
|
|
29
26
|
|
|
30
27
|
|
|
31
|
-
class WorkOSProviderSettings(BaseSettings):
|
|
32
|
-
"""Settings for WorkOS OAuth provider."""
|
|
33
|
-
|
|
34
|
-
model_config = SettingsConfigDict(
|
|
35
|
-
env_prefix="FASTMCP_SERVER_AUTH_WORKOS_",
|
|
36
|
-
env_file=ENV_FILE,
|
|
37
|
-
extra="ignore",
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
client_id: str | None = None
|
|
41
|
-
client_secret: SecretStr | None = None
|
|
42
|
-
authkit_domain: str | None = None # e.g., "https://your-app.authkit.app"
|
|
43
|
-
base_url: AnyHttpUrl | str | None = None
|
|
44
|
-
issuer_url: AnyHttpUrl | str | None = None
|
|
45
|
-
redirect_path: str | None = None
|
|
46
|
-
required_scopes: list[str] | None = None
|
|
47
|
-
timeout_seconds: int | None = None
|
|
48
|
-
allowed_client_redirect_uris: list[str] | None = None
|
|
49
|
-
jwt_signing_key: str | None = None
|
|
50
|
-
|
|
51
|
-
@field_validator("required_scopes", mode="before")
|
|
52
|
-
@classmethod
|
|
53
|
-
def _parse_scopes(cls, v):
|
|
54
|
-
return parse_scopes(v)
|
|
55
|
-
|
|
56
|
-
|
|
57
28
|
class WorkOSTokenVerifier(TokenVerifier):
|
|
58
29
|
"""Token verifier for WorkOS OAuth tokens.
|
|
59
30
|
|
|
@@ -163,17 +134,17 @@ class WorkOSProvider(OAuthProxy):
|
|
|
163
134
|
def __init__(
|
|
164
135
|
self,
|
|
165
136
|
*,
|
|
166
|
-
client_id: str
|
|
167
|
-
client_secret: str
|
|
168
|
-
authkit_domain: str
|
|
169
|
-
base_url: AnyHttpUrl | str
|
|
170
|
-
issuer_url: AnyHttpUrl | str |
|
|
171
|
-
redirect_path: str |
|
|
172
|
-
required_scopes: list[str] |
|
|
173
|
-
timeout_seconds: int
|
|
174
|
-
allowed_client_redirect_uris: list[str] |
|
|
137
|
+
client_id: str,
|
|
138
|
+
client_secret: str,
|
|
139
|
+
authkit_domain: str,
|
|
140
|
+
base_url: AnyHttpUrl | str,
|
|
141
|
+
issuer_url: AnyHttpUrl | str | None = None,
|
|
142
|
+
redirect_path: str | None = None,
|
|
143
|
+
required_scopes: list[str] | None = None,
|
|
144
|
+
timeout_seconds: int = 10,
|
|
145
|
+
allowed_client_redirect_uris: list[str] | None = None,
|
|
175
146
|
client_storage: AsyncKeyValue | None = None,
|
|
176
|
-
jwt_signing_key: str | bytes |
|
|
147
|
+
jwt_signing_key: str | bytes | None = None,
|
|
177
148
|
require_authorization_consent: bool = True,
|
|
178
149
|
):
|
|
179
150
|
"""Initialize WorkOS OAuth provider.
|
|
@@ -187,7 +158,7 @@ class WorkOSProvider(OAuthProxy):
|
|
|
187
158
|
to avoid 404s during discovery when mounting under a path.
|
|
188
159
|
redirect_path: Redirect path configured in WorkOS (defaults to "/auth/callback")
|
|
189
160
|
required_scopes: Required OAuth scopes (no default)
|
|
190
|
-
timeout_seconds: HTTP request timeout for WorkOS API calls
|
|
161
|
+
timeout_seconds: HTTP request timeout for WorkOS API calls (defaults to 10)
|
|
191
162
|
allowed_client_redirect_uris: List of allowed redirect URI patterns for MCP clients.
|
|
192
163
|
If None (default), all URIs are allowed. If empty list, no URIs are allowed.
|
|
193
164
|
client_storage: Storage backend for OAuth state (client registrations, encrypted tokens).
|
|
@@ -201,102 +172,45 @@ class WorkOSProvider(OAuthProxy):
|
|
|
201
172
|
When False, authorization proceeds directly without user confirmation.
|
|
202
173
|
SECURITY WARNING: Only disable for local development or testing environments.
|
|
203
174
|
"""
|
|
204
|
-
|
|
205
|
-
settings = WorkOSProviderSettings.model_validate(
|
|
206
|
-
{
|
|
207
|
-
k: v
|
|
208
|
-
for k, v in {
|
|
209
|
-
"client_id": client_id,
|
|
210
|
-
"client_secret": client_secret,
|
|
211
|
-
"authkit_domain": authkit_domain,
|
|
212
|
-
"base_url": base_url,
|
|
213
|
-
"issuer_url": issuer_url,
|
|
214
|
-
"redirect_path": redirect_path,
|
|
215
|
-
"required_scopes": required_scopes,
|
|
216
|
-
"timeout_seconds": timeout_seconds,
|
|
217
|
-
"allowed_client_redirect_uris": allowed_client_redirect_uris,
|
|
218
|
-
"jwt_signing_key": jwt_signing_key,
|
|
219
|
-
}.items()
|
|
220
|
-
if v is not NotSet
|
|
221
|
-
}
|
|
222
|
-
)
|
|
223
|
-
|
|
224
|
-
# Validate required settings
|
|
225
|
-
if not settings.client_id:
|
|
226
|
-
raise ValueError(
|
|
227
|
-
"client_id is required - set via parameter or FASTMCP_SERVER_AUTH_WORKOS_CLIENT_ID"
|
|
228
|
-
)
|
|
229
|
-
if not settings.client_secret:
|
|
230
|
-
raise ValueError(
|
|
231
|
-
"client_secret is required - set via parameter or FASTMCP_SERVER_AUTH_WORKOS_CLIENT_SECRET"
|
|
232
|
-
)
|
|
233
|
-
if not settings.authkit_domain:
|
|
234
|
-
raise ValueError(
|
|
235
|
-
"authkit_domain is required - set via parameter or FASTMCP_SERVER_AUTH_WORKOS_AUTHKIT_DOMAIN"
|
|
236
|
-
)
|
|
237
|
-
|
|
238
175
|
# Apply defaults and ensure authkit_domain is a full URL
|
|
239
|
-
authkit_domain_str =
|
|
176
|
+
authkit_domain_str = authkit_domain
|
|
240
177
|
if not authkit_domain_str.startswith(("http://", "https://")):
|
|
241
178
|
authkit_domain_str = f"https://{authkit_domain_str}"
|
|
242
179
|
authkit_domain_final = authkit_domain_str.rstrip("/")
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
allowed_client_redirect_uris_final = settings.allowed_client_redirect_uris
|
|
246
|
-
|
|
247
|
-
# Extract secret string from SecretStr
|
|
248
|
-
client_secret_str = (
|
|
249
|
-
settings.client_secret.get_secret_value() if settings.client_secret else ""
|
|
180
|
+
scopes_final = (
|
|
181
|
+
parse_scopes(required_scopes) if required_scopes is not None else []
|
|
250
182
|
)
|
|
251
183
|
|
|
252
184
|
# Create WorkOS token verifier
|
|
253
185
|
token_verifier = WorkOSTokenVerifier(
|
|
254
186
|
authkit_domain=authkit_domain_final,
|
|
255
187
|
required_scopes=scopes_final,
|
|
256
|
-
timeout_seconds=
|
|
188
|
+
timeout_seconds=timeout_seconds,
|
|
257
189
|
)
|
|
258
190
|
|
|
259
191
|
# Initialize OAuth proxy with WorkOS AuthKit endpoints
|
|
260
192
|
super().__init__(
|
|
261
193
|
upstream_authorization_endpoint=f"{authkit_domain_final}/oauth2/authorize",
|
|
262
194
|
upstream_token_endpoint=f"{authkit_domain_final}/oauth2/token",
|
|
263
|
-
upstream_client_id=
|
|
264
|
-
upstream_client_secret=
|
|
195
|
+
upstream_client_id=client_id,
|
|
196
|
+
upstream_client_secret=client_secret,
|
|
265
197
|
token_verifier=token_verifier,
|
|
266
|
-
base_url=
|
|
267
|
-
redirect_path=
|
|
268
|
-
issuer_url=
|
|
269
|
-
|
|
270
|
-
allowed_client_redirect_uris=allowed_client_redirect_uris_final,
|
|
198
|
+
base_url=base_url,
|
|
199
|
+
redirect_path=redirect_path,
|
|
200
|
+
issuer_url=issuer_url or base_url, # Default to base_url if not specified
|
|
201
|
+
allowed_client_redirect_uris=allowed_client_redirect_uris,
|
|
271
202
|
client_storage=client_storage,
|
|
272
|
-
jwt_signing_key=
|
|
203
|
+
jwt_signing_key=jwt_signing_key,
|
|
273
204
|
require_authorization_consent=require_authorization_consent,
|
|
274
205
|
)
|
|
275
206
|
|
|
276
207
|
logger.debug(
|
|
277
208
|
"Initialized WorkOS OAuth provider for client %s with AuthKit domain %s",
|
|
278
|
-
|
|
209
|
+
client_id,
|
|
279
210
|
authkit_domain_final,
|
|
280
211
|
)
|
|
281
212
|
|
|
282
213
|
|
|
283
|
-
class AuthKitProviderSettings(BaseSettings):
|
|
284
|
-
model_config = SettingsConfigDict(
|
|
285
|
-
env_prefix="FASTMCP_SERVER_AUTH_AUTHKITPROVIDER_",
|
|
286
|
-
env_file=ENV_FILE,
|
|
287
|
-
extra="ignore",
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
authkit_domain: AnyHttpUrl
|
|
291
|
-
base_url: AnyHttpUrl
|
|
292
|
-
required_scopes: list[str] | None = None
|
|
293
|
-
|
|
294
|
-
@field_validator("required_scopes", mode="before")
|
|
295
|
-
@classmethod
|
|
296
|
-
def _parse_scopes(cls, v):
|
|
297
|
-
return parse_scopes(v)
|
|
298
|
-
|
|
299
|
-
|
|
300
214
|
class AuthKitProvider(RemoteAuthProvider):
|
|
301
215
|
"""AuthKit metadata provider for DCR (Dynamic Client Registration).
|
|
302
216
|
|
|
@@ -336,9 +250,9 @@ class AuthKitProvider(RemoteAuthProvider):
|
|
|
336
250
|
def __init__(
|
|
337
251
|
self,
|
|
338
252
|
*,
|
|
339
|
-
authkit_domain: AnyHttpUrl | str
|
|
340
|
-
base_url: AnyHttpUrl | str
|
|
341
|
-
required_scopes: list[str] |
|
|
253
|
+
authkit_domain: AnyHttpUrl | str,
|
|
254
|
+
base_url: AnyHttpUrl | str,
|
|
255
|
+
required_scopes: list[str] | None = None,
|
|
342
256
|
token_verifier: TokenVerifier | None = None,
|
|
343
257
|
):
|
|
344
258
|
"""Initialize AuthKit metadata provider.
|
|
@@ -349,20 +263,13 @@ class AuthKitProvider(RemoteAuthProvider):
|
|
|
349
263
|
required_scopes: Optional list of scopes to require for all requests
|
|
350
264
|
token_verifier: Optional token verifier. If None, creates JWT verifier for AuthKit
|
|
351
265
|
"""
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
k: v
|
|
355
|
-
for k, v in {
|
|
356
|
-
"authkit_domain": authkit_domain,
|
|
357
|
-
"base_url": base_url,
|
|
358
|
-
"required_scopes": required_scopes,
|
|
359
|
-
}.items()
|
|
360
|
-
if v is not NotSet
|
|
361
|
-
}
|
|
362
|
-
)
|
|
266
|
+
self.authkit_domain = str(authkit_domain).rstrip("/")
|
|
267
|
+
self.base_url = AnyHttpUrl(str(base_url).rstrip("/"))
|
|
363
268
|
|
|
364
|
-
|
|
365
|
-
|
|
269
|
+
# Parse scopes if provided as string
|
|
270
|
+
parsed_scopes = (
|
|
271
|
+
parse_scopes(required_scopes) if required_scopes is not None else None
|
|
272
|
+
)
|
|
366
273
|
|
|
367
274
|
# Create default JWT verifier if none provided
|
|
368
275
|
if token_verifier is None:
|
|
@@ -370,7 +277,7 @@ class AuthKitProvider(RemoteAuthProvider):
|
|
|
370
277
|
jwks_uri=f"{self.authkit_domain}/oauth2/jwks",
|
|
371
278
|
issuer=self.authkit_domain,
|
|
372
279
|
algorithm="RS256",
|
|
373
|
-
required_scopes=
|
|
280
|
+
required_scopes=parsed_scopes,
|
|
374
281
|
)
|
|
375
282
|
|
|
376
283
|
# Initialize RemoteAuthProvider with AuthKit as the authorization server
|