2013-05-09 22 views
3

我有一个简单的问题,可能点出一个复杂的答案:(调用从jQuery的我的网页API安全

我有一个Web API,它工作得很好,但现在我想建立认证/授权。 我需要它在所有平台上工作,但主要是从jQuery的自然,我不想把我的管道沿线用户名和密码以明文形式是这样的:

function GetAllCategories() { 
    var credentials = $.base64.encode('r3plica:mypassword'); 
    var authType = "Basic " + credentials; 

    $.ajax({ 
     url: "http://localhost:18904/api/Categories", 
     type: "GET", 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader("Authorization", authType); 
     }, 
     success: function (data) { 
      alert('Success!'); 
     }, 
     error: function() { 
      alert('error'); 
     } 
    }); 
} 

,所以我一直在寻找其他替代品。 是使用3段OAuth的唯一选择吗?我希望只传递一个查询字符串键/值到我的api,让它处理所有事情,但我无法一步步找到这样做的过程。 一切似乎都很复杂。

那么,有没有人知道我能做什么?我已阅读加载并试图实现大量内容。

我设法得到这个工作:http://codebetter.com/johnvpetersen/2012/04/04/moving-from-action-filters-to-message-handlers/ 从我虽然可以告诉,你需要使用你的公钥发送到API之前加密您的字符串(用户名),然后API将解密使用私钥和授权你。

所以我的2个问题很简单:)

  1. 你可以用上面的链接,并从jQuery的轻松调用(即不使用第三方库)
  2. 如果没有,什么是最好的方式去关于保护我的API,使其可以直接从jQuery.ajax调用中调用?

只是为了澄清,我使用SSL的API提前

干杯,

/r3plica

回答

2

的网站(其中用户可以查看到源代码),我们通过生成一个PHP和AuthenticationToken把它转换为JavaScript。令牌更改每个页面重新加载。

例如:

<script type="text/javascript">var authToken = '<?=genToken();?>'</script> 
[...] 
$.ajax([..] 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader("ownToken", authToken); 
    }, 

,并检查令牌Serverside集团。

+0

因此,您是说客户端将始终使用服务器端逻辑?我知道每个请求上的令牌更改,因此嗅探它并不好,但会不会有客户端不使用服务器端代码的情况? – r3plica 2013-05-09 18:46:54

+0

如果您使用SSL连接,则“嗅探”问题已过时。它适用于用户可以简单查看html源代码的情况。客户端不使用Serverside代码的情况例如是使用PhoneGap编译的智能手机Web应用程序。但是,您可以将身份验证数据存储在localStorage或其他内容中。 – take 2013-05-09 18:51:51

+0

如何验证我的web api中的'genToken()',然后在我的Web API中进行验证? – Si8 2017-01-26 14:27:05

0

你没有太多的选择以确保您的应用程序因为所有呼叫都是由前端应用程序完成的,因此始终可以嗅探呼叫。

但是,您可以考虑将ssl与asp.net认证结合使用。

请看看我的其他职位认证的可能性: ASP.NET Web API Authentication Options

再回到你的问题: 你所想达到可以简单地使用asp.net窗体身份验证来完成。您可以使用Authorize属性修饰您的视图方法(在您的控制器类中);

[Authorize] 
+0

嗨,谢谢你的回复。我目前正在使用SSL,因此您在链接中建议的选项不可用,原因与原始发布者相同:) – r3plica 2013-05-09 18:38:21