Как использовать обработчик токенов Microsoft JWT для защиты службы WCF на основе webHttpBinding

#wcf #security #token #jwt #webhttpbinding

#wcf #Безопасность #жетон #jwt #webhttpbinding

Вопрос:

Мне нужно защитить службу WCF, которая использует webHttpBinding с токенами, но мне трудно понять, как это сделать. Насколько я понимаю, рекомендуемый способ сделать это — использовать токены JWT?

У меня есть STS (IdentityServer), который выдает токены JWT моему мобильному клиенту (приложению Sencha Touch) через OAuth 2.0, и этому приложению необходимо вызвать службу WCF на основе webHttpBinding.

Теперь я хочу защитить это с помощью токенов, и я знаю, что Microsoft выпустила пакет NuGet обработчика токенов безопасности JWT.

Я добавил этот обработчик токена безопасности в тег «securityTokenHandlers» под моим тегом «identityConfiguration» в web.config, но я чувствую себя немного потерянным в том, как на самом деле использовать обработчик токена для проверки токена, извлечения утверждений и установки объекта IClaimsPrinicipal.

Большинство примеров, которые я смог найти, используют WebAPI и предназначены для ASP.NET приложения, но в моем случае мне нужно просто защитить «обычную» службу WCF с помощью webHttpBinding.

Любая помощь в том, как это сделать, была бы очень признательна.

Ответ №1:

Вы не найдете много примеров с реализацией OAuth через SOAP-сервисы. OAuth был создан в первую очередь для клиентов, которые не могли обрабатывать SOAP и связанные с ним сложности безопасности WS.

Хотя это не распространено, это все же возможно, вам просто нужно реализовать собственный конвейерный перехват WCF (IDispatchMessageInspector), чтобы получить токен из заголовка HTTP, а затем использовать классы JWT для установки ваших утверждений.

Я не использовал этот пример кода, но, похоже, он будет делать то, что вы хотите. http://blogs.msdn.com/b/pavelkhodak/archive/2013/07/26/enable-http-bearer-jwt-token-authentication-for-rest-service-using-webhttpbinding-in-wcf.aspx

Комментарии:

1. Спасибо за ответ. Однако сейчас я немного смущен. Я использую webhttpbinding в WCF, который, как я понимаю, является привязкой в стиле REST, а не на основе SOAP? Так ли уж редко использовать OAuth для защиты службы в стиле REST? Если это так, то я очень смущен и был бы признателен, если бы вы могли указать мне какое-либо другое направление о том, как защитить webhttpbinding с помощью токенов? Спасибо за предоставленную ссылку, я посмотрю на нее 🙂

2. Извините за путаницу. Моя ошибка, webhttpbinding — это служба в стиле REST. Фреймворк WCF REST просуществовал недолго, поскольку WCF в первую очередь разрабатывался с учетом SOAP. Теперь все службы REST в .NET создаются с использованием Web API, который имеет разные точки перехвата для обеспечения безопасности. Тем не менее, статья, о которой я упоминал, все еще актуальна. Вам необходимо реализовать компонент IDispatchMessageInspector в качестве расширения поведения для подключения к конвейеру WCF и обработки токенов.

3. Если вы хотите лучше понять конвейер WCF и точки перехвата, прочтите эту статью. msdn.microsoft.com/en-us/magazine/cc163302.aspx