WCF的哪个部分处理身份验证?

时间:2014-06-06 04:06:31

标签: wcf authentication cors

编写自托管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定义为"表示服务身份验证管理器。"

1 个答案:

答案 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部分的功能
  • 在我的代码配置和指示WCF的地方F11进入.NET
  • 或在我的代码的关键部分放置断点,一旦触发我就会仔细研究调用堆栈(并阅读.NET框架源代码,为什么调用该方法以及可能影响它的方法,还有什么其他选项在源文件中可见)

(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 )是我的主要反驳意见)