2009-12-07 2 views
5

Я создаю сайт, который будет содержать как страницы ASP.NET, так и апплет Flash. Я хочу инкапсулировать свою бизнес-логику в службу WCF, которая будет отображаться через две конечные точки: один доступный через Интернет через HTTP (S) для использования клиентом Flash и один доступный в центре обработки данных для использования серверами приложений , Если это не похоже на хороший подход, остановите меня здесь; в противном случае, я перейду на ...Аутентификация на основе токенов в WCF

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

Я знаю, что WCF поддерживает встроенную среду безопасности .NET Framework (System.Security) для обеспечения контроля доступа, и я хотел бы воспользоваться этим.

Вопрос в том, как: Как передать токен службе WCF, когда она вызывается Flash, и как мне обрабатывать токен на сервере?

  • WCF имеет «выданный маркер» режим проверки подлинности, но похоже, что это предназначено для использования в полномасштабной сценарии федерации с защищенной службой маркеров и SAML токенов - немного больше сложности, что я на самом деле хотеть. Можно использовать этот режим с моими жетонами «простой случайной строки»? Если да, то как? Имейте в виду, что это должно быть совместимо с Flash.
  • Я мог бы передать токен в заголовке (заголовок SOAP или HTTP-заголовок). В этом случае, как только я определил, какой пользователь делает запрос, как мне сообщить структуру, чтобы проверки System.Security работали?
  • Есть ли другой подход, который я должен рассмотреть? Все, что позволяет избежать отправки паролей в каждом запросе, позволяет мне использовать System.Security и работает с Flash.
+0

Аарон, вы когда-нибудь выяснили простой способ сделать это? Я пытаюсь выполнить некоторую простую аутентификацию на токенах в WCF, и это кажется гораздо более сложным, чем нужно. – technophile

+0

Я закончил, в основном, свой собственный.У меня есть одна конечная точка WCF, которая выдает токены - она ​​берет имя пользователя и пароль, проверяет их и отвечает токеном, который в моем случае является просто случайной строкой. Фактические методы бизнес-логики находятся на другой конечной точке, в которой есть специальный инспектор сообщений, который считывает пользовательский заголовок, содержащий токен. На клиенте другой инспектор сообщений добавляет заголовок к исходящим сообщениям. Это больше работы, чем хотелось бы, но, похоже, она работает хорошо. – Aaron

ответ

2

Как кажется, первоначальный вопрос был дан ответ, я буду держать этот короткий, но один подход действительно будет передать маркер аутентификации в заголовке HTTP и переопределить CheckAccess(OperationContext operationContext, ref Message message) в обычае ServiceAuthorizationManager.

Вы предварительно настроили службу для использования настраиваемой политики, которая реализует IAuthorizationPolicy.

Все, что осталось - это реализовать простые классы IIdentity и IPrincipal, чтобы сохранить ваше состояние авторизации.

ряд хороших статей существует на эту тему:

http://msdn.microsoft.com/en-us/library/system.identitymodel.policy.iauthorizationpolicy.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

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

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