使用PowerShell向ASP.NET服务器POST请求时遭遇401未授权错误
旧版MBAM服务器BitLocker密钥获取401授权问题
背景
近期受Crowd Strike事件影响,我们开发了一款通过Live USB自动解锁BitLocker加密磁盘的工具。我们拥有两台MBAM服务器:
- 生产服务器:获取密钥流程简单,仅需使用服务账号授权发起单次请求即可:
Invoke-WebRequest -Uri "https://XXXXX/xx/xx?serialNumber=$id" -Credential $Cred -UseBasicParsing - 旧版服务器:运行在IIS 8.5上的ASP.NET应用,这是当前问题的核心场景。
已完成的操作
- 从浏览器开发者工具中复制了请求头和表单数据,确认该服务器需要Windows凭据、事件验证器以及会话Cookie。服务器返回WWW-Authenticate头,但浏览器实际请求并未使用该头。
- 已成功使用凭据登录服务器:
Invoke-WebRequest -URI $MBAM_URL -Credential $UserCredential -Method GET - 顺利完成ASP验证器参数的提取:
switch ($input.name) { "__LASTFOCUS" { $SearchData["__LASTFOCUS"] = $input.value } "__VIEWSTATE" { $SearchData["__VIEWSTATE"] = $input.value } "__EVENTARGUMENT" { $SearchData["__EVENTARGUMENT"] = $input.value } "__VIEWSTATEGENERATOR" { $SearchData["__VIEWSTATEGENERATOR"] = $input.value } "__EVENTVALIDATION" { $SearchData["__EVENTVALIDATION"] = $input.value } } - 已设置会话Cookie:
$SearchHeaders["Cookie"] = $request.Headers["Set-Cookie"].Split(";")[0]
当前问题
通过上述配置构造出与浏览器完全一致的POST请求尝试获取密钥时,每次执行都会返回401 - Unauthorized: Access is denied due to invalid credentials.错误,请求代码如下:
Invoke-WebRequest -URI $MBAM_URL -Method POST -Body $body -ContentType "application/x-www-form-urlencoded" -Headers $SearchHeaders -Credential $UserCredential
已尝试的无效方案
- 移除请求中的凭据参数
- 手动添加WWW-Authentication头
- 仅使用Cookie进行认证
- 使用服务账号发起请求
- 将程序改写为Python测试,仍出现相同401错误
问题推测
问题大概率出在ASP.NET的相关机制上,而非编程逻辑——我们有一个与ASP.NET服务器交互进行目录盘点的类似脚本可以正常运行。
内容的提问来源于stack exchange,提问作者Noah
相关产品推荐
相关产品推荐

