Javascript 使用HTTP身份验证自动登录的GreaseMonkey脚本

Javascript 使用HTTP身份验证自动登录的GreaseMonkey脚本,javascript,http,authentication,greasemonkey,http-authentication,Javascript,Http,Authentication,Greasemonkey,Http Authentication,我在工作中编写了很多GreaseMonkey脚本,可以自动将我登录到我们这里的内部站点。除了使用HTTP身份验证的时间表应用程序之外,我几乎为这些站点中的每一个都编写了一个脚本 有没有一种方法可以让我使用GreaseMonkey自动登录到这个网站 编辑:我知道浏览器中的store password功能,但我的脚本更进一步,在加载站点时检查我是否登录(通过遍历HTML),然后向登录页面提交帖子。这就省去了加载站点、进入登录页面、输入我的凭据,然后点击提交的步骤。为什么不使用Firefox(我假设您

我在工作中编写了很多GreaseMonkey脚本,可以自动将我登录到我们这里的内部站点。除了使用HTTP身份验证的时间表应用程序之外,我几乎为这些站点中的每一个都编写了一个脚本

有没有一种方法可以让我使用GreaseMonkey自动登录到这个网站

编辑:我知道浏览器中的store password功能,但我的脚本更进一步,在加载站点时检查我是否登录(通过遍历HTML),然后向登录页面提交帖子。这就省去了加载站点、进入登录页面、输入我的凭据,然后点击提交的步骤。为什么不使用Firefox(我假设您使用的是Firefox)来使用密码管理器记住您的凭据呢


我找到了这个链接:。看起来您可以使用javascript进行HTTP身份验证。我认为当你第一次导航到一个URL时,你不可能有Greasemonkey中断。您可能需要设置某种启动点,以使greasemonkey自动重定向+登录。例如,您可以让本地页面在查询字符串中获取目标URL,让Greasemonkey自动执行authenticate+重定向。唯一的问题是,对于用作入口点的书签,您必须将站点书签与启动页面包装在一起。

HTTP身份验证信息会在每次请求时发送,而不仅仅是登录。首次登录后,浏览器将缓存会话的登录信息。因此,如果您试图检查是否已登录,则不会真正保存任何内容

您也可以完全忘记greasemonkey,只需在url上登录,如下所示:

http://username:password@host/

当然,将其保存在书签中可能会带来安全风险,但不会比在浏览器中保存密码更大。

可以通过设置“Authorization”HTTP头来使用HTTP身份验证登录,该头的值设置为字符串“basic username:password”,但设置为“username:password”字符串Base 64的一部分已编码

一点研究发现GreaseMonkey内置了一个函数,您可以向名为GM_xmlhttpRequest的服务器发送GET/POST请求

因此,将所有这些放在一起(并使用此JavaScript代码将字符串转换为base64),我得到以下结果

因此,当我现在访问该站点时,它会遍历DOM,如果我没有登录,它会自动让我登录。

“IE不工作,FireFox工作正常。”

var loggedInText = document.getElementById('metanav').firstChild.firstChild.innerHTML;
if (loggedInText != "logged in as jklp") {
    var username = 'jklp';
    var password = 'jklpPass';
    var base64string = Base64.encode(username + ":" + password);

    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://foo.com/trac/login',
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3',
            'Accept': 'application/atom+xml,application/xml,text/xml',
            'Authorization':'Basic ' + base64string,
        }
    });
}