跨域基本身份验证

本文关键字:身份验证 | 更新日期: 2023-09-27 18:20:58

我正在尝试在Silverlight中对web服务器的浏览器堆栈进行跨域基本身份验证,我可以访问计算机,尽管我无法访问代码或托管方式。每当我尝试以下代码时,我都会得到一个NotSupportedException

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("http://www.example.com", HttpCompletionOption.ResponseHeadersRead);

我也用ajax尝试了以下操作,但它变成了OPTIONS 1.1请求,

$.ajax({
    type: "GET",
    url: "http://www.example.com",
    global: false,
    beforeSend: function (xhr) {
        xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
    },
});

如果我将http://www.example.com更改为不是跨域调用,那么两个代码示例都可以工作。在这种情况下,是否可以进行跨域基本身份验证?

跨域基本身份验证

查看下面的链接,了解如何在silverlight中跨域提供服务。

我已经使用基本身份验证很多年了,但我一直在使用

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

注意:事实证明Silverlight在浏览器和客户端堆栈中都提供了HTTP处理。默认情况下,Silverlight使用浏览器进行HTTP处理。唯一的问题是浏览器HTTP处理只支持GET和POST请求方法。

通过这样做,您应该能够访问允许PUT和DELETE Http方法的RESTful服务。

我也可以通过这种方法使用承载(JWT)身份验证。

希望这能有所帮助。