Проблема вы описываете это хорошо известно, что один был (по крайней мере) два стандартных решений.
федерации с использованием WS-Trust
Первый вариант представляет собой один на основе SOAP, который использует активную Федерации на основе WS-Trust. В этом решении:
- Ваш клиент предоставляет учетные данные для службы аутентификации
- Если учетные данные действительны, служба аутентификации возвращает маркер подписан (и зашифрованы) клиенту. Он зашифрован, поэтому любая информация, содержащаяся в токене, остается конфиденциальной - даже клиент не может ее прочитать. Он зашифрован открытым ключом, принадлежащим вашей службе WCF. Он подписан с закрытым ключом, принадлежащим службе аутентификации.
- Клиент отправляет подписанный/зашифрованный токен в вашу службу WCF. Служба может расшифровать ее, поскольку она содержит закрытый ключ для дешифрования. Он может доверять ему, потому что он подписан службой аутентификации.
- На основании содержимого дешифрованного токена служба может установить идентификатор клиента и принять решение о авторизации.
В этой модели обычная терминология:
- Ваша служба аутентификации по службы маркеров безопасности
- Ваша служба WCF является Полагаясь партии
- ваш клиент является Клиент
Звучит сложно, но очень хорошо поддерживается в .Net и WCF с использованием Windows Identity Foundation. Есть много доступных образцов, которые могут быть сделаны (возможно, все), с помощью конфигурации WCF, а не кода.
Это хорошо подходит для сценариев, где клиенты имеют криптовариантность (например, ваши .Net-клиенты) и там, где существуют хорошие рамки (например, WIF). Это не так хорошо для низкоспециализированных клиентов, таких как браузеры и некоторые телефоны, или где вы не контролируете клиентов.
Он обычно используется в корпоративных сценариях, включая федерацию предприятий и предприятий. Он используется реже в интернет-сценариях.
сильные стороны этого являются
- Он стандартизирован и поэтому в целом хорошо поддерживается рамками
- Это означает, что ваша служба WCF никогда не должен обрабатывать клиентские данные (= более безопасные)
- It упрощает переход на различные службы аутентификации (поскольку он стандартизован). Например, на предпосылке AD и Windows Azure AD и поддерживают это, как и другие независимые службы удостоверений
обзор можно найти здесь:
http://msdn.microsoft.com/en-us/magazine/ee335707.aspx
и Google покажет вам много больше пошаговое руководство и примеры.
Федерации с использованием OAuth 2
В этом решении:
- клиент отображает некоторые UI предоставляемые службой аутентификации (как правило, веб-страницы)
- Пользователь вводит свои учетные данные в том, что Пользовательский интерфейс и служба аутентификации аутентифицируются и в конечном итоге возвращают токен клиенту. Характер токена не стандартизирован и не зашифрован. Как правило, он будет подписан как минимум.
- Клиент отправляет маркер с каждым запросом к службе WCF
- Служба WCF проверяет подлинность маркера, как и в предыдущем решении
В терминологии OAuth:
- Ваша служба аутентификации является Авторизация
- Ваш сервис WCF - Владелец ресурса
- Ваш клиент является Client
Опять же, это кажется сложным, но это достаточно хорошо поддерживается в .NET. Вероятно, не так хорошо, как подход WS-Trust, хотя на данный момент. Он поддерживается Windows Azure AD и на стороне клиента, используя библиотеку аутентификации Windows Azure. Пусть другие службы используют этот подход - например, Facebook.
Это хорошо работает, где
- Ваш клиентом является низкой спецификацией или не крипта-способной (например, браузер или несколько телефонов)
- Вы не контролируете клиент (например,сторонняя заявка обращается к вашей службе)
Это очень часто используется в интернет-приложении, где вы, как владелец службы WCF, не обязательно знаете пользователей или клиентов. В некоторых случаях это менее полный стандарт (например, он не определяет точно, как происходит аутентификация), и в результате менее легко переключиться на альтернативные серверы авторизации.
Достоинствами этого являются:
- Это проще и, следовательно, имеет более широкую платформу поддержки
- Она растет в популярности, и поэтому поддержка библиотека не становится лучше все время
- Пользователь никогда вводит свои учетные данные в свой пользовательский интерфейс только на сервер auth, поэтому более вероятно, что он будет доверен (в сценариях Интернета)
- Он имеет встроенный способ контроля объема разрешений, предоставленных клиенту, и отмена этих разрешений, поэтому ag айн это более надежный в сценарии интернет
Официальный .Net поддержка для этого в библиотеке Windows Azure AD Аутентификация
http://msdn.microsoft.com/en-us/library/windowsazure/jj573266.aspx
Есть и другие, открытые компоненты источника тоже, например, DotNetOpenAuth
http://dotnetopenauth.net/
Какое решение будет лучше для вас, зависит главным образом от характера вашего аутент я бы сказал. И о том, работаете ли вы на корпоративном или интернет-сценарии. Если auth. сервис может быть легко адаптирован для обеспечения безопасности WS-Trust Secure Token Service (STS), тогда это будет хороший маршрут. Если вы добавляете некоторый веб-интерфейс в auth. сервис возможен, OAuth может быть лучше.
Или, если ни один из вариантов невозможен, вы можете просто заимствовать шаблоны из одного подхода и использовать это, не идя на полный уровень.
Удачи вам!
Благодарим вас за этот сложный пост. Я забыл упомянуть, что у меня нет доступа к серверу аутентификации, я могу его использовать. Поэтому я постараюсь сделать свою собственную tokensystem – David
LOL, OK. Как я уже сказал, шаблоны должны быть полезными: o) –
Мне очень жаль брата – David