问题标签 [wcf-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
45190 浏览

wcf - WCF 服务应用程序和 WCF 服务库有什么区别?

我正在开发 WCF Web 服务,我使用了 WCF 服务应用程序模板来执行此操作。

创建“WCF 服务应用程序”是否满足此要求?与 WCF 服务应用程序相比,创建 WCF 服务库有什么优势?

0 投票
3 回答
1668 浏览

wcf - 通过 URL 访问 WCF 服务

我有一个 WCF 服务(比如说 WCFService1 )部署在两台远程机器上。由于相同的服务部署在两台不同的机器上,它们具有公开的通用接口和通用方法。

WCFService1 部署在 Machine1 和 Machine2 上。

为了从客户端使用 WCF 服务,我创建了一个客户端应用程序:

  1. 我添加了 WCF 服务 (WCFService1) 的设计时参考(借助 URL http://11.12.25.23/WCFService/Service1.svc)。

  2. 现在我可以调用服务中公开的方法。到现在为止还好...

现在我的问题是,如果我必须在运行时使用托管在具有不同 URL 的不同机器上的相同服务来更新客户端(比如说http://12.12.24.24/WCFService/Service1.svc),我该怎么做?

目前我正在这样做:

但是每当我使用调用服务中公开的方法时,我都会遇到绑定不匹配错误。

0 投票
3 回答
5948 浏览

.net - WCF 身份验证问题

我有一个非常简单的 WCF 服务,我想公开它。我创建了服务并将其设置在我们的服务器上,没有太多麻烦。问题是我们可以从我们的私有网络中使用该服务,但是当我们尝试从网络外部使用它时,会抛出以下错误:

安全支持提供程序接口 (SSPI) 协商失败。

我做了一些研究,听起来 WCF 默认使用 Windows 身份验证。我想将其更改为不使用身份验证,但我不完全确定如何。这是我的配置现在的样子。

我将不胜感激一些指示,或朝着正确的方向轻推。

0 投票
2 回答
11225 浏览

wcf - WCF 代理和 userPrincipalName

我和我的团队正在开发一个相当大的应用程序,其中包含许多基于 WCF NetTCP 的服务。此系统将在其下运行的 Windows 服务不是本地帐户,而是标准域用户(在托管服务的服务器上具有管理员权限)。在测试连接性的过程中,我遇到了 SSPI 调用失败的问题。基于几个小时的研究,这导致我在客户端配置中丢失了以下行:

使用它的问题是我不使用 VS 或 svcutil 为该服务生成客户端/代理 - 正在使用的代理完全用代码编写,并且它们继承 System.ServiceModel.ClientBase。我相信选择此选项的最初原因是我们可以使用完全相同的 DataMember 对象,这些对象通过围栏两侧的服务 - 第三方组不需要连接到我们的服务,所以这不是问题.

当我没有在标准 system.serviceModel 配置部分指定端点时,有谁知道我在客户端(代码或通过配置)中设置 userPrincipalName 的方法?

这是我的客户端 web.config 的外观以供参考:

0 投票
1 回答
1316 浏览

asp.net - 在 HttpHandler 中模拟 FormsAuthenticated 用户以进行 WCF 调用

我正在使用 HttpHandlers 使用经过身份验证的用户上下文“即时”生成 PDF 报告文件。但是,要创建报告 PDF 文件,我需要使用调用者(经过身份验证的用户)的上下文调用安全 WCF 服务上的方法。

我看到了很多关于 Windows 身份验证的答案,但我使用的是普通的旧 Forms 身份验证,所以这些答案不适用。服务端的身份验证使用 ASP.NET 成员身份(承载 HttpHandler 的同一台服务器)完成。

我应该(我希望)有一种方法可以将调用者上下文传递给服务。

恐怕我说得不够清楚。

我拥有的是 WCF 服务和 HttpHandler。用户通过具有 ASP 成员资格的 WCF 服务进行身份验证。

我想做的是,在HttpHandler中,能够做到

MyMethodCall()使用 HttpCaller 的上下文调用以传递其 ASP 票证/用户名等。

0 投票
2 回答
1908 浏览

hosting - 如何防止他人添加托管 wcf 服务的服务引用?

如果我托管 WCF 服务以便某人(即我认识的人)可以使用我的服务,但如果其他人(即我不认识的人)使用它,我会怎么做?我该如何防止这种情况?如何实现?

是否可以通过服务节流来完成,或者有什么其他方法可以实现这一目标?

0 投票
1 回答
2229 浏览

asp.net - WCF 异常 - 未签名“正文”、“http://www.w3.org/2003/05/soap-envelope”所需的消息部分。问题

我在本地运行一个 WCF 客户端,它总是抛出带有以下文本的 MessageSecurityException: “从另一方收到不安全或不正确安全的故障。有关故障代码和详细信息,请参阅内部 FaultException。”

内部异常消息是:“验证消息安全性时发生错误

我设置了一个跟踪,在该文件中我可以看到“内部内部”异常消息为:“ 'Body',' http://www.w3.org/2003/05/soap-envelope '所需的消息部分是没有签名。

客户端和服务之间的绑定都完美匹配,它们都使用 netTcpBinding 和 securityMode="Message"。

装饰服务背后接口的ServiceContract是:

什么可能导致我的错误?我不是 WCF 专家,所以如果您需要更多信息,请发表评论。关于尝试什么的任何想法也会有所帮助,我只是不知道这里发生了什么。

0 投票
4 回答
29650 浏览

wcf - WCF 和 Kerberos 身份验证

我关注了许多 msdn 文章和 codeplex 指南,但无法让 WCF 与 Kerberos 身份验证和委派一起使用,希望能得到一些帮助。

设置

我在远程机器上的 IIS 网站中有 WCF 服务

  • Windows 2003 R2 上的 IIS 6.0 - SP 2
  • 已添加机器的 SPN (http/myserver && http/myserver:8080)
  • 已为 IIS 应用程序池创建 AD 帐户
  • AD 帐户具有设置,允许委派(对于 Kerberos),设置为 true

我在 8080 上使用Brian Booth 的调试站点,该站点通过了 Kerberos 委派的所有要求。调试 IIS 站点关闭了匿名身份验证,并打开了集成 Windows 身份验证。

我已将这些设置镜像到托管 WCF 服务的站点。

网络服务 - 网络配置(原始)

网络服务 - 网络方法

客户端应用程序 - 应用程序配置

应用程序错误

当我的测试应用程序(一个 WinForms 应用程序)尝试调用 web 方法时,会出现以下错误:

“HTTP 请求未经客户端身份验证方案‘匿名’未经授权。从服务器收到的身份验证标头是‘协商,NTLM’。”

事件簿

事件日志中出现以下错误:

异常:System.ServiceModel.ServiceActivationException:由于编译期间出现异常,无法激活服务“/Service.svc”。异常消息是:此服务的安全设置需要“匿名”身份验证,但托管此服务的 IIS 应用程序未启用它。

我不明白。该服务的重点是不允许匿名身份验证,每个用户/请求都必须使用 Kerberos 票证进行身份验证,然后将它们传递给其他机器。

我应该如何为 Kerberos 身份验证和委派配置此 WCF 服务?

修订版 1

在阅读了这个 SO question之后,我删除了元数据端点。这并没有解决问题。

修订版 2

经过更多研究,我发现一些帖子建议将 wsHttpBinding 更改为 basicHttpBinding。对 web.config 的该部分的修改已包含在下面,并且服务端点已更新为引用该绑定。

Web 服务 - Web Config(修订版)

客户端应用程序 - 应用程序配置(修订)

错误(修订)

当前错误看起来像是包含 Kerberos 身份验证标头。

HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是 'Negotiate SOMEHUGESARYKEYHERE

0 投票
2 回答
4086 浏览

wcf-security - 无需在客户端上安装的 WCF 证书身份验证

我们的设置包括 WCF 服务和我们编写的一些客户端。一些客户端包括 Silverlight 应用程序,而其他客户端包括 Web 和 Windows 应用程序。

我(想)我想根据 X.509 证书对客户端进行身份验证。通常,您会在客户端上安装一个私钥来加密(也称为数字签名)消息。服务器可以使用客户端的公钥对其进行解密,以确保消息没有被更改并证明消息来自我们期望的人(也就是经过身份验证的人)。

我不想在客户端机器上安装证书。部署起来很麻烦,我们不能真正要求我们的客户这样做。前几天我正在和某人交谈,他建议将证书嵌入到客户端程序集中,阅读并使用它。那可能吗?

如果有人能给我举个例子,那就太好了。

提前致谢,

大卫

0 投票
0 回答
1065 浏览

wcf - 为什么 WCF 服务中的 WSDL 不包含 STS 的自定义绑定?

我正在编写一个使用 WSHttpFederationBinding 发布端点的 C# WCF 服务。我们有自己的安全令牌服务器提供令牌,调用者需要使用自定义绑定。

这对于我编写的 C# 客户端来说一切正常:这在其 app.config 中有一个自定义绑定,如下所示:

但是,我希望用户能够以他们想要的任何语言生成他们自己的客户端,只要给定 WCF 服务发布的 WSDL。这样做的问题是,当我使用 Developer Studio 的“添加服务引用”功能尝试这样的事情时,生成的客户端不起作用。

它不起作用的原因是生成的客户端的 app.config 显然是错误的:虽然 STS 存在于“issuer”元素中,但没有自定义绑定的迹象。看看 WSDL,这并不太令人惊讶,因为除了发行人地址之外没有提到任何其他内容。

有没有办法让 WCF 在 WSDL 中添加一些内容来描述这种情况?我的服务器的 app.config 绑定对我来说看起来不错:“发布者”元素与工作客户端完全相同,包括自定义绑定的地址和详细信息。有谁知道为什么 WCF 在生成 WSDL 时似乎忽略了这一点?