2009-02-05 3 views
1

У меня есть два веб-приложения, и оба они разработаны в ASP.NET. Теперь я хочу предоставить функцию, которая позволяет пользователю щелкнуть один URL-адрес на сайте приложения (один виртуальный каталог IIS) A на другой URL-адрес на сайте B приложения (другой виртуальный каталог IIS).Как отправить идентификатор пользователя между различными приложениями в ASP.Net?

У меня есть две идеи для их реализации, но у обоих есть проблемы. Я хочу знать, какое решение должно быть оптимальным решением?

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

Решение 2. Когда пользователь перенаправляет URL-адрес на другом сайте, я могу добавить идентификатор пользователя после URL-адреса, я мог бы перенаправить этот URL-адрес на другой сайт http://www.anotherapplicationsite.com/somesuburl?userID=foo, но я уверен, что таким образом будет обнаружен идентификатор пользователя легко поднять проблемы безопасности.

ответ

-1

Я не думаю, что 1) будет работать из-за защиты браузера (cookie-файлы из одного домена не могут быть прочитаны другим доменом). Я бы пошел с 2), за исключением того, что я бы зашифровал значение querystring.

EDIT: Для получения дополнительной информации о проблемах конфиденциальности и безопасности файлов cookie ознакомьтесь с разделом «Конфиденциальность и сторонние файлы cookie» here.

+0

Thanks Kevin Tighe! «Я не думаю, что 1) будет работать из-за защиты браузера (cookie-файлы из одного домена не могут быть прочитаны другим доменом)». - Мне интересно узнать больше об этом ограничении безопасности, есть ли у вас какие-либо дополнительные документы о ограничениях на печенье? привет, George –

+0

Меня очень интересует, как вы «зашифровываете значение querystring». Я никогда этого не делал раньше. Не могли бы вы порекомендовать мне несколько примеров кода для изучения? –

+0

Если он просто перенаправляет из одного виртуального каталога в другой на том же сайте, cookie будет работать абсолютно. Файлы cookie будут работать даже в поддоменах (app1.myDomain.com может читать файлы cookie с сайта app2.myDomain.com). –

-1

Что вы используете в качестве идентификатора пользователя? Если вы используете свой номер социального обеспечения или электронную почту (что-то чувствительное), тогда вы захотите зашифровать значение, прежде чем поместить его в строку запроса. В противном случае (если идентификатор пользователя является чем-то двусмысленным, как целое или GUID), должно быть хорошо указать идентификатор в строке запроса.

+0

Спасибо Andrew Hare, О ваших идеях «зашифровать значение перед тем, как положить его на строку запроса», мне очень интересно и думает, что это должна быть хорошая идея. Могли бы вы порекомендовать мне несколько учебников или примеров кода для изучения? Я никогда этого не делал раньше. :-) –

0

Пока у вас есть хорошая система аутентификации на втором веб-сайте, я думаю, что решение 2 - это одно для вас, принимая во внимание замечание Эндрю о чувствительных идентификаторах, конечно.

Для получения дополнительной информации о шифровании: проверьте документацию FormsAuthentication.Encrypt Method. Я думаю, что они даже что-то делают с написанием ценности в файле cookie в этом примере.

+0

Если метод FormsAuthentication.Encrypt использует cookie, но может ли другой домен использовать cookie? Я думаю, что информация cookie не может быть получена из другого домена? :-) –

-1

с помощью междоменное, вы не можете ПОДЕЛИТЬСЯ сессию, так что я думал о POST

идея 1

если боятся «показывать» имя пользователя в адресе, почему не посылает POST ?

<form name="myForm" action="http://www.mydomain.com/myLandingPage.aspx"> 
    <input type="hidden" id="userid" value="myUsername" /> 
    <a href="javascript:myForm.Submit();">click here</a> 
</form> 

но потом ... от курса, "View Source Code" покажет, что

идея 2

потом .. Я вспомнил, что я делаю то же самое, но посылая Зашифрованные строка, как:

http://www.anotherapplicationsite.com/somesuburl?userID=HhN01vcEEtMmwdNFliM8QYg+Y89xzBOJJG+BH/ARC7g= 

вы можете использовать алгоритм Rijndael, чтобы выполнить это, ссылка ниже, имеет VB и C# код:

http://www.obviex.com/samples/EncryptionWithSalt.aspx

затем на сайте 2, просто Расшифровать и проверить, если пользователь существует ...если это так, продолжайте, если не говорите, что пользователь попытался умерить строку запроса :)

+0

Я не видел, как в вашем javascript-коде вы отправляете POST и шифруете идентификатор пользователя? Смущенный. –

+0

это 2 идеи, только после написания первого я понял, что вам следует избегать написания имени пользователя в скрытом поле. вторая идея использует код .NET в ссылке для передачи имени пользователя в зашифрованном виде. – balexandre

0

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

Я бы использовал базу данных для хранения информации для входа, и оба сайта ссылаются на тот же самый дБ. Используйте его, как если бы вы использовали сеанс.

D

+0

Спасибо. Моя путаница заключается в том, как написать код, который может шифровать идентификатор пользователя и отправлять на другой сайт методом POST? Любые примеры кода для изучения? –

1

Я много работаю с подобными вещами. То, что вы ищете, похоже на одноразовое решение кандидата или Federated Security.

Вы могли бы попытаться сделать что-то похожее на следующее:

  1. Создание простой дб или другой вид хранения таблицы с двумя колонками «Нонс» и «имя пользователя»

  2. Когда вы строите ссылку на другой сайт создайте идентификатор GUID или другой уникальный идентификатор для использования в качестве одноразового nonce, передавая его как querystring? id =. Вставьте запись в таблицу с текущим аутентифицированным именем пользователя и уникальным идентификатором, который вы создали.

  3. Когда вы достигнете адресата своей ссылки, пройдите уникальный идентификатор, чтобы вызвать веб-сервис, который будет соответствовать идентификатору с именем пользователя в базе данных, которую вы вставили, перед тем как перейти на второй сайт (закрепите это с помощью ssl).

  4. Если учетная запись отменена с действительным именем пользователя, вы все настроены. Webservice должен удалить использованную запись, и таблица должна оставаться более или менее пустой в любое время, когда вы не находитесь в середине транзакции.

Он также хорош, чтобы включать DateTime в вашем Нонс/таблице имя пользователя и истекают его в течение 60 секунд или меньше, чтобы свести к минимуму риск повторного воспроизведения атак. Мы также требуем, чтобы клиентские сертификаты для внешних приложений вызывали веб-сервис, чтобы проверить личность вызывающего. Внутренние приложения действительно не требуют использования клиентских сертификатов.

Хорошая вещь о том, что это весы довольно хорошо, как многие сайты, как вы хотели бы использовать

не совершенен безопасности, но мы никогда не имели существенного компромисса с эдакий как система.

Смежные вопросы