问题标签 [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 回答
9488 浏览

wcf-security - 实现基于声明的安全性 (WCF/ASP.NET)

在研究了基于声明的安全(或联合安全模型)的主题之后。我遇到过许多使用CardSpace作为示例的示例。我读到的主要文章对这个主题给出了很好的解释,它是Microsoft 在一个名为Zermatt的框架上编写的PDF

我正在研究的基于声明的安全架构相当于实现STS身份验证代理和 STS 授权代理。这样,当我创建一个新服务时,我需要做的就是确保该服务只接受授权代理发出的声明。正如文章中所指出的,授权代理将只接受身份验证代理发出的声明。

设置完成后,任何时候客户端尝试使用新服务,它都必须通过Authentication Broker 进行身份验证(发出经过身份验证的声明),然后通过 Authorization Broker 获得授权(发出经过授权的声明)

这一切都很好,而且架构很清晰,但我不知道如何实现 STS。正如我所提到的,网络上的大多数(如果不是全部)示例都展示了如何使用 CardSpace,但是当您有一个数据库备份您的身份验证方案时,这并不完全有效。

示例场景

替代文字 http://img512.imageshack.us/img512/8329/claimsbasedsecurityza6.jpg

0 投票
3 回答
1855 浏览

asp.net - WCF 安全 - 我不明白的列表

关于 WCF 和安全性,我正在兜圈子,所以我只想在这里提出很多问题,希望有人能帮助我清楚地了解情况。

  1. 有人可以给我一个关于传输与消息级别安全性的简单英语解释。

  2. 我有一个在 SSL 下运行的服务,它将根据用户的 Windows 凭据对用户进行身份验证。我还认为我了解如何通过 PrincipalPermission 限制对服务方法的访问。但是我如何实际检索当前的 IPrinciple,以便我可以根据谁在调用服务返回不同的结果?

  3. 我已经弄清楚如何打开跟踪,并且可以使用“Microsoft 服务跟踪日志查看器”查看我的跟踪日志,但如果我能弄清楚我正在显示什么,那我就该死了。有没有像样的资源来解释如何使用这个东西?

  4. 使用“证书”clientCredentialType 时,这与 SSL 有什么不同吗?

  5. 使用“Windows”clientCredentialType 时,如何查看正在传递的 Windows 用户?

  6. 我的要求意味着我必须使用 basicHttpBindings - 我是否正确假设:

    • 我只有传输级别的安全性可供我使用?
    • 我无法为此绑定实现自定义用户名/密码?

我知道这些问题可能看起来很愚蠢,但任何有助于澄清的帮助都会有帮助。

编辑:

  1. 如何以与 .asmx 服务类似的方式将自定义 SOAP 标头添加到我的服务中?这是一种有效的方法吗?

编辑:

除了上述问题,我想知道是否可以通过检查 Active Directory 来根据其 Windows 用户对 Windows 移动设备进行身份验证。到目前为止,我发现这似乎不太可能。

NB 对于那些不知道 Windows CE 版本的 WCF 有什么可用的人:仅传输级别安全性,以及客户端凭据类型的无/证书。因此,CE 的 WCF 似乎默认情况下不允许这样做,但我可以在消息中安全地发送此信息(通过方法签名)吗?这是发送此类信息的可接受方式吗?

0 投票
2 回答
2616 浏览

c# - WCF 安全问题

一些背景:为了提供身份验证,我在客户端和服务器端(WCF)使用证书并为所有客户端使用一个证书(从应用程序目录手动加载它 - 不是最安全的方式,但它不需要管理证书存储和使安装更加困难):

这是客户端,服务器端主机设置如下所示:

这工作正常并允许签署消息,但就安全模式设置如下:

但是我需要

以某种方式在 ServiceSecurityContext 中获取 WindowsIdentity。混合(传输和消息)安全模式没有帮助,因为我不知道为什么,但即使我在配置中为传输部分模式基础设施设置 Windows clientCredentials 也会尝试建立 SSL 连接。

有任何想法吗 ????


证书用于消息签名,即证明另一方是真正的客户端或服务(中间人)。但正在开发的系统中的授权部分依赖于 ServiceSecurityContect 中的 WindowsIdentity。我想要的只是在 sec.context 中包含 WindowsIdentity,同时 PrimaryIdentity 是 X509CertIdentity。所以我需要在服务器端知道哪个域用户请求了服务操作。

0 投票
2 回答
3761 浏览

asp.net - Asp.net 未针对服务器 2008 上的 wcf 服务进行身份验证

我很难将网站部署到 Windows Server 2008 上的 IIS 7。该站点工作正常,直到它尝试调用托管在同一主机上的 WCF 服务。

当使用完全相同的 Web 配置等在 Visual Studio 20008 中运行 Web 时,一切都适用于我的工作站上的服务。只要我将 Web 部署到服务器 Bam 上的虚拟目录中。身份验证错误。当两者都部署在 Windows 2003 Server 上时,它也可以正常工作。导致此问题的 Server 2008 有何不同?帮助!请。

如果它很重要,所有服务操作都需要 ASP.net 页面的经过身份验证的用户的 Active Directory 组成员身份,并且装饰为:[PrincipalPermission(SecurityAction.Demand, Role = "SOAMemberShipService")]

我从网站收到以下错误:

由于身份验证失败,无法满足对安全令牌的请求。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ServiceModel.FaultException:由于身份验证失败,无法满足对安全令牌的请求。

源错误:

第 919 行:
第 920 行:公共 HSMembersService.MemberSearchResult SearchMembers(HSMembersService.MemberSearch MemberInfoToSearch) { 第 921 行:返回 base.Channel.SearchMembers(MemberInfoToSearch); 第 922 行:} 第 923 行:}

源文件:c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\csrweb\a4d18657\a6d0910d\App_WebReferences.jgx1svpr.0.cs 行:921

堆栈跟踪:

[FaultException:由于身份验证失败,无法满足对安全令牌的请求。] System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(Message message, EndpointAddress target) +6375432 System.ServiceModel.Security.IssuanceTokenProviderBase`1.ThrowIfFault(Message message, EndpointAddress 目标)+25 System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(消息incomingMessage,SspiNegotiationTokenProviderState sspiState)+173

[SecurityNegotiationException:调用者未通过服务身份验证。] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +4596611 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type ) +1713 HSMembersService.IHSMembersService.SearchMembers(MemberSearch MemberInfoToSearch) +0 HSMembersService.HSMembersServiceClient.SearchMembers(MemberSearch MemberInfoToSearch) 在 c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\csrweb\a4d18657\a6d0910d \App_WebReferences.jgx1svpr.0.cs:921 _default.btnSearch_Click(Object sender, EventArgs e) in e:\CSRWeb\default.aspx.cs:114 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +131 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140 System.Web.UI。Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串 eventArgument)+39 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+3215

ASP.net 网站的 web.config(相关服务部分):

服务 web.config:

0 投票
1 回答
8506 浏览

wcf-security - WCF System.ServiceModel.Security.SecurityNegotiationException

尝试从另一台服务器调用我的服务时,我收到以下错误消息。

当我尝试将客户端连接到服务器时,在我的事件查看器中。

我在服务器中启用了跟踪,它看起来像

System.IdentityModel.Tokens.SecurityTokenValidationException正在被抛出。消息显示“该服务不允许您匿名登录。”

我检查了 IIS -> WCF 网站,我确实启用了“启用匿名访问”。

我错过了什么?

0 投票
5 回答
14536 浏览

wcf - “无法加载配置中指定的 X.509 证书身份”

我将工作 WCF 服务从我的开发环境转移到 QA 环境,包括证书(根授权、根授权撤销列表、服务证书 - 包括其 PK)。

之后,我找到了私钥 usihg 'FindPrivateKey',并为所有相关帐户授予了在文件系统级别访问私钥文件的完全权限。

我的应用程序因未处理的异常而崩溃:System.InvalidOperationException:无法加载配置中指定的 X.509 证书身份。

我很难过,我想我涵盖了所有内容,但显然不是......

我已经在 Windows 服务主机和控制台应用程序主机上进行了尝试。同样的问题。

0 投票
2 回答
8923 浏览

wcf - WCF 自定义绑定 - 始终达到发送超时

我有一个需要实现回调并托管在 IIS 6.0 上的 wcf 服务。由于 IIS 6.0 不支持 net.tcp 绑定,我决定使用自定义绑定,因为该服务由不同时区的不同客户端访问,并且使用自定义绑定,我可以将允许的时钟偏移时间设置为除默认一个。

这是我的服务器配置文件:

客户端配置文件:

如果我在同一台机器上使用服务器和客户端,一切正常。如果我在不同的机器上运行它们,我会收到以下错误:

无法连接到 http://10.155.18.198:9000/e60ba5b3-f979-4922-b9f8-c820caaa04c2。TCP错误码10060:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应10.155.18.198:9000。

社区中的任何人都可以在这方面帮助我吗?

0 投票
1 回答
6808 浏览

c# - 在 WCF 中获取调用者的主机名

我正在用 WCF 服务替换现有的 Web 服务,作为迁移的第一步,我将使用 BasicHttpBinding 公开一个端点,直到客户端在今年晚些时候升级。

计划是使用 Windows 服务托管新的 WCF 服务(该服务只会从 Intranet 中调用,因此不需要 HTTP),但同时公开 Basic HTTP 和 Net.TCP 端点,以便迁移可以在阶段。

但是,我在 WCF 服务中获取调用者的主机名时遇到了一些麻烦,查看它使用 Context.Request.UserHostName 获取主机名的当前 Web 服务代码。我已经设法获取调用者的用户名和 IP 地址,但是环境中所有相关的权限/安全服务都使用主机名而不是 IP,那么我有什么方法可以在我的服务中获取主机名吗?

PS 我已将安全模式设置为 TransportCredentialOnly,并将 clientCredentialType 设置为 Windows

0 投票
6 回答
1819 浏览

wcf - 如何在生产期间保护 WCF 端点的开发期间避免 SSL 证书

我们正在开发一些 WCF 服务。请求将跨越域边界;也就是说,客户端在一个域中运行,而处理请求的服务器在不同的(生产)域中。我知道如何使用 SSL 和证书保护此链接。我们将在生产域中向用户询问他们的用户名和密码,并在 SOAP 标头中传递这些信息。

我的问题是在开发和“beta”测试期间要做什么。我知道我可以获得一个临时证书并在开发过程中使用它。我想知道我的替代方法是什么。在这种情况下,其他人做了什么?

更新:我不确定我的问题是否得到了“好的”答案。我是一个由 50 多名开发人员组成的大型团队的一员。该组织相当敏捷。任何一位开发人员最终都可能在使用 WCF 的项目上工作。事实上,其他几个项目正在做类似的事情,但针对不同的网站和服务。我一直在寻找一种方法,我可以让任何人进来并在这个特定的项目上工作几天,而不必跳过很多圈子。安装开发证书就是其中之一。我完全理解在开发过程中“dogfooding”WCF 结构是最佳实践。大多数答案都给出了答案。我想知道除了“

乔恩

0 投票
2 回答
8004 浏览

c# - 如何在自己的客户端-服务器应用程序中使用 System.IdentityModel

我有一个基于 TcpClient/TcpListener 和 SslStream 的简单客户端-服务器应用程序。客户端可以使用 X509Certificate 或在 SslStream 建立后发送用户名和密码来向服务器验证自己的身份。

WCF 使用System.IdentityModel命名空间进行身份验证,但显然可以在任意应用程序中使用——这听起来很有趣。不过,关于如何做到这一点的信息很少(或者我的 Google foo 今天很弱)。

所以,我的问题是:我需要做什么才能将 System.IdentityModel 与我的应用程序集成?我不确定我是否需要所有 ClaimSet 的东西,但如果用户可以只使用他们的 Windows 帐户或任何其他提供的身份验证机制登录,那就太好了。(不幸的是,我不能只切换到 WCF,而是必须使用自定义协议,但如果需要,我可以对其进行一些更改。)