2009-08-07 4 views
12

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

Каковы общие образцы/лучшие практики, которые я мог бы использовать для достижения этого?

+0

Я думаю, у меня есть аналогичная проблема. Можете ли вы описать, как вы его реализовали? –

ответ

12

Если у всех сайтов есть общее имя хоста в их URL-адресе, вы можете установить файл cookie auth (FormsAuthentication.SetAuthCookie), указав путь к файлу cookie как «/», чтобы все сайты могли видеть, что пользователь вошел в систему.

Если сайты не имеют общего имени хоста, я думаю, что единственный способ получить действительно «однажды подписанный, подписанный во всем [в пределах вашего кольца веб-сайтов]», был бы для всей аутентификации, один сайт (возможно, один посвященный аутентификации пользователя), а для других сайтов перенаправить пользователя на этот сайт для аутентификации, а затем этот сайт будет перенаправлять обратно. По сути, этот auth-сайт становится провайдером идентификации и почти точно заполняет роль провайдера OpenID (на самом деле DotNetOpenAuth можно использовать здесь для этой конкретной цели). Поскольку вам кажется, что ваша цель - позволить пользователю войти в систему с помощью OpenID, ваш поставщик OpenID на том же самом сайте auth может сам использовать OpenID для аутентификации пользователя. Ваш собственный поставщик OpenID с чистой делегацией может быть написан таким образом, чтобы он всегда отвечал сразу на запросы checkid_immediate, пока Realm в запросе auth является вашим доверенным кольцом сайтов. Таким образом, вы можете использовать единый вход на всех ваших сайтах.

+0

RE установка глобального файла cookie: не будет причиной уязвимости? Я забыл, что называется такой атакой, но это когда украден ауккуки. Или я ошибаюсь, что это небезопасно? Еще одна вещь - это то, как это делают новые сайты Stack Exchange (после того, как вы входите в основную версию, которую вы автоматически вошли в ее мета)? –

+0

Это не глобальный файл cookie. Он настолько же широк, как и один интернет-хост, как и большинство файлов cookie. И вы только хотите сделать это, если будете контролировать или доверять всем сайтам этого хоста. Если на всех сайтах * .stackexchange.com предоставляется логин для пользователя, возможно, файл cookie является доменным. –

1

Пожалуйста, обратите внимание следующие закономерности & практики по безопасности веб-службы от Microsoft:

Brokered Аутентификация - http://msdn.microsoft.com/en-us/library/aa480560.aspx

Основная тема - Web Service Security

Сценарии, Patterns, и руководство по реализации Улучшения веб-сервисов (WSE) 3.0

http://msdn.microsoft.com/en-us/library/aa480545.aspx

В конечном счете, у вас есть много способов сделать это. Я достиг простого простого знака, создав URL-адрес с токеном с одного веб-сайта, указывающего на другой домен. Зашифрованный токен закодированного & содержит данные для возврата обратно в предыдущий домен. После получения входящего запроса во втором домене базовая веб-служба проверяет, что токен входящего запроса действителен с предыдущим доменом, используя общий секретный секрет, известный обоим доменам.