942fe35719
The previous commit made audience validation too strict by requiring the MCP client ID in the audience claim. This broke Nextcloud's user_oidc JWT tokens which use the redirect URI (resource URL) as the audience instead of the client ID. Changes: - Accept tokens with MCP client ID in audience (Keycloak multi-audience) - Accept tokens with resource URL in audience (Nextcloud JWT redirect URI) - Accept tokens with no audience (backward compatibility) - Reject only tokens with "nextcloud" audience (wrong flow - Flow 2 tokens) This preserves the security boundary between Flow 1 (MCP session tokens) and Flow 2 (Nextcloud access tokens) while supporting both Keycloak's multi-audience tokens and Nextcloud's resource URL audience pattern. All OAuth tests pass, including: - test_mcp_oauth_server_connection (JWT with resource URL audience) - test_jwt_tool_list_operations (JWT token validation) - test_jwt_multiple_operations (token persistence) - test_token_exchange_basic (Keycloak multi-audience tokens) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>