Во-первых, если я правильно понимаю ваш сценарий, вам не нужен хеш, но вам нужно шифрование этих ключей.Если вы их хешируете, вы никогда не сможете прочитать исходные значения и создать файл cookie сеанса.Вы пытаетесь внедрить междоменную единую регистрацию (если это не ваш случай, и я неправильно понял ваш сценарий, вы можете игнорировать остальную часть моего ответа).
Я бы порекомендовал вам использовать ключи машины дляшифровать / дешифровать:
Шифровать:
var ticket = new FormsAuthenticationTicket(
1, // version
"ticketName", // name of the ticket (it doesn't really matter here)
DateTime.Now, // issue date
DateTime.Now.AddMinutes(1), // validity of the ticket
false, // should the ticket be persistent
"key1=value1&key2=value2......" // values to encrypt, could be any string
);
string encrypted = FormsAuthentication.Encrypt(ticket);
Теперь отправьте зашифрованную строку по проводам, а с другой стороны расшифруйте.Важно выполнить это по зашифрованному каналу, используя SSL, чтобы избежать того, что человек-посредник может украсть зашифрованное значение и попытаться его перебором:
var ticket = FormsAuthentication.Decrypt(encrypted);
if (!ticket.Expired)
{
// The ticket hasn't expired (< 1min) => use the values
string keys = ticket.UserData;
// TODO: Parse and issue cookie
}
Чтобы это работало, этонеобходимо иметь одинаковые машинные ключи как на стороне шифрования, так и на стороне расшифровки.
ОБНОВЛЕНИЕ:
Вот шаги:
- Пользователь аутентифицирован в Системе A (Домен 1)
- Система A решает включить в систему iframe B (Домен 2), где пользователь не аутентифицирован
- Система A генерируетзашифрованная строка, содержащая информацию о пользователе с использованием машинных ключей
- Система A отправляет в Систему B (через свойство src iframe) это зашифрованное значение
- Система B считывает и дешифрует зашифрованное значение, содержащее информацию о пользователе
- Система B выдает файл cookie аутентификации, чтобы указать, что пользователь теперь аутентифицирован в Домене 2
- Система B показывает аутентифицированное содержимое пользователю
Вы достигли междоменного единого входа.Конечно, эта техника не ограничивается фреймами.