我正在尝试禁用 Cosmos DB 的本地身份验证,并为连接到它的 Web 应用程序和功能应用程序使用托管身份。我已向这两个应用程序授予 Cosmos DB 内置贡献者角色,并验证它们是通过 az cli 分配的。但是,我收到错误:
"The MAC signature found in the HTTP request is not the same as the computed signature. Server used following string to sign - . Learn more: https:\/\/aka.ms\/cosmosdb-tsg-mac-signature","Local Authorization is disabled. Use an AAD token to authorize all requests."
这是更新后的 Cosmos 客户端:
var cosmosClient = new CosmosClient(_endpointUrl, new DefaultAzureCredential(), options);
我已按照本指南禁用本地身份验证 https://learn.microsoft.com/en-us/azure/cosmos-db/how-to-setup-rbac#disable-local-auth
您看到的错误表明您的 Cosmos DB 禁用了本地身份验证,并且所有请求都需要 AAD 令牌。由于您使用的是托管身份,请确保 Web 应用程序和函数应用程序在适当的范围(例如帐户、数据库或容器级别)分配了正确的“Cosmos DB 内置贡献者”角色。
确保为您的应用程序正确启用托管身份,并且 DefaultAzureCredential() 正确获取 AAD 令牌。此外,请按照本指南验证 Cosmos DB 设置中的本地身份验证是否已完全禁用。
最后,仔细检查您的 CosmosClientOptions 是否设置正确,尤其是 ConnectionMode.Gateway 或您环境的其他必要设置。