ASP.NET WebAPI с аутентификацией HawkNet и несколькими пользователями

Я пишу веб-приложение, которое должно предоставлять API клиенту Windows Forms. Я использую ASP.Net WebAPI v2, и поскольку я не могу использовать SSL (слишком дорого для мелкомасштабного проекта), я наткнулся на HawkNet, и это похоже на лучший вариант для защиты связи между моим клиентом и сервером. (которые я оба контролирую).

Однако меня смущает одна вещь с конфигурацией HawkNet на стороне сервера: все примеры, показанные на сайтах и ​​в блогах, показывают жестко запрограммированный обработчик в методе регистрации WebApiConfig, например:

var handler = new HawkMessageHandler(new HttpControllerDispatcher(config),
         (id) =>
         {
             return Task.FromResult(new HawkCredential
             {
                 Id = "dh37fgj492je",
                 Key = "werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn",
                 Algorithm = "sha256",
                 User = "steve"
             });
         }, 60, true);

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",

            constraints: null,
            defaults: new { id = RouteParameter.Optional },
            handler: handler
        );

Однако в моем сценарии клиент Windows Forms будет использоваться разными пользователями на разных ноутбуках, и каждый пользователь должен иметь возможность «войти в систему» ​​из этого приложения WinForms, чтобы использовать веб-API. Если я правильно понимаю, мне нужно поддерживать «ключ» и «идентификатор», как указано выше, для каждого пользователя (может сделать это на сервере в базе данных), и клиент также должен знать этот ключ (я думаю, что ключ может быть чем-то например, хеширование комбинации имени пользователя и пароля, чтобы ее можно было встроить в клиент и на сервер без необходимости передавать ее по сети).

Но как настроить это на сервере? Другими словами, как мне сделать эти значения (имя пользователя, ключ и идентификатор) в HawkMessageHandler на сервере динамическими?

Или я совершенно не понимаю здесь?

Спасибо за ответ.


person tjeuten    schedule 02.08.2014    source источник


Ответы (1)


Похоже, я нашел его.

Можно использовать параметр (id), чтобы передать его другой функции, которая затем может найти его в базе данных, используя этот идентификатор, и вернуть объект hawkcredential.

person tjeuten    schedule 03.08.2014