[PR #20137] [CLOSED] fix: resolve MCP OAuth 2.1 token refresh failure after access token expiration #25478

Closed
opened 2026-04-20 05:57:14 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/open-webui/pull/20137
Author: @imsamurai
Created: 12/23/2025
Status: Closed

Base: devHead: main


📝 Commits (9)

📊 Changes

1 file changed (+4 additions, -4 deletions)

View changed files

📝 backend/open_webui/utils/oauth.py (+4 -4)

📄 Description

Description

This pull request fixes an OAuth 2.1 token refresh issue for MCP integrations in Open WebUI.

When an MCP access token expires, Open WebUI fails to refresh it due to an incorrect client resolution inside the OpenID metadata lookup logic. This results in an exception during token refresh and prevents MCP usage in chat after token expiration.

The issue was caused by outdated logic in get_server_metadata_url, which attempted to resolve OpenID configuration without using the proper client retrieval mechanism.

This PR updates the implementation to consistently use get_client when resolving the OpenID metadata URL, ensuring the correct client configuration is used during token refresh.


How to Reproduce

  1. Add an MCP integration configured with OAuth 2.1 and complete registration
  2. Authorize the MCP integration
  3. Wait until the access token expires
  4. Attempt to add or use the MCP in chat

Observed Error

ERROR | open_webui.utils.oauth:_perform_token_refresh:764 - Exception during token refresh for client_id mcp:mcp_name: Constructor parameter should be str
ERROR | open_webui.utils.oauth:_refresh_token:669 - Failed to refresh token for session xxx

Root Cause

Before performing a token refresh, Open WebUI resolves the OpenID configuration URL to determine the refresh endpoint.

The function get_server_metadata_url used outdated logic and did not retrieve the OAuth client in the same way as the rest of the OAuth flow. This caused an invalid client configuration to be used, leading to a runtime exception during token refresh.


Solution

  • Updated get_server_metadata_url to retrieve the OAuth client via get_client
  • Ensured consistent and correct client resolution for OpenID metadata lookup
  • Prevented invalid constructor parameters during token refresh

Manual Testing

After applying the fix:

  • Token refresh is triggered correctly after access token expiration
  • MCP can be added and used in chat without errors

Result

Successfully refreshed token for session

Changelog Entry

Description

Fix OAuth 2.1 token refresh failure for MCP integrations caused by incorrect OpenID client resolution.

Fixed

  • Fixed exception during MCP OAuth token refresh after access token expiration
  • Restored ability to use MCP integrations in chat after token expiry

Additional Information

  • Affects MCP integrations using OAuth 2.1
  • No new dependencies introduced
  • No documentation changes required

Contributor License Agreement

By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/open-webui/pull/20137 **Author:** [@imsamurai](https://github.com/imsamurai) **Created:** 12/23/2025 **Status:** ❌ Closed **Base:** `dev` ← **Head:** `main` --- ### 📝 Commits (9) - [`fe6783c`](https://github.com/open-webui/open-webui/commit/fe6783c16699911c7be17392596d579333fb110c) Merge pull request #19030 from open-webui/dev - [`fc05e0a`](https://github.com/open-webui/open-webui/commit/fc05e0a6c5d39da60b603b4d520f800d6e36f748) Merge pull request #19405 from open-webui/dev - [`e3faec6`](https://github.com/open-webui/open-webui/commit/e3faec62c58e3a83d89aa3df539feacefa125e0c) Merge pull request #19416 from open-webui/dev - [`9899293`](https://github.com/open-webui/open-webui/commit/9899293f050ad50ae12024cbebee7e018acd851e) Merge pull request #19448 from open-webui/dev - [`140605e`](https://github.com/open-webui/open-webui/commit/140605e660b8186a7d5c79fb3be6ffb147a2f498) Merge pull request #19462 from open-webui/dev - [`6f1486f`](https://github.com/open-webui/open-webui/commit/6f1486ffd0cb288d0e21f41845361924e0d742b3) Merge pull request #19466 from open-webui/dev - [`d95f533`](https://github.com/open-webui/open-webui/commit/d95f533214e3fe5beb5e41ec1f349940bc4c7043) Merge pull request #19729 from open-webui/dev - [`a727153`](https://github.com/open-webui/open-webui/commit/a7271532f8a38da46785afcaa7e65f9a45e7d753) 0.6.43 (#20093) - [`1174a2d`](https://github.com/open-webui/open-webui/commit/1174a2d714c5f3b5d99905136dd3a725e264e63a) Fix mcp oauth token refresh ### 📊 Changes **1 file changed** (+4 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `backend/open_webui/utils/oauth.py` (+4 -4) </details> ### 📄 Description ## Description This pull request fixes an OAuth 2.1 token refresh issue for MCP integrations in Open WebUI. When an MCP access token expires, Open WebUI fails to refresh it due to an incorrect client resolution inside the OpenID metadata lookup logic. This results in an exception during token refresh and prevents MCP usage in chat after token expiration. The issue was caused by outdated logic in `get_server_metadata_url`, which attempted to resolve OpenID configuration without using the proper client retrieval mechanism. This PR updates the implementation to consistently use `get_client` when resolving the OpenID metadata URL, ensuring the correct client configuration is used during token refresh. --- ## How to Reproduce 1. Add an MCP integration configured with OAuth 2.1 and complete registration 2. Authorize the MCP integration 3. Wait until the access token expires 4. Attempt to add or use the MCP in chat ### Observed Error ``` ERROR | open_webui.utils.oauth:_perform_token_refresh:764 - Exception during token refresh for client_id mcp:mcp_name: Constructor parameter should be str ERROR | open_webui.utils.oauth:_refresh_token:669 - Failed to refresh token for session xxx ``` --- ## Root Cause Before performing a token refresh, Open WebUI resolves the OpenID configuration URL to determine the refresh endpoint. The function `get_server_metadata_url` used outdated logic and did not retrieve the OAuth client in the same way as the rest of the OAuth flow. This caused an invalid client configuration to be used, leading to a runtime exception during token refresh. --- ## Solution * Updated `get_server_metadata_url` to retrieve the OAuth client via `get_client` * Ensured consistent and correct client resolution for OpenID metadata lookup * Prevented invalid constructor parameters during token refresh --- ## Manual Testing After applying the fix: * Token refresh is triggered correctly after access token expiration * MCP can be added and used in chat without errors ### Result ``` Successfully refreshed token for session ``` --- # Changelog Entry ### Description Fix OAuth 2.1 token refresh failure for MCP integrations caused by incorrect OpenID client resolution. ### Fixed * Fixed exception during MCP OAuth token refresh after access token expiration * Restored ability to use MCP integrations in chat after token expiry --- ### Additional Information * Affects MCP integrations using OAuth 2.1 * No new dependencies introduced * No documentation changes required --- ### Contributor License Agreement By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](https://github.com/open-webui/open-webui/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-20 05:57:14 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#25478