编写自托管WCF(4.5)REST服务。 CORS几乎正确实现,但我遇到了问题,因为我需要支持多种身份验证方法,即基本和协商。
如果我只向ServiceAuthenticationBehavior添加Basic和Negotiate,CORS将无法正常工作,因为WCF将在预检OPTIONS请求上发送401。
如果我添加Anonymous,以便ServiceAuthenticationBehavior允许没有身份验证的请求,如果我将浏览器直接指向该服务,浏览器不会提示我输入凭据。
我需要做的是发送401&WWW-Authenticate:Basic Negotiate,所有请求的标题除了未经过身份验证的OPTION请求。
我遇到的问题是我不知道WCF的哪个部分处理它。它是WebServiceHost,像WebHttpBehavior这样的服务行为还是ServiceAuthenticationManager?
MS文档非常糟糕,ServiceAuthenticationManager定义为"表示服务身份验证管理器。"
答案 0 :(得分:1)
我不知道究竟是哪一部分。但是,如果我在你的位置,我想找出,那么我会
(1)下载并阅读(主要通过使用全文搜索工具)Microsoft的参考源。我首先要阅读谁使用ServiceAuthenticationManager
,你猜它是关键术语。 http://referencesource.microsoft.com/#System.ServiceModel/ServiceModel/System/ServiceModel/ServiceAuthenticationManager.cs。如果没有一些重要的源代码,我会使用ILSpy来反编译和读取未记录的托管DLL的内容
(2)尝试通过在Visual Studio中安装.NET框架调试支持(使用MSDN: Visual Studio, How to: Debug .NET Framework Source)和
来弄清楚WCF部分的功能(3)我肯定会配置WCF跟踪并研究捕获的日志。关于日志中发生的事情有很多很多细节。包括关键术语(类名,属性名)以供进一步检查。 (MSDN: WCF- Configuring Tracing)
(4)如果上述步骤在合理的时间范围内对我不起作用,那么我将以Microsoft Windows开发人员的身份登录到Microsoft专门为Windows开发人员开发的网站,我会问那里的问题(你可以在http://social.msdn.microsoft.com/Forums/en-US/home?sort=relevancedesc&brandIgnore=True&searchTerm=wcf)
找到合适的“哪里”的好候选人所以我现在还不知道身份验证层究竟是如何工作的,以及如何插入其他策略。所以我没有给你一个明确的答案,如果这个用例有一个简单的教程,我很乐意阅读它。
如果您找到了最终答案,请与我们其他人分享您在某处(例如此处或您的博客或Microsoft TechNet site under the WCF tag中的文章)与我们其他人 - 您这样的程序员
我写这篇文章是为了给你一些提示,告诉你如何自己捕鱼并以某种方式不同意你的说法“MS文件很糟糕”((1)和(3 )是我的主要反驳意见)