安全地从jquery调用我的web api

时间:2013-05-09 18:08:28

标签: jquery security asp.net-web-api rsa

我有一个简单的问题,可能会指出一个复杂的答案:(

我有一个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将使用私钥解密并授权你。

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

  1. 您可以轻松使用上述链接并从jQuery调用(即不使用第三方库)
  2. 如果没有,保护我的API的最佳方法是什么,以便可以直接从jQuery.ajax调用调用它?
  3. 为了澄清,我正在使用SSL作为API

    提前干杯,

    / r3plica

2 个答案:

答案 0 :(得分:2)

对于网站(用户可以查看源代码),我们通过PHP生成AuthenticationToken并将其放入javascript中。令牌会更改每个页面重新加载。

例如:

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

并检查Token Serverside。

答案 1 :(得分:0)

您没有很多选项以最佳方式保护您的应用程序,因为所有呼叫都是从前端应用程序进行的,因此始终可以嗅探呼叫。

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

请查看我的其他帖子以了解身份验证的可能性: ASP.NET Web API Authentication Options

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

    [Authorize]