2015-01-29 2 views
1

Я использую angularjs и Web API. Чтобы аутентифицировать пользователя, я использую FormAuthenticationTicket (я просто создаю билет с пользовательскими данными, зашифровываю его, а затем возвращаю к клиенту). Когда клиент отправляет запрос, он добавляет этот зашифрованный файл cookie в заголовок своего запроса.ошибка произошла во время криптографической операции .net framework 4.5.1

На удаленном сервере я дешифрую билет и проверяю, является ли этот пользователь законным. На локальном хосте он отлично работает. на сервере У меня есть ошибка, и после очень короткого времени пользователь не идентифицируется. после многих отладок, я заметил, что иногда, когда сервер пытается расшифровать билет, он получает исключение: «ошибка произошла во время криптографической операции»

Я ошибся в этой ошибке, и из того, что я понял, ошибка связана с тем, что сервер пытается расшифровать билет другим машинным ключом.

Возможно, установка машинного ключа в web.config решит проблему, но все статьи, которые я нашел, говорили о ранних версиях рамок .net (я использую 4.5.1).

Это когда я получаю сообщение об ошибке:

FormsAuthenticationTicket fat = FormsAuthentication.Decrypt(enc_ticket); 

Это моя web.config:

 <configuration><appSettings></appSettings> 

     <system.web> <compilation debug="true" targetFramework="4.5.1"> 
     <assemblies> 
     <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> 
     </assemblies> 
    </compilation> 
    <httpRuntime targetFramework="4.5.1" /> 
    <customErrors mode="Off"/> 
    <trust level="Full" /> 
    </system.web> 
     <system.webServer> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <remove name="OPTIONSVerbHandler" /> 
      <remove name="TRACEVerbHandler" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
     </system.webServer> 
    </configuration> 

ответ

5

После многих исследований это, как я решил проблему:

Generate the machine key here и просто добавьте значения machinekey в web.config. Этот ключ машины всегда будет использоваться на любом из серверов на webfarm, где вы размещаете свой веб-сайт.