跨域基本认证

Posted

技术标签:

【中文标题】跨域基本认证【英文标题】:Cross Domain Basic Authentication 【发布时间】:2016-02-08 00:31:06 【问题描述】:

我正在尝试在浏览器堆栈上的 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 更改为不是跨域调用,则两个代码示例都可以工作。在这种情况下是否可以进行?

【问题讨论】:

【参考方案1】:

看看他下面关于making a Service Available Across Domain Boundaries in silverlight的链接。

我多年来一直在使用基本身份验证,但我一直在使用它

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

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

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

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

希望这会有所帮助。

【讨论】:

以上是关于跨域基本认证的主要内容,如果未能解决你的问题,请参考以下文章

JQuery跨域基本认证调用

Web Api 跨域基础认证

跨域API认证

JWT(JSON Web Token)的基本原理

JWT(JSON Web Token)的基本原理

web跨域问题(java) 跨域请求