You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django应用上传文件至Azure Blob Storage时遇错误求助

问题分析与解决方案

一、核心错误根源:非HTTPS URL的Bearer Token认证限制

错误提示Bearer token authentication is not permitted for non-TLS protected (non-https) URLs,说明你配置的Azure服务URL使用了HTTP协议,但Azure Key Vault和Blob Storage强制要求通过HTTPS访问。

修复步骤:

  • 检查.env文件中的AZURE_VAULT_ACCOUNT和AZURE_STORAGE_ACCOUNT值,确保是完整HTTPS格式:
    • Key Vault URL示例:https://your-vault-name.vault.azure.net/
    • Blob存储账户URL示例:https://your-storage-account.blob.core.windows.net/
  • 更新后重启Django应用,重新测试上传功能。

二、Azure AD权限问题(账户所有者无访问权限)

即使是订阅所有者,也可能因Azure AD权限隔离无法访问相关资源,以下是两种解决路径:

1. 快速测试方案:绕过Key Vault直接使用存储密钥

适合开发阶段验证功能,跳过Key Vault环节:

  • 在Azure门户的存储账户「访问密钥」页面,复制其中一个密钥值
  • 在.env中添加AZURE_STORAGE_KEY=<复制的密钥>
  • 修改azure_controller.py的create_blob_client函数:
def create_blob_client(file_name):
    return BlobClient(
        account_url = settings.AZURE_STORAGE_ACCOUNT,
        container_name = settings.AZURE_APP_BLOB_NAME,
        blob_name = file_name,
        credential = settings.AZURE_STORAGE_KEY,
    )

2. 生产环境方案:解决Azure AD权限问题

(1)获取Azure AD全局权限

  • 登录Azure门户,进入「Azure Active Directory」→「角色和管理员」
  • 搜索「全局管理员」角色,确认你的账户是否在列表中;若不在,需联系现有全局管理员添加订阅所有者默认不自动拥有Azure AD全局权限。

(2)配置Key Vault访问策略

  • 进入目标Key Vault,选择「访问策略」→「添加访问策略」
  • 勾选需要的机密权限(如「获取」),选择你的账户作为主体,保存策略。

(3)推荐:使用托管身份(无需手动管理凭证)

若Django应用部署在Azure App Service:

  • 在App Service的「身份」页面启用系统分配托管身份
  • 在Key Vault访问策略中添加该身份,赋予机密读取权限
  • 在Blob存储账户的「IAM」页面添加该身份,赋予「存储Blob数据贡献者」角色
  • 修改create_blob_client函数,直接用托管身份认证:
def create_blob_client(file_name):
    default_credential = DefaultAzureCredential()
    return BlobClient(
        account_url = settings.AZURE_STORAGE_ACCOUNT,
        container_name = settings.AZURE_APP_BLOB_NAME,
        blob_name = file_name,
        credential = default_credential,
    )

三、补充代码检查点

  • 修改check_file_ext函数,添加后缀小写转换,避免大小写匹配问题:
    def check_file_ext(path):
        ext = Path(path).suffix.lower()
        return ext in ALLOWED_EXTENSIONS
    
  • 确认Azure Blob容器AZURE_APP_BLOB_NAME已创建,开发测试可设为「容器」访问级别,生产环境建议设为「私有」。

内容的提问来源于stack exchange,提问作者Marilyn Marquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:50:19