fix: verify MCP tokens against the MCP application's issuer
Second failure on the same path. With the aud fix in place, tokens now carry `aud: shared-memory` correctly but are still rejected — this time on `iss`. The MCP endpoint is a separate application in the IdP from the Web UI, and Authentik's default per_provider issuer mode stamps each token with its own application slug. MCP tokens therefore carry `.../application/o/shared-memory-mcp/` while OIDC_ISSUER points at `.../application/o/shared-memory/`, so jwtVerify throws "claim invalid: iss". Introduce OIDC_ISSUER_MCP (defaults to OIDC_ISSUER) and use it for both the issuer check and the JWKS URL. The protected-resource metadata now advertises that same issuer — previously it pointed clients at the Web UI's discovery document while the tokens came from the MCP provider. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,11 @@ ACME_EMAIL=you@example.com
|
||||
# resource server). See README.md for exact provider settings.
|
||||
# -----------------------------------------------------------------------------
|
||||
OIDC_ISSUER=https://auth.example.com/application/o/shared-memory/
|
||||
# Issuer of MCP access tokens, when the MCP endpoint is a separate application
|
||||
# in your IdP (it usually is). Authentik stamps each token with its own app
|
||||
# slug, so verifying MCP tokens against OIDC_ISSUER fails with
|
||||
# "claim invalid: iss". Defaults to OIDC_ISSUER.
|
||||
OIDC_ISSUER_MCP=https://auth.example.com/application/o/shared-memory-mcp/
|
||||
OIDC_CLIENT_ID_WEB=replace-me
|
||||
OIDC_CLIENT_SECRET_WEB=replace-me
|
||||
OIDC_CLIENT_ID_MCP=replace-me
|
||||
|
||||
Reference in New Issue
Block a user