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

如何通过服务端代码从HTTP POST的FormData获取Azure AD ID Token

解决Azure AD回调中读取FormData里ID Token的问题

嗨,我完全懂你踩的这个坑——Chrome DevTools把FormData放在「网络>请求头」标签页下的设计确实容易误导人,但FormData本质是POST请求的请求体内容,根本不在Request.Headers集合里,所以你遍历Headers肯定找不到它!

正确的读取方式

在ASP.NET(包括VB.NET和C#)中,表单提交的FormData数据是通过Request.Form集合来访问的,这才是专门处理application/x-www-form-urlencoded类型请求体的对象(Azure AD的回调请求正好是这个类型)。

VB.NET 代码示例

' 直接获取ID Token(键名通常是"id_token",和你在DevTools里看到的一致)
Dim idToken As String = Request.Form("id_token")

' 如果需要遍历所有FormData键值对(替代你之前遍历Headers的逻辑)
For Each key As String In Request.Form.AllKeys
    Dim values As String() = Request.Form.GetValues(key)
    txtOutput.Text += "Key: " & key & vbCrLf
    For i As Integer = 0 To values.Length - 1
        txtOutput.Text += "Value " & i.ToString() & ": " & Server.HtmlEncode(values(i)) & vbCrLf & vbCrLf
    Next
Next

C# 代码示例(方便你转换)

// 直接读取ID Token
string idToken = Request.Form["id_token"];

// 遍历所有FormData键值对
foreach (string key in Request.Form.AllKeys)
{
    string[] values = Request.Form.GetValues(key);
    txtOutput.Text += "Key: " + key + "\n";
    for (int i = 0; i < values.Length; i++)
    {
        txtOutput.Text += "Value " + i.ToString() + ": " + Server.HtmlEncode(values[i]) + "\n\n";
    }
}

额外说明

  • 如果你遇到的是multipart/form-data类型的请求(比如带文件上传的表单),需要用Request.Files配合Request.Form来处理,但Azure AD的登录回调一般不会用这个类型,所以上面的代码完全适用。
  • 确认一下请求的Content-Type是否为application/x-www-form-urlencoded,这是表单提交的默认类型,也是Azure AD回调的标准类型。

内容的提问来源于stack exchange,提问作者James Gragert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:25:27