Я использую WIF (.net 4.5) и Azure Active для аутентификации. Сайт будет находиться на Azure.
Все работает как ожидалось локально, однако, когда я помещаю его на лазурь, я получаю ошибку:
Операция защиты данных не удалась. Это может быть вызвано отсутствием загрузки профиля пользователя для текущего контекста пользователя потока, что может иметь место, когда поток олицетворяет собой.
Я понимаю, это потому, что приложения не могут использовать DAPI, поэтому мне нужно переключиться на защиту моего приложения с помощью MAC.
Локально я добавил это в свой webconfig: -
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
как рекомендовано в документации , и я добавил статический машинный ключ, но я не могу найти никаких советов вокруг длины ключа, поэтому я предположил 256.
Эта конфигурация, однако, просто дает эту ошибку:
[CryptographicException: ошибка произошла во время криптографической операции.] System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte [] input) +115 System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.Unprotect(Byte [] protectedData) +59 System.Web.Security.MachineKey.Unprotect(ICryptoServiceProvider cryptoServiceProvider, Byte [] protectedData, String []) +62 System.Web.Security.MachineKey.Unprotect(Byte [] protectedData, String []) +122 System.IdentityModel.Services.MachineKeyTransform.Decode(байт [] закодирован) +161 System.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte [] cookie, Boolean outbound) +123 System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver) +575 System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(байт [] токен, SecurityTokenResolver tokenResolver) +76 System.IdentityModel.Services.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte [] sessionCookie) +833 System.IdentityModel.Services.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken & sessionToken) +186 System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(отправитель объекта, EventArgs eventArgs) +210 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(шаг IExecutionStep, Boolean & завершен синхронно) +69
Я удалил секцию машинного раздела, я не указал правильно отформатированный ключ, но ошибка не исчезла.
Какой бой был WIF!