【问题标题】:WebApi and Api Key Validation locationWebApi 和 Api 密钥验证位置
【发布时间】:2018-09-10 22:32:25
【问题描述】:

我正在开发一个公共 REST API。注册的客户端将获得一个 API 密钥来使用 API,来自他们的服务器(而不是来自浏览器)。单个客户端也可以有多个密钥,可能用于其服务器上的唯一应用程序。所以我很好奇人们会在哪里验证 API 密钥...

  1. 使用委托处理程序(通常用于身份验证)并查找密钥。

  2. 使用授权过滤器查看密钥是否被授权。

对于未经授权,我想返回 400 - 错误请求或 403 - 禁止(在密钥暂停的情况下)。

我的第一个想法是密钥是授权访问,并且不识别使用该服务的应用程序。但是,在委托处理程序中查找密钥允许我更快地短路(在 HTTP 消息处理程序中),而不是在授权过滤器触发的控制器中。

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    API 密钥是您验证的凭据,基本上是身份验证。我相信消息处理程序是验证和设置主体的好地方。如果允许处理程序先前建立的身份进行该调用,则稍后在管道中运行的授权过滤器可以授权。我在Thinktecture identity model 的消息处理程序中实现了hawk authentication,它使用共享密钥。有关在 ASP.NET Web API 中使用 ttidm 和 hawk 的更多信息,请参阅here

    关于消息处理程序有几点需要注意。消息处理程序在 Web API 管道中运行较早,但在 ASP.NET 管道中运行相对较晚(假设 Web 托管)。您在 Web API 处理程序中建立的身份仅适用于 Web API,而 IIS/ASP.NET 对此一无所知。如果您知道您只会做虚拟主机,HttpModule 将是一个更好的地方。

    在 Web API 2 中,有一个 AuthenticationFilter。我不知道更多细节,但听到 Dominick Baier 在 NDC 2013 中提到这一点。另一个候选者是 OWIN 中间件,如果您打算使用 OWIN。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      相关资源
      最近更新 更多