2

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

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

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

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

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

4

1 回答 1

2

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

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

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

于 2013-07-09T03:21:18.937 回答