哪些选项可用于要由来自另一个域jQuery的应用程序所消耗的MVC3的Web API应用的认证?
这里有约束/事到目前为止,我已经试过: -
- 我不想使用OAuth; 与有限的用户群的专用应用我不能指望最终用户对现有的供应商自己的账户并没有范围,以实现自己的
- 我有一个全功能的HMAC-SHA256使用FPGA实现在头传递数据就好了工作; 但是,这并不在IE工作,因为在CORS IE8 / 9坏了,不允许你送头
- 我需要跨域的消费应用程序是在不同的域的API,但不能使用JSONP监守它不允许你使用页眉
- 我想,以避免令牌(只)为基础的方法,因为这是开放给重播并且通过状态违反REST
在这一点上,我辞职到使用URL或查询字符串/后提供的哈希和其他变量HMAC-SHA256方法。
在URL中把这些变量似乎只是脏了,并把它们在查询字符串/后是一种痛苦。
我成功地使用jQuery $ .ajaxSetup beforeSend选项生成散列并将其连接到头部,但正如我所说,你不能用IE8 / 9使用页眉。
现在我不得不求助于$ .ajaxPrefilter,因为我不能改变beforeSend ajax的数据,而不能只在$ .ajaxSetup扩展的数据,因为我需要基于AJAX的类型来动态计算哈希值查询。 $ .ajaxPrefilter也是一个问题,因为没有添加这样的方式所需的变量没有干净/简单的方法就是方法无关...即它必须查询字符串的GET和FORMDATA为POST
我必须失去了一些东西,因为我无法找到一个解决方案: - 一)支持跨域一)未对MVC和JQuery边c既是一个巨大的黑客)实际上安全d)与IE8 / 9工作
必须有一个人在那里做正确此...
编辑
为了澄清,在API方面的认证机制是好的...不管我验证请求哪种方式我产生的GenericPrincipal并使用该API(这样做的优点是另一篇文章中,但它允许我使用在MVC 标准的授权机制,我更喜欢我自己的滚动...少对其他开发人员对我的API来学习和维护)
问题在于primarly鉴权信息从客户端转移到API: - - 它不能依赖于服务器/ API状态。 所以我不能在一个呼叫通过用户名/密码,获得令牌回来,然后继续使用该令牌(开放重播攻击) - 任何需要使用请求头已经出来了,因为IE使用XDR,而不是像XHR其余浏览器的,并且它不支持自定义页眉(我知道IE10支持XHR,但实际上我需要IE8 +支持) - 我觉得我卡生成HMAC,并传递给它的URL的地方(路径或查询字符串),但这似乎是一个黑客,因为我使用的是不适合这个要求的部分 - 如果我使用的路径有很多乱七八糟的解析,因为至少我必须通过一个用户名,时间戳和哈希每个请求; 这些都需要以某种方式分隔和我都在网址中的其余部分用于在分隔符少控制 - 如果我使用数据(查询字符串/ FORMDATA)我需要改变的地方,我要送这取决于我的方法,我的认证细节使用(FORMDATA为POST / PUT /等和查询字符串为GET),并且我也polution与这些VARS应用层数据空间米
由于糟糕,因为它是,查询字符串/ FORMDATA似乎是最好的选择; 但是现在我有工作,如何捕捉到这些在每个请求。 我可以使用的MessageHandler或过滤器,但也提供了convienient的方式来访问FORMDATA。
我知道我可以只写所有的分析和处理自己的东西(它看起来像我这样),但关键是我不相信有没有一个解决方案了。 这就像我有(1)对于IE的支持,(2)安全(3)干净的代码,我只能选两个。