Silverlight 浏览器的基本身份验证
Posted
技术标签:
【中文标题】Silverlight 浏览器的基本身份验证【英文标题】:Basic authentication for Silverlight browser 【发布时间】:2015-03-20 11:33:32 【问题描述】:我无法使用 WebRequestCreator.BrowserHttp
连接到此 URL,但是我可以使用 WebRequestCreator.ClientHttp
进行连接。这是我正在使用的代码示例,
var httpClient = new HttpClient();
WebRequest.RegisterPrefix("http://", WebRequestCreator.BrowserHttp);
var byteArray = Encoding.UTF8.GetBytes("username:password");
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
我正在尝试避免使用“Windows 安全”对话框,并且我不能在我的项目中使用 WebRequestCreator.BrowserHttp
。
编辑:
当使用WebRequestCreator.BrowserHttp
我得到了
System.ArgumentException:值不在预期范围内 范围
在提琴手中什么都没有。如果我使用 WebRequestCreator.ClientHttp
我会得到 p>
Authorization: Basic
在提琴手
【问题讨论】:
我很困惑。你不能使用BrowserHttp,无论如何它都不起作用?为什么不直接使用 ClientHttp? @AriRoth 我不能使用 ClientHttp,因为浏览器在发送到客户端之前会缓冲 0.25Mb。我正在将此代码用于实时 MJPEG 视频流,因此我需要立即获取每个图像。 附加 Fiddler 并检查两个请求之间的差异:telerik.com/fiddler @user18044 使用 WebRequestCreator.BrowserHttp 时,我得到 System.ArgumentException: Value does not fall in the expected range and nothing in fiddler。如果我使用 WebRequestCreator.ClientHttp 我得到 Authorization: Basic in Fiddler. 【参考方案1】:我能够对当前的 silverlight 项目进行基本和承载 (JWT) 身份验证。
/*
* NOTE:
* It turns out that Silverlight provides HTTP handling in both the Browser and Client stack.
* By default Silverlight uses the Browser for HTTP handling.
* The only problem with this is that Browser HTTP Handling only supports GET and POST request methods.
*/
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
var httpClient = new HttpClient();
var byteArray = Encoding.UTF8.GetBytes("username:password");
// Default headers will be sent with every request sent from this HttpClient instance.
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
【讨论】:
以上是关于Silverlight 浏览器的基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 4中的IIS Windows身份验证问题
在 Silverlight 中使用表单进行 Windows 身份验证 [重复]
Silverlight:访问表单身份验证站点后面的 REST 服务