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

使用.NET HttpClient爬取Azure Active Directory认证后的Web应用

爬取Azure AD保护网页的域身份认证方案

1. 用MSAL.NET实现Windows集成身份验证(推荐生产环境)

这是最可靠的方式,借助微软官方的MSAL库获取当前登录Windows域用户的Azure AD访问令牌,再携带令牌请求页面。

  • 操作步骤:
    1. 先在Azure AD注册一个控制台应用,启用"Windows集成身份验证"选项,记下客户端ID和租户ID。
    2. 安装MSAL包:Install-Package Microsoft.Identity.Client
    3. 编写代码获取令牌并发起请求:
using Microsoft.Identity.Client;
using System.Net.Http;
using System.Net.Http.Headers;

var clientId = "你的Azure AD应用客户端ID";
var authority = "https://login.microsoftonline.com/你的租户ID或域名";
var scopes = new[] { "https://你的目标资源URI/.default" };

var pca = PublicClientApplicationBuilder.Create(clientId)
    .WithAuthority(authority)
    .Build();

// 自动获取当前Windows用户的令牌
var tokenResult = await pca.AcquireTokenByIntegratedWindowsAuth(scopes)
    .ExecuteAsync();

// 带着令牌请求页面
using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResult.AccessToken);
var response = await httpClient.GetAsync("目标网页URL");
response.EnsureSuccessStatusCode();
var pageContent = await response.Content.ReadAsStringAsync();

2. PowerShell脚本快速实现(适合测试/脚本场景)

如果用PowerShell写控制台脚本,直接用Invoke-WebRequest的-UseDefaultCredentials参数就能自动用当前域用户身份认证:

$pageResponse = Invoke-WebRequest -Uri "目标网页URL" -UseDefaultCredentials
$pageContent = $pageResponse.Content

注意:这种方式要求目标Azure AD应用配置了支持Negotiate/Kerberos身份验证。

3. 读取浏览器令牌缓存(不推荐)

可以尝试读取Edge浏览器的Azure AD令牌缓存,但浏览器的存储结构加密且随时可能变更,实现复杂且不稳定,只适合临时测试,不建议生产用。

核心注意点

  • 控制台程序必须以当前Azure AD域用户身份运行,不能用本地账户。
  • 目标Azure AD应用必须启用对应身份验证流程(WIA或Negotiate),否则会认证失败。

内容的提问来源于stack exchange,提问作者Dalibor Čarapić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:32:37