如何使用PowerShell向需微软账号登录的Azure App发起非交互式Web请求
非交互式调用Azure保护站点的操作步骤
1. 配置Azure应用注册
- 登录Azure门户,找到你的
myApp对应的应用注册资源,记录下客户端ID、租户ID两个参数 - 进入「证书和密码」页面,新建1个客户端密码,保存生成的密码值(仅创建时可见,务必妥善存储)
- 进入「公开API」页面,确认你创建的
myscope权限,额外新增应用权限类型的同范围权限,完成后点击「授予管理员同意」完成权限生效
2. 编写PowerShell脚本实现自动请求
# 替换为你自己的实际配置参数 $clientId = "myApp的客户端ID" $clientSecret = "你刚创建的客户端密码" $tenantId = "Azure AD租户ID" $scope = "api://$clientId/myscope/.default" # 客户端凭据流需追加.default后缀 $targetSiteUrl = "你要请求的网站地址myurl" # 非交互式获取访问令牌 $tokenReqBody = @{ Grant_Type = "client_credentials" Client_Id = $clientId Client_Secret = $clientSecret Scope = $scope } $tokenRes = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Method Post -Body $tokenReqBody $accessToken = $tokenRes.access_token # 发起目标网站请求 Invoke-RestMethod -Uri $targetSiteUrl -Headers @{"authorization" = "Bearer $accessToken"}
可选:更安全的证书认证方案(避免明文存储客户端密码)
- 在应用注册的「证书和密码」页面上传公钥证书(.cer格式)
- 本地PowerShell从证书存储读取对应私钥证书,替换客户端密码参数即可完成认证,安全性更高:
# 按指纹读取本地存储的证书 $cert = Get-ChildItem Cert:\CurrentUser\My\你的证书指纹 | Select-Object -First 1 # 用证书发起令牌请求,无需传客户端密码 $tokenReqBody = @{ Grant_Type = "client_credentials" Client_Id = $clientId Client_Certificate = $cert Scope = $scope }
备注:如果必须模拟特定用户身份发起请求,可使用ROPC流,将Grant_Type改为
password,额外传入Username和Password参数即可。该流不支持启用MFA的账号,安全性远低于客户端凭据流,仅推荐测试场景使用。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

