除了OAuth OWIN / Web Api之外的API密钥

时间:2015-04-27 14:07:53

标签: asp.net-web-api oauth owin asp.net-identity-2

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

我目前使用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承载令牌外,如何实施API密钥?我看到的所有文档通常建议编写一个单独的委托处理程序来查找Keys等,但是我的OWIN管道甚至不会这么做,因为对动作本身的调用没有被授权? 2.我们还在以下代码行中明确删除除OAuth之外的任何其他身份验证:

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

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

  3. 我想我们已经在创建JSONP小部件方面找到了所有内容,但这部分让我有些困惑。

    非常感谢任何帮助!

    Cheerz, 阿努普

1 个答案:

答案 0 :(得分:1)

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