如何增加Azure IIS请求中HTTP标头值的大小限制?

kse8i1jr  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(141)

Token在GET请求的Authorization头中传递,如下所示:

Authorization: Bearer <token here>

通过反复试验,我发现头值限制必须在2048左右,因为令牌小于此值的请求会传递到我的ASP.NET应用程序而不会进行任何更改,而令牌较大的请求会删除Authorization头,从而在我的应用程序中触发401。
应用程序已发布到Azure。无论请求是GET还是POST都不重要。
Limit看起来类似于querystring limit,所以我增加了允许的查询字符串,但没有帮助。
IIS版本:8.0(来自响应头)

l7mqbcuq

l7mqbcuq1#

默认情况下,头长度限制为65536,这是在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters注册表中设置的。我在本地计算机和Azure Web App上测试了它。下面是我用来测试的代码:
在服务器端,我使用

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return Content(Request.Headers["Authorization"]);
    }
}

在客户端,我使用

static async void SendRequest()
{
    HttpClient client = new HttpClient();
    string token = "";
    for (int i = 0; i < 2050; i++)
    {
        token = token + "0";
    }
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
    HttpResponseMessage message = await client.GetAsync("http://xxx.azurewebsites.net/");
    string content = await message.Content.ReadAsStringAsync();
    Console.WriteLine(content);
}

我可以取回授权参数。

通过反复试验,我发现头值限制必须在2048左右
另一个可能有限制的地方是headerLimits配置部分。您可以在此配置部分中为特定头添加长度限制。
如果我将此配置添加到 * web.config *.

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits>
        <headerLimits >
          <add header="Authorization" sizeLimit="2048" />
        </headerLimits>
      </requestLimits>
    </requestFiltering>
  </security>
</system.webServer>

.我的客户端的请求被阻止,我得到了以下错误:

如果我增加sizeLimit以满足请求Authorization报头的长度,例如2058。请求将被正常执行。
所以请检查你是否修改了 * web.config * 文件中的headerLimits配置部分。如果是,它将阻止您的请求,如果此头的长度大于限制值。为了解决这个问题,我们可以增加sizeLimit的值来修改Authorization头的限制。

相关问题