WCF 的哪一部分处理身份验证?
Posted
技术标签:
【中文标题】WCF 的哪一部分处理身份验证?【英文标题】:What part of WCF handles Authentication? 【发布时间】:2014-07-27 06:16:17 【问题描述】:编写了一个自托管的 WCF (4.5) REST 服务。 CORS 几乎已正确实现,但我遇到了问题,因为我需要支持多种身份验证方法,即 Basic 和 Negotiate。
如果我只将 Basic 和 Negotiate 添加到 ServiceAuthenticationBehavior,CORS 将不起作用,因为 WCF 将在预检 OPTIONS 请求上发送 401。
如果我添加匿名,这样 ServiceAuthenticationBehavior 将允许未经身份验证的请求,如果我将浏览器直接指向服务,浏览器不会提示我输入凭据。
我需要做的是发送带有 WWW-Authenticate: Basic Negotiate 的 401,所有请求的标头,但未经身份验证的 OPTION 请求除外。
我遇到的问题是我不知道 WCF 的哪个部分处理了这个问题。是 WebServiceHost、WebHttpBehavior 之类的服务行为还是 ServiceAuthenticationManager?
MS 文档很烂,ServiceAuthenticationManager 被定义为“代表一个服务认证管理器”。
【问题讨论】:
【参考方案1】:我不知道具体是哪一部分。但如果我在你的位置,我想知道,那么我会
(1) 下载并阅读(主要是使用全文搜索工具)微软的参考源。我将首先阅读谁使用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 )是我的主要反驳)
【讨论】:
以上是关于WCF 的哪一部分处理身份验证?的主要内容,如果未能解决你的问题,请参考以下文章