Azure登录Token端点不接受原始JSON请求体的技术咨询
解决Azure AD v2.0令牌端点不支持原始JSON请求体的问题
问题核心
调用https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token获取Azure Key Vault访问令牌时,用原始JSON请求体({ "grant_type":"client_credentials" })会返回400错误,提示缺少grant_type参数。本质原因是该端点仅支持application/x-www-form-urlencoded格式的请求体,不接受原始JSON格式。
替代实现方案
方案1:用表单编码格式提交请求体
把请求参数整理成URL编码的键值对作为请求体发送,同时设置请求头Content-Type: application/x-www-form-urlencoded。
示例请求体:
grant_type=client_credentials&client_id=你的应用ID&client_secret=你的应用密钥&scope=https%3A%2F%2Fvault.azure.net%2F.default
注:scope需按实际需求调整,Azure Key Vault的默认权限范围为https://vault.azure.net/.default
方案2:借助Azure SDK简化调用
如果是代码实现,直接用官方Azure SDK即可,SDK会自动处理请求格式,无需手动构造:
- .NET环境:使用
Azure.Identity库的ClientSecretCredentialvar credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var client = new SecretClient(new Uri("https://你的密钥库.vault.azure.net/"), credential); - Python环境:使用
azure-identity和azure-keyvault-secrets库from azure.identity import ClientSecretCredential from azure.keyvault.secrets import SecretClient credential = ClientSecretCredential(tenant_id, client_id, client_secret) client = SecretClient(vault_url="https://你的密钥库.vault.azure.net/", credential=credential)
方案3:Postman中正确配置请求
在Postman里选择Body标签下的x-www-form-urlencoded选项,添加以下键值对参数:
grant_type:client_credentialsclient_id:你的应用程序IDclient_secret:你的应用程序密钥scope:https://vault.azure.net/.default
Postman会自动将请求头Content-Type设置为application/x-www-form-urlencoded,无需手动修改。
内容的提问来源于stack exchange,提问作者Peter Krejcar
相关产品推荐
相关产品推荐

