API OAuth 之外的密钥 OWIN/Web Api

API Keys in addition to OAuth OWIN/Web Api

我有一个有趣的场景,希望获得一些指导。

我目前已经使用带有 Web API 和 ASP.NET Identity 的标准 OWIN 功能实现了 OAuth。还成功实施了客户端凭据功能,允许客户端(如浏览器和 iPhone)执行 API 匿名操作模式访问,直到发生 RO 登录。

我们现在有一个场景,我们想要构建一个类似于 Stripe Checkout (https://stripe.com/docs/checkout) 的 javascript (JSONP) 小部件。正如您将看到的,通过提供一个简单的数据键属性作为脚本标记的一部分,可以很容易地嵌入这个小部件。我的假设是,这是在后端创建的,作为一个简单的 API 键,但除了可以从中调用它的注册域列表之外。当此密钥传递给 API 时,api 根据发出请求的域验证它,以确保 API 可以访问授予该密钥的必要资源。

我的问题是: 1. 除了 OWIN 管道中的 OAuth Bearer 令牌之外,如何实现 API 密钥?我看到的所有文档通常都建议编写一个单独的委托处理程序来查找密钥等。但是我的 OWIN 管道不会走那么远,因为对操作本身的调用未获得授权吗? 2. 我们还明确删除了以下代码行中除 OAuth 之外的任何其他身份验证:

   config.SuppressDefaultHostAuthentication();
   config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
  1. 对于 javascript 模式,是否有一种更简单的方法来验证仅使用客户端 ID(无密码)的客户端,因为在 js 环境中几乎不可能存储密码?

  2. 我是否遗漏了一些明显可以简化此过程的事情?

我想我们已经了解了创建 JSONP 小部件的所有内容,但这部分让我有些困惑。

任何帮助将不胜感激!

干杯, 阿努普

由于 Owin 是一个管道,所有身份验证中间件都会在每个请求上执行。在您的示例中,请求可能会在 header 中带有 API 密钥:第一个身份验证中间件可能是您的 oauth/bearer 身份验证 - 如果不存在相关的 header,该中间件不会将任何身份附加到请求,并且请求会沿着管道继续进行。下一个中间件可能是一些 API 密钥身份验证中间件(您可以在此处找到实现:https://github.com/jamesharling/Microsoft.Owin.Security.ApiKey),它将检测您的 API 密钥 header 并将相关身份附加到请求。