DotNetOpenAuth: это сообщение уже было обработано.Это может указывать на повторную атаку - PullRequest
1 голос
/ 03 апреля 2011

Я пытаюсь защитить свою службу WCF, используя образец RelyingPartyLogic от DotNetOpenAuth. У меня работает аутентификация потребителей, но когда я отправляю авторизованный запрос к 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 & request) по адресу DotNetOpenAuth.OAuth.ServiceProvider.ReadProtectedResourceAuthorization (HttpRequestInfo запрос) в DotNetOpenAuth.OAuth.ServiceProvider.ReadProtectedResourceAuthorization (HttpRequestMessageProperty запрос, Uri requestUri) в RelyingPartyLogic.OAuthAuthorizationManager.CheckAccessCore (OperationContext OperationContext) в D: \ Code \ Nodeler \ Nodeler.RelyingPartyLogic \ OAuthAuthorizationManager.cs: линия 44 в System.ServiceModel.ServiceAuthorizationManager.CheckAccess (OperationContext OperationContext) в System.ServiceModel.ServiceAuthorizationManager.CheckAccess (OperationContext OperationContext, Message & message)
в System.ServiceModel.Dispatcher.AuthorizationBehavior.Authorize (MessageRpc & RPC)

След выглядит следующим образом:

2011-04-02 19: 16: 12,414 (GMT-5) [16] DEBUG 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] DEBUG 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] DEBUG DotNetOpenAuth.Messaging.Bindings - Проверка входящего AccessProtectedResourceRequest сообщение подпись: HyNQvfk2OrP / nMFjLJdNih4c8N8 = 2011-04-02 19: 16: 15 377 (GMT-5) [16] DEBUG DotNetOpenAuth.Messaging.Channel - Применение секретов к сообщению для подготовки к подписанию или подписи проверка. 2011-04-02 19: 16: 15,423 (Время по Гринвичу-5) [16] DEBUG 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] DEBUG DotNetOpenAuth.Messaging.Bindings - Связующий элемент DotNetOpenAuth.OAuth.ChannelElements.SigningBindingElementChain применяется к сообщению. 2011-04-02 19: 16: 15.424 (GMT-5) [16] DEBUG DotNetOpenAuth.Messaging.Bindings - Связующий элемент DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement применяется к сообщению. 2011-04-02 19: 16: 15.424 (GMT-5) [16] DEBUG DotNetOpenAuth.Messaging.Bindings - Связующий элемент DotNetOpenAuth.Messaging.Bindings.StandardReplayProtectionBindingElement применяется к сообщению. 2011-04-02 19: 16: 15.424 (GMT-5) [16] DEBUG DotNetOpenAuth.Messaging.Bindings - Связующий элемент DotNetOpenAuth.OAuth.ChannelElements.OAuthHttpMethodBindingElementне относится к сообщению. 2011-04-02 19: 16: 15,528 (GMT-5) [16] DEBUG DotNetOpenAuth.Messaging.Bindings - Связующий элемент DotNetOpenAuth.OAuth.ChannelElements.TokenHandlingBindingElement не относится к сообщению. 2011-04-02 19: 16: 15,528 (GMT-5) [16] DEBUG 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] DEBUG 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] DEBUG DotNetOpenAuth.Messaging.Bindings - Проверка входящего AccessProtectedResourceRequest сообщение подпись: HyNQvfk2OrP / nMFjLJdNih4c8N8 = 2011-04-02 19: 16: 15 826 (GMT-5) [5] DEBUG DotNetOpenAuth.Messaging.Channel - Применение секретов к сообщению для подготовки к подписанию или подписи проверка. 2011-04-02 19: 16: 15,853 (Время по Гринвичу-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] DEBUG DotNetOpenAuth.Messaging.Bindings - Связующий элемент DotNetOpenAuth.OAuth.ChannelElements.SigningBindingElementChain применяется к сообщению. 2011-04-02 19: 16: 15 853 (GMT-5) [5] DEBUG 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 более одного раза. Я не могу на всю жизнь понять, почему это происходит.

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Я нашел корень проблемы. OAuthAuthenticationModule также обрабатывал запрос.Обновление IsOAuthControllerRequest исправило это.Я не уверен, является ли это правильным решением или нет, но в этот момент я продолжаю.Я не уверен, является ли это просто природой или OAuth или его самой DotNetOpenAuth, но я не был так расстроен программированием годами.

0 голосов
/ 06 апреля 2011

OAuthAuthenticationModule, который поставляется с шаблоном проекта, уже "потребляет" одноразовый номер, который включен в авторизованный запрос OAuth.Когда ваш OAuthAuthorizationManager также применяется, он пытается использовать nonce второй раз и, таким образом, определяется как атака воспроизведения.Первый модуль авторизует любой входящий HTTP-запрос на уровне ASP.NET, тогда как второй модуль специально авторизует входящий запрос WCF (поверх проверки ASP.NET), чтобы применялась авторизация в стиле WCF.Точно один должен применяться - один или другой, но не оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...