如何在Lighthouse CLI(Node版)中传递认证信息执行审计?
如何使用Lighthouse CLI对需要身份认证的应用执行审计
我自己处理过好几次这类需要认证的Lighthouse审计场景,下面几种方法亲测有效,你可以根据你的认证类型选合适的:
方法1:通过--extra-headers传递认证头
如果你的应用是通过HTTP请求头(比如Bearer Token、Cookie)来做认证的,这是最简单的方式。你可以把认证信息打包成JSON格式,通过--extra-headers参数传递。
示例1:Bearer Token认证
假设你的认证头是Authorization: Bearer YOUR_TOKEN,命令写法如下(注意JSON字符串的转义,不同系统略有区别):
- Linux/macOS(用单引号包裹JSON):
lighthouse https://example.com:8100/some-path/ --budget-path=budget.json --output-path=report.html --extra-headers='{"Authorization": "Bearer YOUR_TOKEN"}'
- Windows(用双引号包裹,内部双引号转义):
lighthouse https://example.com:8100/some-path/ --budget-path=budget.json --output-path=report.html --extra-headers="{\"Authorization\": \"Bearer YOUR_TOKEN\"}"
示例2:Cookie认证
如果是用Cookie做认证,把Cookie内容放在Cookie头里即可:
lighthouse https://example.com:8100/some-path/ --budget-path=budget.json --output-path=report.html --extra-headers='{"Cookie": "session_id=abc123; user_token=xyz789"}'
你可以从浏览器的DevTools里复制已有的Cookie值(Application > Cookies)。
方法2:复用已登录的Chrome用户配置文件
如果你的认证流程比较复杂(比如需要跳转第三方登录、输入验证码等),手动传头可能不方便,你可以让Lighthouse使用已经登录过该应用的Chrome用户目录。
步骤如下:
- 打开Chrome,用一个特定的用户配置文件登录你的应用(确保登录状态已保存),然后关闭Chrome。
- 找到Chrome用户数据目录的路径:
- Linux:
~/.config/google-chrome/Default - macOS:
~/Library/Application Support/Google/Chrome/Default - Windows:
C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Default
- Linux:
- 在Lighthouse命令中用
--chrome-flags指定这个目录:
lighthouse https://example.com:8100/some-path/ --budget-path=budget.json --output-path=report.html --chrome-flags="--user-data-dir=/path/to/your/chrome/profile"
注意:执行命令前要确保所有Chrome窗口都关闭,否则会出现进程冲突。
方法3:自定义预登录脚本(适合复杂登录流程)
如果前两种方法都不适用(比如需要模拟点击登录按钮、输入账号密码),可以用Lighthouse的--script参数,写一个Node.js脚本在审计前完成登录操作。
示例脚本(login-script.js):
module.exports = async (page, context) => { // 先导航到登录页 await page.goto('https://example.com:8100/login'); // 输入用户名和密码 await page.type('#username-input', 'your-username'); await page.type('#password-input', 'your-password'); // 点击登录按钮 await page.click('#login-btn'); // 等待登录完成,比如等待跳转到目标页面 await page.waitForNavigation({ waitUntil: 'networkidle2' }); };
然后执行Lighthouse命令时指定这个脚本:
lighthouse https://example.com:8100/some-path/ --budget-path=budget.json --output-path=report.html --script=login-script.js
这个脚本基于Puppeteer的API,你可以根据实际登录页面的DOM结构调整选择器和操作步骤。
内容的提问来源于stack exchange,提问作者Konstantin Smolyanin
相关产品推荐
相关产品推荐

