Проверка подлинности на основе токенов в WCF

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

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

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

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

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

1 ответ

Поскольку кажется, что на первоначальный вопрос был дан ответ, я буду кратким, но один из подходов действительно состоит в том, чтобы передать токен аутентификации в заголовок 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

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

Другие вопросы по тегам