使用AZURE_STORAGE_ACCESS_TOKEN通过GDAL3.5访问ADLS Gen2遇OAuth2问题
排查GDAL 3.5通过Azure OAuth2令牌访问ADLS Gen2失败问题
核心排查点及解决方案
1. 令牌请求的Resource参数格式错误
你当前调用的是Azure AD v1令牌端点(oauth2/token),但请求中resource值用了v2端点的scope格式(带.default)。v1端点要求resource为纯资源标识符,修正如下:
'resource': 'https://storage.azure.com/'
若改用v2端点(oauth2/v2.0/token),则需将resource替换为scope参数,值设为https://storage.azure.com/.default,其余参数保持不变。
2. 缺少GDAL必需的环境变量
GDAL访问ADLS Gen2时,除AZURE_STORAGE_ACCESS_TOKEN,必须设置AZURE_STORAGE_ACCOUNT指定目标存储账户名称,示例:
export AZURE_STORAGE_ACCOUNT=your-storage-account-name export AZURE_STORAGE_ACCESS_TOKEN=your-access-token
3. 客户端应用权限配置问题
确保客户端ID对应的Azure AD应用已被授予目标存储账户的应用级Blob数据权限(如Storage Blob Data Contributor),客户端凭证流仅生效应用级权限,用户委托权限无法使用。
4. 令牌有效性校验
解码access_token后检查关键字段:
aud(受众)需为https://storage.azure.com/(v1令牌)或包含https://storage.azure.com/.default(v2令牌)roles字段需包含对应存储账户的权限(如StorageBlobDataContributor)
若字段不匹配或为空,说明令牌请求或权限配置有误。
5. GDAL命令行验证
用GDAL命令行工具测试访问,例如列出容器内容:
gdalinfo /vsiaz/your-container-name/
若失败,设置CPL_DEBUG=ON环境变量开启GDAL调试日志,获取具体错误信息定位问题。
内容的提问来源于stack exchange,提问作者Manrique Vargas
相关产品推荐
相关产品推荐

