gpt4 book ai didi

.net - IIS8.5 设置HTTPS网站间跨域可用

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:20 24 4
gpt4 key购买 nike

我有一个使用 SSL 证书进行身份验证的 API。如果我尝试通过另一个带有 SSL 证书的 API 使用它,我会遇到错误:

XMLHttpRequest cannot load https://xxxx.mydomain.com/v2/auth/token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://yyyy.mydomain.com' is therefore not allowed access. The response had HTTP status code 400.

我不能为此使用通配符。

我尝试使用它,但它只适用于 HTTP:

<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>

有人知道吗?

最佳答案

由于每个响应只能允许一个来源条目,因此您需要检查飞行前请求中的 Origin header 以查看是否允许它,然后编写Access-Control-Allow-Origin header 值相应。

IIS 7.0+ 中最简单的方法可能是编写自定义处理程序并注册它以处理对 /v2/auth/ uri 路径的 OPTIONS 请求。

我已经有一段时间没有编写 IIS 扩展了,所以这是允许同一命名空间 (mydomain.com) 中的任何 Origin 的粗略尝试:

public class MultipleOriginHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}

public void ProcessRequest(HttpContext ctx)
{
Uri origin;
if(String.Compare(ctx.Request.HttpMethod,"OPTIONS",true) != 0)
return; // not an OPTIONS request,

if(!Uri.TryCreate(ctx.Request.Headers.Get("Origin"), UriKind.RelativeOrAbsolute, out origin))
return; // failed to extract Origin URI

if(origin.Host.EndsWith(".mydomain.com") || origin.Host == "mydomain.com"){
// Request came from one of our own sites, let's allow it
ctx.Response.AppendHeader("Access-Control-Allow-Origin",String.Format("{0}://{1}",origin.Scheme,origin.Host));
}
return;
}
}

我能想到的唯一替代方法是对 URL Rewrite module 做类似的事情

如果你想允许基于是否经过身份验证的请求,而不是源是否属于某个主机命名空间,你也可以这样做:

if(ctx.User.Identity.IsAuthenticated){
// Request was authenticated
ctx.Response.AppendHeader("Access-Control-Allow-Origin",String.Format("{0}://{1}",origin.Scheme,origin.Host));
}

关于.net - IIS8.5 设置HTTPS网站间跨域可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33151840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com