Вопрос

У WCF 4.0 есть аналоговый класс / модуль / что угодно для WCF REST STARTER Kit's ProjectivereCeptor?

Это было полезно?

Решение

Нет ничего, чего-то отображает 1-1 к нему, но вы можете использовать IDISPATCHMESSAGEINSPECTOR от WCF CORE для реализации большинства сценариев, для которых будет делать relogningPector.Пост на http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibile-message-inspectors.aspx имеет некоторую подробную информацию о инспекторах сообщений.

Другие советы

Я вернулся с обновлением.

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

Во всяком случае, достаточно мнения ... на решение. Решение прямо под нашими глазами на Stackoverflow по этой ссылке, но не очень хорошо описанным в нашем контексте ... поэтому я дам кредит «User634119» для примерного кода, найденного здесь: Заголовки в ExperialContext

Во-первых, нам нужно добавить сервисный файл в нашем файле web.config:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceAuthenticationManager serviceAuthenticationManagerType="WCF.BasicAuthorization, WCF"></serviceAuthenticationManager>
      <serviceAuthorization impersonateCallerForAllOperations="false" principalPermissionMode="Custom" serviceAuthorizationManagerType="WCF.BasicAuthentication, WCF">
      </serviceAuthorization>
    </behavior>
  </serviceBehaviors>
</behaviors>
.

Далее Сделайте класс (называемую основной базематоризацией на ссылку на блок ServiceBehaviors выше):

//Authorize the call against the URI resource being requested...
public class BasicAuthorization : ServiceAuthorizationManager
{
    public override bool CheckAccess(OperationContext operationContext, 
    ref Message message)
    {
        //some code
    }
}
.

Далее Сделайте класс аутентификации:

// Authenticate the header signature as described in my previous post
public class BasicAuthentication : ServiceAuthenticationManager
{
    public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
        ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, 
        ref Message message)
    {
        //some code
    }
}
.

В методе аутентификации используйте httprequestmessageProperty, чтобы вытащить детали заголовка запроса и выполнить те же 3 шага, описанные в моем первом ответе.

Eduardo, вы спросили: @Carlosfigueira: Могу ли я использовать его для реализации подсистемы аутентификации?

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

Самый простой способ закрепить WCF 4 REST REST WebHTTP-программирован для моделей программирования на основе программирования WebHTTP. Это:

  1. Выдайте общий секретный ключ и ключ API для каждого клиента для использования в качестве учетных данных. Ключ API действительно такой же, как имя пользователя.
  2. запустить все EndSpoints of SSL, чтобы убедиться, что у вас всегда есть канал / сообщение / безопасность данных
  3. требуют, чтобы клиенты использовали общий секрет для генерации строки HMAC-SHA1 (или equiv) хэш-хешной подписи, которая включает в себя временную метку и их ключ API.
  4. требуют, чтобы клиент проехал все 3 из них, как параметры строк запроса в каждом запросе :
      .
    • Подпись
    • timestamm
    • ключ API
    • Пример: https://127.0.0.1/restendpoint?sig= {sigstring} & apikey= {apikey} & timestamp= {timestamp} & все другие ваши параметры здесь ...
    • На вашей стороне обслуживания реализуйте метод аутентификации, который принимает все 3 строки, а затем:
        .
      • смотрит клавишу API и возвращает общий секрет клиента, что вы имеют в БД или где-то еще.
      • Сравните временную метку от DateTime.Ну, чтобы убедиться, что запрос не более 15 минут старого для преобразования атак воспроизведения.
      • Используя эти 3 строки, воссоздайте строку подписи и сравните его на тот, который передается клиентом.
      • Если они совпадают, запросчик аутентичен.

        Теперь, лучший способ сделать это, используя заголовок запроса авторизации HTTP для хранения этих 3 строк и иметь глобальный процесс перехватчика-ISH, просмотрите все запросы. Это предотвратит бы потенциал на открытую конечную точку без блока аутентификации (ну, по крайней мере, его менее вероятность).

        Проблема с использованием строки запроса для переноса всей этой информации - это строка запросов имеет длину max 2k (которая варьируется от клиента / браузера), и строка запроса становится очень трудно прочитать при отладке ... но просто привыкается к Это.

        Некоторые думают более сложный способ сделать это, это модель STS, в которой вам требуется, чтобы клиент пропустить эти 3 строки аутентификации на конечную точку службы токена безопасности. Ответное сообщение передает токен сеанса, который клиент будет передаваться на каждый вызов вместо 3 строк. Это правда, что для клиента нет необходимости генерировать хеш-сигнатуру HMAC на каждом вызове, но сторона сервера все еще должна подтвердить подлинность токена и концепцию сеанса зачистить чистое спокойное нестабильное поведение.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top