我已经开始遇到一些问题,我的 header 超出了限制。
我有一个 MVC Controller ,调用 WebApi Controller /服务。
我知道触发器,它是一个我已转换为 base64 的 saml-token (xml)。 不,我无法控制 SecurityToken 服务……所以 JWT 目前不是一个选项。相信我,我已经多次提出我的担忧。 我们使用 saml 使用自定义委托(delegate)处理程序来保护 WebApi Controller ,该处理程序读取自定义 header 并将其转换为 ClaimPrincipal...
我看过处理响应的 gzip 代码示例,但经过数小时的谷歌搜索,我还没有找到是否有办法压缩我的自定义 header (如果这是唯一的方法,则全部压缩)...对于〜请求。
理想情况下我可以压缩
“X-我的自定义标题”
并在 webapi 端处理解压缩....
所以我不知道这是否可能。这是我第一次不得不处理过大的 header 问题。
下面的示例 MVC 代码。作为 FYI,Windows 凭据已发送,但其中包含运行运行 MVC 的 AppPool 的身份。 我的自定义 header 是与特定登录用户关联的 saml。因此,为什么我需要将其发送过来并与 windows-identity 分开考虑。
using (var client = new HttpClient(HttpClientHandlerFactory.GetWindowsAuthenticationHttpClientHandler()))
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string base64SerializedToken = "SuperDuperLongBase64String_IMeanSuperDuper";
client.DefaultRequestHeaders.Add("X-My-Custom-Header", base64SerializedToken);
Uri baseUri = new Uri("http:www.mywebapiservice.com");
Uri destinationUri = new Uri(baseUri, "doSomething");
HttpResponseMessage response = client.PostAsJsonAsync(new Uri(new Uri(this._baseUri), destinationUri.ToString()).ToString(), accountName).Result;
if (response.IsSuccessStatusCode)
{
returnItem = response.Content.ReadAsAsync<MyCustomReturnObject>().Result;
}
else
{
string errorMessage = response.Content.ReadAsStringAsync().Result;
throw new InvalidOperationException(errorMessage);
}
}
public static class HttpClientHandlerFactory
{
public static HttpClientHandler GetWindowsAuthenticationHttpClientHandler()
{
HttpClientHandler returnHandler = new HttpClientHandler()
{
UseDefaultCredentials = true,
PreAuthenticate = true
};
return returnHandler;
}
}
最佳答案
考虑到 SAML token 的大小可能有几千字节,具体取决于声明的数量,将其作为 header 发送可能不是一个好主意。即使您现在可以让它工作,也不能保证它会在 claim 数量增加时继续工作。
由于 header 压缩没有标准,您将不得不修改对话的两端以对其进行处理。既然如此,为什么不简单地将 SAML token 添加为 API 中请求正文的一部分呢?
如果那真的行不通(我知道项目经理在遇到这样的事情时通常很痛苦)那么你将不得不考虑使用类似 GZipStream
的东西打包 XML,但在某些时候您仍然会遇到问题。这是创可贴,不是解决方案。
关于c# - MVC 到 WebApi : Can a header be compressed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948980/