使用HTTP身份验证自动登录GreaseMonkey脚本
我在工作中编写了很多GreaseMonkey脚本,这些脚本会自动将我登录到我们在此处提供的内部站点中。除了我们的时间表应用程序使用HTTP身份验证之外,我几乎已经为这些站点中的每个站点编写了一个脚本。
有什么方法可以使用GreaseMonkey自动将我登录到该网站吗?
编辑:我知道浏览器中的商店密码功能,但是我的脚本更进一步,方法是检查网站加载时是否登录到网站(通过遍历HTML),然后将帖子提交到登录页面。这省去了加载网站,进入登录页面,输入我的凭据然后点击提交的步骤。
解决方案
回答
为什么不使用Firefox(我假设我们使用的是Firefox)通过密码管理器记住凭据?
我找到了此链接:HTML表单的HTTP身份验证。看起来我们可以使用javascript进行HTTP身份验证。我不认为当我们第一次导航到URL时,我们会遇到Greasemonkey中断。我们可能需要设置某种启动点,可以使用该启动点使滑脂猴子自动重定向+登录。例如,我们可以让本地页面在查询字符串中使用目标URL,让Greasemonkey自动执行身份验证+重定向。唯一的问题是,我们必须将用作启动点的书签的站点书签包装在启动页面中。
回答
HTTP身份验证信息是针对每个请求发送的,而不仅仅是登录。第一次登录后,浏览器将缓存会话的登录信息。因此,通过尝试检查我们是否已经登录,我们实际上并没有保存任何东西。
我们也可能完全忘记了lublessmonkey,只是像这样在URL上输入登录名:
http://username:password@host/
当然,将其保存在书签中可能会带来安全风险,但不会比在浏览器中保存密码大。
回答
通过设置" Authorization" HTTP标头,可以使用HTTP身份验证登录,此标头的值设置为字符串" basic username:password",但字符串的Base64编码的" username:password"部分。
http://frontier.userland.com/stories/storyReader$2159
一些研究发现,GreaseMonkey内置了一个功能,我们可以在其中将GET / POST请求发送到名为GM_xmlhttpRequest的服务器。
http://diveintogreasemonkey.org/api/gm_xmlhttprequest.html
因此,将它们放在一起(并获得此JavaScript代码以将字符串转换为base64,我得到了以下内容
http://www.webtoolkit.info/javascript-base64.html
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, } }); }
因此,当我现在访问该站点时,它遍历DOM,如果我没有登录,它将自动登录。
回答
" http:// username:password @ host /"在IE上不起作用,FireFox可以正常工作。