Я пишу веб-приложение, которое должно предоставлять 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 на сервере динамическими?
Или я совершенно не понимаю здесь?
Спасибо за ответ.