【问题标题】:Clientside GitHub Authentication客户端 GitHub 身份验证
【发布时间】:2013-08-08 11:17:05
【问题描述】:

我正在使用 Javascript 对 GitHub 进行基本身份验证。例如,以下 shell 命令从 Github 获取令牌:

    curl -i -u uaername:password -k -d "{\"scopes\": [\"repo\"]}" https://api.github.com/authorizations

您如何使用 jQuery 和 AJAX 实现这一目标?

【问题讨论】:

    标签: javascript github-api


    【解决方案1】:

    使用 jQuery 在 HTTP 标头中包含基本身份验证数据

    您可以使用Authorization 字段在标题中包含基本身份验证 详细信息。您已经了解了 jQuery 的工作原理。这个 sn-p 有你所缺少的位:

        let auth = btoa(username + ":" + password);
    
        jQuery.ajax({
            url: ...,
            headers: { Authorization: "Basic " + auth }
            ...
        });
    

    注意:btoaatob(读作 B 到 AA 到 B)是内置函数,可以与 Base64 相互转换。请参阅the MDN docs 了解更多信息。

    【讨论】:

    • 如果您使用个人访问令牌,sn-p 也很有用,谢谢
    • 在客户端 JavaScript 中这样做安全吗?
    【解决方案2】:

    您是否在问是否有一种方法可以完全从客户端获取 oAuth 令牌?如果是这样,答案是否定的。

    但是,您有一些解决方法。

    Github.js:https://github.com/michael/github

    Gatekeeper 是一个开源服务器端组件,可以帮助管理 oAuth 令牌:

    https://github.com/prose/gatekeeper

    您还可以通过简单的登录使用 Firebase 之类的东西,在这种情况下,您不需要管理任何服务器端服务:

    https://www.firebase.com/docs/security/simple-login-github.html

    【讨论】:

    • 他专门询问了基本身份验证,您绝对可以从浏览器中完成。有 Octokit JS 库可以做到这一点。
    • 是的,他询问基本身份验证是正确的,但我认为您不能使用基本身份验证来检索 oAuth 令牌(我认为他在这里需要,不是吗?),即使使用这些库。我相信您必须将回调映射到实际的服务器(而不仅仅是 Web 浏览器),这意味着纯客户端 JS 将无法工作。
    • 没有。您可以在请求标头中包含用户名和密码。你永远需要 oAuth。