使用PowerShell调用Azure AD Token API:JSON请求体传递失败求助
问题原因及解决方案
核心问题
Azure AD的/oauth2/v2.0/token接口不支持JSON格式的请求体,它遵循OAuth2规范,要求请求体必须使用application/x-www-form-urlencoded格式(即键值对用&分隔的表单编码格式)。你传JSON时,接口无法解析其中的参数,因此提示找不到grant_type。
PowerShell正确调用方式
如果要在PowerShell中测试,直接使用哈希表作为-Body参数即可,PowerShell会自动将其编码为表单格式并设置正确的Content-Type:
$requestBody = @{ client_id = "clieid-12345-32234" client_secret = "jewhfjkjlskw;fdslk;" grant_type = "password" username = "user@example.com" password = "pwd" scope = "Directory.AccessAsUser.All" } Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$TenID/oauth2/v2.0/token" -Body $requestBody
Power Automate中正确配置HTTP端点
要在Power Automate中调用该接口,按以下步骤设置:
- 添加「HTTP」动作,请求方法选择
POST - 填写URI:
https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token(替换{你的租户ID}为实际值) - 在「Headers」区域添加键值对:
- 键:
Content-Type - 值:
application/x-www-form-urlencoded
- 键:
- 在「Body」区域使用表单编码格式填写参数,示例:
可以用Power Automate的动态内容替换固定值,比如从变量或其他动作中获取用户名、密码等参数。grant_type=password&username=user@example.com&password=pwd&client_id=clieid-12345-32234&client_secret=jewhfjkjlskw;fdslk;&scope=Directory.AccessAsUser.All
注意:密码模式(Resource Owner Password Credentials)不推荐用于生产环境,微软建议使用更安全的授权流程(如授权码流),尤其是当涉及用户密码时。
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

