【发布时间】:2011-04-03 00:23:36
【问题描述】:
我正在尝试使用 DotNetOpenAuth 的 RelyingPartyLogic 示例保护我的 WCF 服务。我让消费者进行身份验证工作,但是当我针对 Api 发出授权请求时,我收到错误 此消息已被处理。这可能表明正在进行重放攻击。” 使用堆栈跟踪:
在 DotNetOpenAuth.Messaging.Bindings.StandardReplayProtectionBindingElement.ProcessIncomingMessage(IProtocolMessage 消息)在 DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage(IProtocolMessage 消息)在 DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) 在 DotNetOpenAuth.Messaging.Channel.TryReadFromRequest[TRequest](HttpRequestInfo httpRequest,TRequest&请求)在 DotNetOpenAuth.OAuth.ServiceProvider.ReadProtectedResourceAuthorization(HttpRequestInfo 请求)在 DotNetOpenAuth.OAuth.ServiceProvider.ReadProtectedResourceAuthorization(HttpRequestMessageProperty 请求,Uri requestUri) 在 RelyingPartyLogic.OAuthAuthorizationManager.CheckAccessCore(OperationContext 操作上下文)在 D:\Code\Nodeler\Nodeler.RelyingPartyLogic\OAuthAuthorizationManager.cs:line 44 在 System.ServiceModel.ServiceAuthorizationManager.CheckAccess(OperationContext 操作上下文)在 System.ServiceModel.ServiceAuthorizationManager.CheckAccess(OperationContext 操作上下文、消息和消息)
在 System.ServiceModel.Dispatcher.AuthorizationBehavior.Authorize(MessageRpc& rpc)
轨迹如下:
2011-04-02 19:16:12,414 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Channel - 发送消息:AuthorizedTokenResponse 2011-04-02 19:16:15,362 (GMT-5) [16] 信息 DotNetOpenAuth.Messaging.Channel - 扫描传入的请求 留言: http://localhost:16468/Api/HelloWorld?oauth_token=7ix8k5NXN4NE1EXQWlHYE6klk7A%3D&oauth_consumer_key=f9fa91faa048434a86ab95681e9f732d&oauth_nonce=N7SPWJPl&oauth_signature_method=HMAC-SHA1&oauth_signature=HyNQvfk2OrP%2FnMFjLJdNih4c8N8%3D&oauth_version=1.0&oauth_timestamp=1301789775 2011-04-02 19:16:15,376 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Channel - 收到的传入请求:AccessProtectedResourceRequest 2011-04-02 19:16:15,377 (GMT-5) [16] 信息 DotNetOpenAuth.Messaging.Channel - 处理传入的 AccessProtectedResourceRequest (1.0) 消息:oauth_token: 7ix8k5NXN4NE1EXQWlHYE6klk7A= oauth_consumer_key: f9fa91faa048434a86ab95681e9f732d oauth_nonce: N7SPWJPl oauth_signature_method:HMAC-SHA1 oauth_signature: HyNQvfk2OrP/nMFjLJdNih4c8N8= oauth_version:1.0 oauth_timestamp: 1301789775
2011-04-02 19:16:15,377 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 验证传入 AccessProtectedResourceRequest 消息 签名: HyNQvfk2OrP/nMFjLJdNih4c8N8= 2011-04-02 19:16:15,377 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Channel - 将秘密应用于消息以准备签名或签名 确认。 2011-04-02 19:16:15,423 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 构造的签名基本字符串: GET&HTTP%3A%2F%2Flocalhost%3A16468%2FApi%2FHelloWorld&oauth_consumer_key%3Df9fa91faa048434a86ab95681e9f732d%26oauth_nonce%3DN7SPWJPl%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1301789775%26oauth_token%3D7ix8k5NXN4NE1EXQWlHYE6klk7A%253D%26oauth_version%3D1.0 2011-04-02 19:16:15,424 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.OAuth.ChannelElements.SigningBindingElementChain 应用于消息。 2011-04-02 19:16:15,424 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement 应用于消息。 2011-04-02 19:16:15,424 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.Messaging.Bindings.StandardReplayProtectionBindingElement 应用于消息。 2011-04-02 19:16:15,424 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.OAuth.ChannelElements.OAuthHttpMethodBindingElement 不适用于消息。 2011-04-02 19:16:15,528 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.OAuth.ChannelElements.TokenHandlingBindingElement 不适用于消息。 2011-04-02 19:16:15,528 (GMT-5) [16] 调试 DotNetOpenAuth.Messaging.Channel - 绑定元素处理后, 已收到 AccessProtectedResourceRequest (1.0) 消息是:oauth_token: 7ix8k5NXN4NE1EXQWlHYE6klk7A= oauth_consumer_key: f9fa91faa048434a86ab95681e9f732d oauth_nonce: N7SPWJPl oauth_signature_method:HMAC-SHA1 oauth_signature: HyNQvfk2OrP/nMFjLJdNih4c8N8= oauth_version:1.0 oauth_timestamp: 1301789775
2011-04-02 19:16:15,816 (GMT-5) [5] 信息 DotNetOpenAuth.Messaging.Channel - 扫描传入的消息请求: http://localhost:16468/Api/HelloWorld?oauth_token=7ix8k5NXN4NE1EXQWlHYE6klk7A%3D&oauth_consumer_key=f9fa91faa048434a86ab95681e9f732d&oauth_nonce=N7SPWJPl&oauth_signature_method=HMAC-SHA1&oauth_signature=HyNQvfk2OrP%2FnMFjLJdNih4c8N8%3D&oauth_version=1.0&oauth_timestamp=1301789775 2011-04-02 19:16:15,826 (GMT-5) [5] 调试 DotNetOpenAuth.Messaging.Channel - 收到的传入请求:AccessProtectedResourceRequest 2011-04-02 19:16:15,826 (GMT-5) [5] 信息 DotNetOpenAuth.Messaging.Channel - 处理传入的 AccessProtectedResourceRequest (1.0) 消息:oauth_token: 7ix8k5NXN4NE1EXQWlHYE6klk7A= oauth_consumer_key: f9fa91faa048434a86ab95681e9f732d oauth_nonce: N7SPWJPl oauth_signature_method:HMAC-SHA1 oauth_signature: HyNQvfk2OrP/nMFjLJdNih4c8N8= oauth_version:1.0 oauth_timestamp: 1301789775
2011-04-02 19:16:15,826 (GMT-5) [5] 调试 DotNetOpenAuth.Messaging.Bindings - 验证传入 AccessProtectedResourceRequest 消息 签名: HyNQvfk2OrP/nMFjLJdNih4c8N8= 2011-04-02 19:16:15,826 (GMT-5) [5] 调试 DotNetOpenAuth.Messaging.Channel - 将秘密应用于消息以准备签名或签名 确认。 2011-04-02 19:16:15,853 (GMT-5) [5] 调试 DotNetOpenAuth.Messaging.Bindings - 构造的签名基本字符串: GET&HTTP%3A%2F%2Flocalhost%3A16468%2FApi%2FHelloWorld&oauth_consumer_key%3Df9fa91faa048434a86ab95681e9f732d%26oauth_nonce%3DN7SPWJPl%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1301789775%26oauth_token%3D7ix8k5NXN4NE1EXQWlHYE6klk7A%253D%26oauth_version%3D1.0 2011-04-02 19:16:15,853 (GMT-5) [5] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.OAuth.ChannelElements.SigningBindingElementChain 应用于消息。 2011-04-02 19:16:15,853 (GMT-5) [5] 调试 DotNetOpenAuth.Messaging.Bindings - 绑定元素 DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement 应用于消息。 2011-04-02 19:16:15,853 (GMT-5) [5] 错误 DotNetOpenAuth.OpenId - 重放的随机数 检测到(N7SPWJPl 04/03/2011 00:16:15)。拒绝消息。
更新:经过进一步挖掘,问题是 StandardExpirationBindingElement 被应用了两次,这导致 Nonce 被多次添加到 NonceMemoryStore 中。我一生都无法弄清楚为什么会这样。
【问题讨论】:
-
是的,我确实看到了。他们提供了一点帮助,但都不是同一个问题。
标签: c# dotnetopenauth