我正在构建一个 WCF 自托管数据服务(顺便说一下,OData),并且我正在使用基本身份验证对用户进行身份验证。这并不难,我只需要一些配置步骤,构建一个 UserNamePasswordValidator 和一个 IAuthorizationPolicy - 完成。
现在我需要支持 CORS(跨域资源共享)。我尝试了许多实现,一些有文档记录(例如this),另一些是我自己制作的。
问题是,如果我启用基本身份验证,因为 CORS 预检请求 (OPTIONS) 没有“授权”标头,并且我无法操纵请求(当然,否则会破坏浏览器的目的这样做),我无法拦截/响应服务器上的请求。我什至无法检查它走了多远!我尝试实现许多行为、绑定、管理器等,但我无法捕获该请求,甚至在“DataService<>.OnStartProcessingRequest()”上也无法捕获。
如果我在服务器端禁用基本身份验证,我能够捕获 CORS 预检请求并最终响应它(使用 IDispatchMessageInspector 和 BehaviorExtensionElement),但这样我必须自己实现基本身份验证......该死.
请帮我。我如何实现两者?如何在 Basic Auth 简单地响应 401 Unauthorized 之前拦截 CORS 预检请求?
提前致谢。