3

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

我有一个运行良好的 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 legged OAuth 的唯一选择吗?我希望只是将查询字符串键/值传递给我的 api 并让它处理所有事情,但我只是找不到这样做的分步过程。一切似乎都那么复杂。

那么,有人知道我能做什么吗?我已经阅读了负载并尝试实现大量的东西。

我设法让这个工作:http ://codebetter.com/johnvpetersen/2012/04/04/moving-from-action-filters-to-message-handlers/ 据 我所知,你需要加密你的字符串(用户名)在使用您的公钥发送到 api 之前,然后 api 将使用私钥解密并授权您。

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

  1. 您可以使用上面的链接并轻松地从 jQuery 调用(即不使用 3rd 方库)
  2. 如果不是,那么保护我的 API 以便可以直接从 jQuery.ajax 调用中调用它的最佳方法是什么?

澄清一下,我在 API 中使用 SSL

提前喝彩,

/r3plica

4

2 回答 2

2

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

例如:

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

并检查令牌服务器端。

于 2013-05-09T18:40:52.017 回答
0

您没有太多选择来以最佳方式保护您的应用程序,因为所有调用都是从前端应用程序发出的,因此始终可以嗅探调用。

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

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

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

    [Authorize]
于 2013-05-09T18:29:29.547 回答