Введение
У нас есть провайдер OpenID, который мы создали с помощью компонента DotNetOpenAuth. Все прекрасно работает, когда мы запускаем провайдера на одном узле, но когда мы перемещаем провайдера в кластер с балансировкой нагрузки, где несколько серверов обрабатывают запросы для каждого сеанса, возникает проблема с подписанием сообщения, поскольку компонент DotNetOpenAuth, кажется, использует что-то уникальное с каждого узла кластера для создания подписи.
Исключение
DotNetOpenAuth.Messaging.Bindings.InvalidSignatureException: Message signature was incorrect.
at DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\ChannelElements\SigningBindingElement.cs:line 139
at DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 940
at DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\ChannelElements\OpenIdChannel.cs:line 172
at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 378
at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse(HttpRequestInfo httpRequestInfo) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 493
Настройка
У нас есть настройка конфигурации компьютера для использования одного и того же ключа машины на всех узлах кластера, и мы настроили сеанс вне процесса с SQL Server.
Вопрос
Как настроить ключ, используемый DotNetOpenAuth для подписи своих сообщений, чтобы клиент доверял ответам со всех серверов в кластере в течение одного сеанса?