Как:Межсайтовая публикация и перенаправление в веб-формах ASP.NET.
-
04-07-2019 - |
Вопрос
Сценарий:
Передо мной стоит задача — обеспечить решение единого входа между различными организациями/веб-сайтами.Я начинаю как аутентифицированный пользователь на веб-сайте одной организации, конвертирую определенную информацию в документ Xml, шифрую документ с помощью тройного дескриптора и отправляю его как переменную сообщения на страницу входа второй организации.
Вопрос:
Как только я упаковаю свои XML-данные, как мне программно выполнить публикацию на второй веб-сайт и перенаправить браузер пользователя на второй веб-сайт?
Это должно вести себя так же, как и форма вроде:
действие = "http://www.www.com/posthere" метод = "пост"
...и наличие скрытого текстового поля, например:
input type="hidden" value="мой зашифрованный xml"
Это пишется в веб-формах asp.net 2.0.
--
Редактировать: Ник спрашивает, почему описанная выше HTML-форма не работает.Отвечать:Я не контролирую ни один из сайтов;Я создаю «посредника», который делает все это возможным.Сайт 1 перенаправляет пользователя на страницу, которую я создаю, мне нужно создать XML, а затем переслать его на сайт 2.Сайт 1 не хочет, чтобы пользователь знал о моем сайте, перенаправление должно быть прозрачным.
Процесс, который я описал выше, — это то, что требуют обе стороны (сайт А и сайт Б).
Решение
Отправьте обратно документ, содержащий форму со скрытым вводом, и включите обработчик загрузки, который немедленно отправляет форму на другой сайт.Использование document.ready() jquery решает проблему того, загружается ли DOM до публикации сообщения, хотя есть и другие способы сделать это без jquery.Возможно, вы захотите разместить на экране небольшое сообщение о том, что пользователь будет перенаправлен в ближайшее время, и предоставить ссылку, которая также отправляет сообщение.
...headers left out...
<script type='text/javascript'>
$(document).ready( function() {
$('form:first').submit();
});
</script>
<body>
<form action='othersiteurl' method='POST'>
<input type='hidden' value='your-encrypted-xml" />
</form>
</body>
Другие советы
Вы думаете об этом слишком ориентированно на процесс, вам понадобится месяц воскресений, чтобы попытаться устранить все ошибки и движущиеся части того, что вы предлагаете.
Вы уже отправляете сообщение на другой сервер, поэтому вам действительно не нужно ничего делать.Форма, которую вы имеете, уже идеальна, и когда другой сервер перехватывает запрос, он принимает решение либо разрешить пользователю вход и продолжить работу через сайт, либо перенаправить его обратно к их рефереру (так в оригинале) в заголовке.При перенаправлении обратно к рефереру они могут захотеть добавить сообщение о том, что случилось, например ?error=no_auth.
Я писал об этом некоторое время назад по другому вопросу.Надеюсь это поможет:
Как передать сеанс с аутентификацией между доменами приложений