You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:57:36