【问题标题】:Authentication and Authorization for Web API with a Javascript plugin as a client使用 Javascript 插件作为客户端的 Web API 的身份验证和授权
【发布时间】:2012-12-31 05:15:11
【问题描述】:

我正在编写一个 Web Api(使用 asp.net Web Api),自然希望客户端通过身份验证才能使用该服务。

我希望编写一个使用 Api 的 Javascript 插件,然后将其简单地放入其他网站。

有没有一种安全的方法可以让插件进行身份验证? 我不确定如何对传递给插件的任何信息保密。

我还希望本机应用程序使用 API,那么这是否规定了使用 cookie 的任何内容?

谢谢

【问题讨论】:

    标签: javascript asp.net-mvc rest authentication asp.net-web-api


    【解决方案1】:

    有没有一种安全的方法可以让插件进行身份验证?

    您将不得不在插件中嵌入用户名/密码,或者有一些字段来从用户那里获取该信息。

    如果您选择嵌入用户名/密码,请考虑一些代码:

    $.ajax({
            url: 'api/foo',
            type: 'GET',
            dataType: 'json',
            success: onSuccess,
            error: onError,
            beforeSend: setHeader
        });
    

    注意beforeSendsetHeader 的分配:

    function setHeader(xhr) {    
        xhr.setRequestHeader('Authorization', 'Basic YXBpX3VzZXIxOjEyMzQxMjM0');
    

    }

    注意,您必须使用以下方法预先计算 auth 字符串

    现在,如果您想从用户那里提取用户名/密码,您可以这样做:

    function setHeader(xhr) {            
            xhr.setRequestHeader('Authorization', make_base_auth($("#username").val(), $("#password").val()));
    }
    
    function make_base_auth(user, password) {
        var tok = user + ':' + password;
        var hash = Base64.encode(tok);
        return "Basic " + hash;
    }
    

    【讨论】:

    • 也使用 SSL 并且可能还绑定用户名/密码,最终将 Auth 令牌绑定到 IP 地址范围。
    • 我假设 webapi 服务在 https 上
    • 在问题“有没有一种安全的方法可以让插件进行身份验证?”让 https 上的 webapi 符合该标准
    • 但是,如果您在 javascript 变量中拥有密码,例如在 make_base_auth 方法中,那么观察页面的任何人都不会看到(因为他们可能会在 javascript 等中中断点)?这是我最关心的问题;没有任何“隐藏”的服务器端逻辑,没有什么是真正安全的,无论通过网络发送什么。
    • @user1541517 是的,这是真的,因此为您提供了必须提供用户名和密码的替代方案。如果您不希望他们这样做,但您都希望它能够正常工作,那么是的,没有什么可以真正“安全”,但我不知道您到底想要达到什么目的。但是,您可以确保“嵌入页面”的用户是具有尽可能少的权限的用户。如果用户受到威胁,或者您不想再允许“匿名”访问,您可以删除插件使用的用户。
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2016-01-12
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多