Чтение значения cookie: использование модуля провайдера перезаписи URL - невозможно проверить в System.Web.Configuration.MachineKeySection.EncryptOrDecryptData
У меня есть требование, чтобы добавитьUSERNAME на URL на стороне сервера с помощью модуля перезаписи URL.
Зачем?: У меня есть сайтsite1, когда ПОЛЬЗОВАТЕЛЬ входит в систему на site1, он увидит ссылку наsite2.Эта ссылка является URL или отчетами. (Tableau). Аутентифицированный тикет был создан с использованиемFormAuthentication на сайте1. когдаUSER нажимает на ссылку, аутентифицированимя пользователя должен быть передан на сайт2.
Я мог бы добавить имя пользователя со стороны клиента, но из-за проблем с безопасностью я должен добавить имя пользователя к URL на стороне сервера, прежде чем он будет выполнен.
Поэтому я решил использовать провайдер перезаписи URL, который захватываетимя пользователя расшифровывая значение cookie, как показано ниже
namespace PlatformAnalysisUrlProvider.PlatformAnalysisProvider
{
class AnalysisRewriteProvider: IRewriteProvider, IProviderDescriptor
{
public void Initialize(IDictionary<string, string> settings,
IRewriteContext rewriteContext)
{
}
public string Rewrite(string value)
{
string[] cookievalues = value.Spli('=');
FormAuthentication ticket = FormAuthentication.Decrypt(cookievalues[1]);
//Decrypt throws error as shown below
}
}
}
Значения Cookie
cookievalues [0] = has the key
cookievalues [1] = has the value
Пример:
233AWJDKSHFHFDSHFJKDFDKJFHDKJFKDJFHDHFDHFKJHDFKJHDFJHDKJFHDSKJFHDF
Это значение cookie. Но расшифровки не происходит
Я получаю следующую ошибку
Unable to validate data.
at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(
Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start,
Int32 length, IVType ivType, Boolean useValidationSymAlgo,
Boolean signData)
Вот мои настройки в IIS для перезаписи URL
Запрашиваемый URL: соответствует шаблонамИспользование: регулярное выражениеИгнорировать дело - провереноУсловия - ввод: {HTTP_COOKIE} Тип: соответствует шаблону шаблона:. *Тип действия - переписатьПереписать URL -http://11.155.011.123{HTTP_URL} & ИМЯ_ПОЛЬЗОВАТЕЛЯ = {PlatformAnalysisUrlProvider: {С: 0}}Я также настроил MACHINE KEY, как предложено на этом форуме
Я отправил этот пост на разработку
В одной из публикаций о переполнении стека предполагается, что это может быть проблема с брандмауэром или антивирусом. Но у меня не установлен антивирус или включен Firwall.
Это действительно помогает, если кто-то направит меняпример кода где используется веб-сайт, размещенный в провайдере IIS и URL Rewrite.
Обновление журнала ошибок
MODULE_SET_RESPONSE_ERROR_STATUS Уведомление - «PRE_BEGIN_REQUEST» HttpReason - «Ошибка модуля перезаписи URL»
Обновление сообщения с помощью ключа машины
<MachineKey Description="AES" validation="SHA1"
descriptionKey="******"
validationKey="******" CompatibilityMode="Framework20SP2">
Причина может быть - Сайт, на котором создаются файлы cookie, разработан с использованием .NET Framework 4.5. Провайдер, где мы читаем куки - это Framework 3.5. Это может быть причиной? ИЛИ Нужен ли нам файл конфигурации для проекта провайдера?
Обновления - Я добавил машинный ключ в Machine.config, но он все равно не работал :(
Альтернативное решение
Добавить App.config в библиотеку классов
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- ... -->
<add key="SecurityKey" value="somevalue"/>
<!-- ... -->
</appSettings>
</configuration>
Скопируйте конфигурацию в GAC.http://techphile.blogspot.in/2007/02/2.html
Зашифровать значение (обратитесь сюда) и создавать собственные куки во время входа
Используйте логику Decrption внутри собственного провайдера перезаписи