具有HawkNet身份验证的ASP.NET WebAPI和多个用户

时间:2014-08-02 18:41:24

标签: authentication asp.net-web-api hmac

我正在编写一个基于Web的应用程序,需要将API公开给Windows窗体客户端。我正在使用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应用程序“登录”才能使用Web API。如果我理解正确,我需要为每个用户维护一个“key”和“id”(可以在数据库中的服务器上执行),并且客户端也必须知道这个键(我猜关键可能是某些东西)比如哈希用户名和密码组合,所以它可以在客户端和服务器上构建,而无需在线路上传递它。)

但是如何在服务器上配置?换句话说,如何在服务器上的HawkMessageHandler中创建这些值(用户名,密钥和ID)?

或者我完全忽略了这一点?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

看起来我找到了它。

可以使用(id)参数将其传递给另一个函数,然后可以使用此id在数据库中查找它,并返回一个hawkcredential对象