2013-09-26 3 views
5

Мне нужно найти способ аутентификации/авторизации пользователей в WCF-сервисе. Я использую внешнюю службу аутентификации, которая хранит учетные данные пользователей.Аутентификация и авторизация пользователей WCF

Например. «Боб использует наш метод входа в систему, мы отправляем учетные данные в службу проверки подлинности, служба сообщает нам, являются ли эти учетные данные правильными». Если Боб посылает другой запрос, нам нужно знать, если Боб уже прошел проверку подлинности.

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

Можно ли решить это с помощью файлов cookie безопасности или у кого-нибудь из вас есть лучшее предложение?

EDIT! Я могу использовать только сервер аутентификации и не имеют доступа к нему

Overview

ответ

9

Проблема вы описываете это хорошо известно, что один был (по крайней мере) два стандартных решений.

федерации с использованием 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 может быть лучше.

Или, если ни один из вариантов невозможен, вы можете просто заимствовать шаблоны из одного подхода и использовать это, не идя на полный уровень.

Удачи вам!

+0

Благодарим вас за этот сложный пост. Я забыл упомянуть, что у меня нет доступа к серверу аутентификации, я могу его использовать. Поэтому я постараюсь сделать свою собственную tokensystem – David

+0

LOL, OK. Как я уже сказал, шаблоны должны быть полезными: o) –

+0

Мне очень жаль брата – David

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