使用 STS 和 WCF 时遇到不安全或安全错误异常的问题

2024-03-21

我正在使用几个 WCF 服务,所有服务均使用 WIF 和 STS 提供程序进行保护(均使用开箱即用的 Microsoft 代码和示例)。这些服务都是使用 .NET 3.5 构建的,并且最近全部更新到 .NET 4.0。ALL与服务相关的 .dll 也已更新至 4.0。这些服务多年来一直按原样运行,直到我更新框架版本。

现在的问题是,当调用由 STS WCF 服务保护的 WCF 服务时,在将令牌传递回调用由 STS 保护的 WCF 服务的客户端应用程序后,会生成错误:

从对方收到不安全或不正确安全的故障 派对。有关错误代码和详细信息,请参阅内部FaultException。

HResult -2146233087

{“处理安全令牌时发生错误 信息。”}

服务器堆栈跟踪:位于 System.ServiceModel.Channels.SecurityChannelFactory1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelFactory1.SecurityRequestChannel.Request(消息 消息,TimeSpan 超时)于 System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation 操作、EndpointAddress 目标、Uri via、SecurityToken currentToken、TimeSpan 超时)位于 System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan 超时)在 System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan 超时)在 System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan 超时)在 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan超时)
在 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel 通道,TimeSpan 超时) System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan 超时,CallOnceManager 级联) System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.Call(String 动作、布尔单向、ProxyOperationRuntime 操作、Object[] ins、 Object[] outs,TimeSpan 超时)位于 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作, Boolean oneway,ProxyOperationRuntime操作,Object[] ins, 对象[] outs) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime 操作)位于 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 信息)

在 [0] 处重新抛出异常: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg、IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型)位于 MyProject.IMyService.GetInfo() 在 MyProject.Proxy.GetInfo() 中 c:\Projects\Proxy.cs:行 36

深入挖掘还表明:

无效的安全令牌作为 InnerException.Code.Subcode.Name 属性值。

因此,我查看了以下内容,这些内容都表明系统上的时钟存在问题,但没有一个起作用:

http://blogs.msdn.com/b/dhrubach/archive/2009/12/14/9936037.aspx http://blogs.msdn.com/b/dhrubach/archive/2009/12/14/9936037.aspx
从另一方收到不安全或不正确的安全故障。(使用 SAML 时) https://stackoverflow.com/questions/14688561/an-unsecured-or-incorrectly-secured-fault-was-received-from-the-other-party-whe
http://blogs.msdn.com/b/xiaowen/archive/2009/03/26/tip-add-a-clock-skew-to-prevent-some-security-faults.aspx?Redirected=true http://blogs.msdn.com/b/xiaowen/archive/2009/03/26/tip-add-a-clock-skew-to-prevent-some-security-faults.aspx?Redirected=true

我已附加到这些服务中的调试器并尝试遍历代码,但我找不到罪魁祸首。有谁知道我可能哪里出了问题?

EDIT:有趣的是toughSTS 服务中 WIF 的一部分进行身份验证works!我已打开日志记录并捕获以下内容:

Service authorization succeeded.  
Service: http:// localhost:4068 /MyID/MyID.svc  
Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue  
ClientIdentity: Domain\allen; S-1-5-21-1234567890-1234567895-0987654321-45678 
AuthorizationContext: uuid-22fad22a-22fe-123c-9b69-a22c23f569ce-99 
ActivityId: <null>  
ServiceAuthorizationManager: <default>

我还打开了 WCF 日志记录.config查看 .svc 文件,它们没有产生任何指出问题的错误信息。就像 STS 说的:“嘿,您已通过身份验证,我们通过了您并生成了令牌,现在我们就完成了!”看来调用客户端不喜欢该令牌。然而,这已经工作了很长时间,直到我更改了框架版本。据我所知,从 3.5 到 4.0,WIF 没有任何重大变化,但最大的变化是在 4.5 中,WIF 集成到了框架中。

So all授权有效,只是客户端接受令牌存在问题?


首先,您的跟踪选项在哪里?仅跟踪 System.ServiceModel 可能无法产生足够的信息。至少您应该添加 System.ServiceModel.Activation,可能还应该添加一些与 WIF 相关的附加项(我会添加 System.Security)。

我在使用 STS 并将 java 客户端与 .net 服务器集成时遇到了非常类似的错误。 这是我解决问题的方法。

  1. 为该服务构建一个新客户端并将其连接到服务器。使用 Fiddler 监控消息
  2. 对当前客户端执行相同操作
  3. 比较发送的消息。我知道你可以从 WCF 跟踪日志中获取它们,但我更喜欢 fiddler。

我的情况是将跟踪与消息检查相结合,使我能够找到错误(java 客户端上的策略错误,以及服务自定义安全策略上的愚蠢代码错误)

希望这可以帮助!

Edit

以下是设置除 system.servicemodel.activation 之外的所有跟踪活动的链接。 它可能会派上用场

http://msdn.microsoft.com/en-us/library/ee517292.aspx http://msdn.microsoft.com/en-us/library/ee517292.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 STS 和 WCF 时遇到不安全或安全错误异常的问题 的相关文章

  • WCF 数据合约中可以包含 WCF 操作合约吗?为什么?

    我有一份数据合同 说是用户 它是可序列化的并且可以通过网络传输 我想要一个操作合约 SaveUser 我可以将 SaveUser User user 作为操作合同保留在我的服务合同中 但我可以将其作为自己的行为保留在我的数据合约本身中吗 理
  • autofac wcf注册错误

    我正在尝试在 Wcf 上尝试使用 Autofac 进行结构 namespace WcfService1 Model DataContract IsReference true public partial class Account Dat
  • 将文件附加到 WCF REST 服务响应

    我有一个看起来像这样的资源 users id summary format format When format是 xml 或 json 我用一个由 WCF 自动编码的用户摘要对象进行响应 到目前为止还不错 但当format等于 pdf 我
  • 在 RESTful WCF 中混合 XML 和 JSON,无需单独的方法

    我有一个 RESTful WCF 服务 可以返回 XML JSON 或 JSONP 具体取决于参数 例如 service svc stuff format xml or service svc stuff format json callb
  • WCF 数据契约/序列化

    我创建了一个简单的 WCF 应用程序 它公开一个操作 此操作采用复合数据类型作为参数 我没有用 DataContract 属性修饰这个复合数据类型 但这是有效的 我可以在 WSDL 中看到它的架构 现在我的理解是 这个新的自定义类型应该用
  • 本地计算机上的服务启动然后停止,某些服务如果没有被其他服务或程序使用则自动停止

    我创建了一个示例 Windows 服务并成功安装了我的服务 但是在要启动服务时 我收到以下错误 本地计算机上的此服务启动然后停止 如果其他服务或程序未使用某些服务 则会自动停止 我的配置文件代码
  • 优雅地终止 WCF 服务 - 完成所有打开的会话并限制新会话

    我有一个我编写的 WCF 服务 它托管在 Windows 服务中 它以 PerSession 模式运行 该服务允许客户端通过该服务远程打开文件 更改文件以及关闭文件 到目前为止一切工作都非常顺利 当 Windows 服务停止时 我希望能够让
  • WCF 每个端点有不同的身份验证方法

    我有 WCF 服务 我的服务有 2 个端点 每个端点都有不同的联系人 该服务使用自定义用户名身份验证 在 的 customUserNamePasswordValidatorType 属性中定义 问题是两个端点将使用相同的身份验证方法 无论如
  • WCF 客户端因服务中断而挂起

    我有一个相当简单的 WCF 服务 它为一堆智能客户端执行单向文件同步 我注意到 当通话期间出现网络或服务中断时 客户端将无法与服务器通信 直到整个应用程序重新启动 该服务运行于BasicHttpBinding并由 IIS6 一个 svc 页
  • 将 fetch 与 Content-Type 结合使用时出现 CORS 错误 [重复]

    这个问题在这里已经有答案了 我正在尝试从 FireFox 中的不同域向 REST Web 服务发送 POST 请求 我为此使用 JavaScript 获取 函数 我在 IIS 中托管 REST Web 服务 在我在 JavaScript 中
  • WCF 回调:它可以与 Java 互操作吗?

    目前 我以 正常 方式实现所有 Web 服务 也就是说 我在 Eclipse 中创建一个 WSDL 文件 然后使用 WSCF blue 一个 Visual Studio 扩展 自动生成必要的代码 它是回复 请求 不过 我希望改用回调 这样我
  • 如何在 REST WCF 服务中接受任意 JSON 对象?

    我想实现这样的服务方法 OperationContract WebInvoke RequestFormat WebMessageFormat Json ResponseFormat WebMessageFormat Json public
  • 关闭WCF代理

    当涉及到 WCF 代理时 我始终遵循 try Close catch Abort 的指导 我现在面临一个代码库 它在 MVC 控制器中创建代理并让它们超出范围 我认为我们需要编辑代码库以使用 try Close catch Abort 但存
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 使用 ContractNamespace 属性设置 WCF DataContract 命名空间

    在设计我的服务时 我决定要自定义出现在生成的 WSDL 中的名称空间 对于数据合同 我遇到了合约命名空间 http msdn microsoft com en us library system runtime serialization
  • 从一个客户端使用多个 WCF 服务

    我的网络场有 10 台运行 IIS 的服务器 在每台服务器上我都有相同的网站和相同的 WCF 服务 它公开了一些用于读取 删除缓存 会话 应用程序变量和其他内部数据的功能 在其他一些 Web 服务器上 我有一个 管理 Web 应用程序 它是
  • WCF 服务中的“即发即忘”

    我在 Azure 上有很多 WCF REST 服务 在某些 WCF 服务中 我向外部服务调用 Http 请求 例如发送电子邮件 短信 对非关键第三方服务的 http 请求 我不希望这阻碍我对客户电话的响应 需要一些关于在这种情况下使用的模式
  • 如何为本机启用现有 WCF 服务的 JSONP?

    我有一个现有的服务 如下方法 AspNetCompatibilityRequirements RequirementsMode AspNetCompatibilityRequirementsMode Allowed ServiceBehav
  • WCF 与 .Net 远程处理

    根据本文 http msdn microsoft com en us library bb310550 aspx 带有命名管道的WCF是IPC的最佳选择 它比 Net Remoting快25 左右 我有以下代码 将 WCF 与命名管道与 N
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类

随机推荐