首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF WebHttp混合认证(基本和匿名)

WCF WebHttp混合认证(基本和匿名)
EN

Stack Overflow用户
提问于 2008-10-16 18:54:19
回答 4查看 2.7K关注 0票数 8

所有这些都与WebHttp绑定有关,该绑定驻留在自定义服务主机中(此时IIS不是一个选项)。

我实现了一个自定义UserNamePasswordValidator和一个自定义IAuthorizationPolicy。当我将端点的绑定配置为使用基本身份验证时,一切都按我的意愿工作(自定义主体、自定义角色等)。

我还想增加匿名HTTP访问的能力,并让我的自定义实现将匿名用户置于一些默认角色中,等等。(如果没有发送身份验证标头)。

现在发生的情况是,匿名用户在我的任何定制代码被击中之前都会得到401。如果我关闭了HTTP基本身份验证需求,那么身份验证头就会被完全忽略。

如何配置、或注入身份验证头,以做到这两种方式(而不创建两个独立的端点)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-24 16:57:35

首先,根据规格说明,服务对匿名调用的响应是正确的。

其次,这是不可能的。当您自托管您的服务并且有一些http绑定时,WCF将使用System.Net.HttpListener实例来响应http请求(在System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen中创建)。此侦听器有一个名为HandleAuthentication的方法,在调用任何自定义代码之前调用该方法。它负责发送带有挑战的401响应(WWW-认证)。你对此无能为力。如果有,我想知道。

因此,您将有以下选项:

  • 两个端点
  • 配置客户端以了解默认凭据
  • 改变你的客户,让他们能够应对挑战。
票数 1
EN

Stack Overflow用户

发布于 2008-10-18 04:04:55

我过去曾对此进行过研究,发现除非您创建两个独立的端点(这不是您想要的),否则通过配置是不可能的。WCF只是不支持它。

然而,WCF是非常可定制的,您可以通过编写一个定制的通道/绑定来实现这一点。我建议您查看一下休息棋盘 源代码。它应该会让你开始。

票数 0
EN

Stack Overflow用户

发布于 2008-10-20 18:53:58

您的最佳选择是通过角色提供程序实现默认角色,并让匿名用户自动加入该角色。然后以编程方式或通过策略注入(面向方面)策略进行设置,以便通过特定角色允许某些匿名访问。

至于通过配置设置这一点,如果可能的话,这将是相当困难的,有点“黑客”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/209795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档