企業環境中,使用者隸屬大量 Active Directory 群組時,Kerberos Token 體積會超過預設限制,導致 Windows 整合驗證(Kerberos/NTLM)連線 SQL Server、SSRS、IIS 網頁應用程式失敗。單純調整註冊表 MaxTokenSize 不足,必須同步調整 IIS 相關參數 MaxFieldLength 與 MaxRequestBytes,並重啟相關服務。
HTTP 400 Bad Request - Request Header too long 或直接顯示「網頁無法顯示」。Kerberos Token 隨著使用者群組成員資格增長,封裝在 HTTP 標頭 Authorization: Negotiate <base64_token> 中。當 Token 超過下列預設限制,連線即被拒絕:
| 參數 | 預設值 | 建議值 | 位置 |
|---|---|---|---|
| MaxTokenSize | 1200 bytes | 48000 (或更大) | HKLM\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters |
| MaxFieldLength | 16384 bytes | 65534 | IIS 5.0: HKLM\System\CurrentControlSet\Services\W3SVC\Parameters IIS 6.0+: HKLM\System\CurrentControlSet\Services\HTTP\Parameters |
| MaxRequestBytes | 16384 bytes | 500000 | 同上(僅 IIS 6.0+) |
MaxTokenSize = 48000 (DWORD),重啟 SQL Server 服務。; IIS 6.0 / 7.x / 8.x / 10.0 (HTTP.sys)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters]
"MaxFieldLength"=dword:0000fffe ; 65534
"MaxRequestBytes"=dword:0007a120 ; 500000
iisreset /restart 或重啟 HTTP、W3SVC 服務,不需重啟作業系統。400 Bad Request 狀態碼。klist tokensize 查看當前 Token 大小。| 錯誤 | 可能原因 |
|---|---|
| HTTP 400 Bad Request | Request Header > MaxFieldLength |
| HTTP 413 Request Entity Too Large | Request Body > MaxRequestBytes |
| Kerberos KRB_AP_ERR_MODIFIED | SPN 重複/錯誤、Token 截斷 |
| SECBUFFER_TOO_SMALL | MaxTokenSize 不足 |
核心原則:Kerberos Token 大小限制存在於 LSA、HTTP.sys、負載平衡器、Proxy 等多層,必須全鏈路同步調大,缺一不可。