Repository navigation
[Bug]: Private Azure blob URLs break browser images, downloads and conversation history #16628
Description
What happened?
With fileStrategy: azure_blob and anonymous blob access disabled, browser-facing file metadata still contains raw Azure blob URLs. Images and file downloads fail with 409 Public access is not permitted, even when server-side reads work through the authenticated Azure client.
Reopening a conversation can expose the same inaccessible URLs from stored message attachments.
Expected: logged-in users can view and download private Azure files without enabling anonymous storage access, while preserving file ACLs and tenant checks.
Version Information
LibreChat version: v0.8.8
Commit: e8f3be08623663d4ad7f7241e693c94469b63bb0
Branch: v0.8.8
Build date: 2026-10-01 03:28:25 UTC
User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0
Steps to Reproduce
- Configure
fileStrategy: azure_blob, valid Azure credentials andAZURE_STORAGE_PUBLIC_ACCESS=false. Disable anonymous blob access on the storage account. - Upload an image and inspect its browser request URL.
- Reopen the conversation and try viewing/downloading its attachments.
The browser receives a private https://<account>.blob.core.windows.net/... URL and cannot authenticate to Azure.
Possible fix
Return an authorized browser URL instead of the raw storage URL, including in upload responses, generated artifacts and conversation history. A same-origin download route needs authentication suitable for image/link requests, which cannot attach a bearer header.
Related: #13340, #14955, #13411 and #13245. This report concerns the remaining browser-facing paths in v0.8.8 after authenticated server-side reads.
Activity
mihidumh commentedon Oct 2, 2026
This is the browser half of #14955. #14956 is an open PR for the download part of it:
getAzureDownloadURLreturns a short-lived, read-only SAS URL for a private container, so/api/files/download-url/...stops answering 501 forazure_blob. The server-side read half is already in through #15763.The PR does not rewrite the stored image URLs in message history; that part of this report is covered by #13245. It is small and separate from #13245, and it has had no CI run yet. A maintainer approval for the workflow would show whether it still passes on
dev.Vidminas commentedon Oct 9, 2026
This is also addressed by the
STORAGE_PROXY_FILESfeature proposed in #16912./api/stored-files/azure_blob/<blob path>) for uploads, generated images and outputs, and avatars. LibreChat streams each blob through the authenticated container client, so the container stays private./imagesdoes, so<img>tags and links work, and it applies the existing file ACLs and tenant checks.npm run migrate:stored-file-linksrewrites blob URLs already stored in conversation history.