gpt4 book ai didi

具有 CORS 和基本身份验证支持的 WCF 自托管数据服务

转载 作者:行者123 更新时间:2023-12-04 19:26:10 25 4
gpt4 key购买 nike

我正在构建一个 WCF 自托管数据服务(顺便说一下,OData),并且我正在使用基本身份验证对用户进行身份验证。这并不难,我只需要一些配置步骤,构建一个 UserNamePasswordValidator 和一个 IAuthorizationPolicy - 完成。

现在我需要支持 CORS (Cross-Origin Resource Sharing)。我尝试了许多实现,一些有文档记录(例如 this ),另一些是我自己制作的。

问题是 ,如果我启用基本身份验证,因为 CORS 预检请求 (OPTIONS) 没有“授权” header ,并且我无法操纵请求(当然,否则会破坏浏览器执行此操作的目的),我无法拦截/响应服务器上的请求。我什至无法检查它走了多远!我尝试实现许多行为、绑定(bind)、管理器等,但我无法捕获该请求,甚至在“DataService<>.OnStartProcessingRequest()”上也无法​​捕获。

如果我禁用基本身份验证 在服务器端,我能够捕获 CORS 预检请求并最终响应它(使用 IDispatchMessageInspector 和 BehaviorExtensionElement),但这样我必须自己实现基本身份验证......该死。

请帮我。
我如何实现两者?如何在 Basic Auth 简单地响应 401 Unauthorized 之前拦截 CORS 预检请求?

提前致谢。

最佳答案

第一 ,您可以处理所有“ OPTIONS ”请求以允许所有这些请求。
我使用以下技巧:

我的服务界面:

/// <summary>Handles ALL the http options requests.</summary>
[WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
bool HandleHttpOptionsRequest();

执行 :
/// <summary>Handles ALL the http options requests.</summary>
public bool HandleHttpOptionsRequest()
{
if (WebOperationContext.Current != null && WebOperationContext.Current.IncomingRequest.Method == "OPTIONS")
{
return true;
}
return false;
}

第二 ,您需要在“CORS enabler”中添加 Access-Control-Allow-Credentials enable-cors
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
var requiredHeaders = new Dictionary<string, string>
{
{ "Access-Control-Allow-Credentials", "true" },
{ "Access-Control-Allow-Origin", "*" },
{ "Access-Control-Request-Method", "POST,GET,PUT,DELETE,OPTIONS" },
{ "Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Safe-Repository-Path,Safe-Repository-Token" }
};

endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new CustomHeaderMessageInspector(requiredHeaders));
}

关于具有 CORS 和基本身份验证支持的 WCF 自托管数据服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16839722/

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