在声明环境中正确地针对 WCF 服务进行身份验证

Posted

技术标签:

【中文标题】在声明环境中正确地针对 WCF 服务进行身份验证【英文标题】:Properly authenticating against WCF service in a Claims environment 【发布时间】:2011-07-19 22:26:02 【问题描述】:

声明身份验证模式下的 SharePoint Web 应用程序支持 NTLM,但只能通过以下步骤:

    HTTP 302 重定向到第二个位置。 NTLM 身份验证的 HTTP 401 质询 HTTP 401 验证 HTTP 302 重定向回原始位置(服务)

我可以编写自定义行为、通道工厂或绑定来处理这个问题吗?有没有更好的方法来解决这个问题?

【问题讨论】:

我不是 100% 确定,但 c2WTS 不应该解决这个问题吗? 如果身份验证确实由身份模型库处理,我认为 C2WTS 是服务端的一种可能途径。在我看来,两个主要选项是使用声明进行身份验证,或者以某种方式禁用一个文件/地址的声明,并让服务接收 NTLM 标头。我觉得前者更好。跨度> 【参考方案1】:

您列出的是标准 NTLM 握手。

避免这种情况的一种方法是使用 Kerberos 而不是 NTLM。见:http://technet.microsoft.com/en-us/library/gg502594.aspx

【讨论】:

如果 Kerberos 工作,这是一种选择,但从我在 IdentityModel 源代码中看到的情况来看,在实际身份验证发生之前仍然会重定向到第二个位置。似乎带有 NTLM 传输身份验证的 basicHttpBinding 无法理解/传递联邦 cookie #2 结果。但更紧迫的是:我不知道如何让 WCF 客户端移过实际上是 #1在 SharePoint 的情况下是 403,而不是 302。

以上是关于在声明环境中正确地针对 WCF 服务进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在声明身份验证的 SharePoint 2010 中托管的 WCF 服务中的模拟

为简单的 WCF 服务打开基本身份验证?

连接到 WCF 服务的 Android 应用程序的身份验证(本地环境)

身份验证模式=“表单”导致WCF服务中的重定向

WCF 用户身份验证和授权

如何在 WCF 4.0 REST 服务上启用基本身份验证?