You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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用户目录。

步骤如下:

  1. 打开Chrome,用一个特定的用户配置文件登录你的应用(确保登录状态已保存),然后关闭Chrome。
  2. 找到Chrome用户数据目录的路径:
    • Linux:~/.config/google-chrome/Default
    • macOS:~/Library/Application Support/Google/Chrome/Default
    • Windows:C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Default
  3. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:46:43