令牌在GET请求中的Authorization标头中传递,如下所示:
Authorization: Bearer <token here>
使用试验和错误我发现标头值限制必须在 2048 附近,因为带有小于该标记的令牌的请求会传递到我的ASP.NET应用程序而不进行任何更改,并且具有较大标记的请求具有授权标题已删除,在我的应用中触发了401。
应用程序已发布到Azure。无论请求是GET还是POST,似乎都无关紧要。
限制看起来类似于querystring limit,因此我增加了允许的查询字符串,但它没有帮助。
IIS版本:8.0(来自响应标头)
答案 0 :(得分:1)
默认情况下,标头长度限制为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.请求将被执行OK。
因此,请检查您是否修改了web.config文件中的headerLimits配置部分。如果是,如果此标头的长度大于限制值,它将阻止您的请求。要解决它,我们可以增加sizeLimit的值来修改Authorization标头的限制。