跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

Access 自定义页面

最后更新 查看 MarkdownAgent 设置

Access 自定义页面允许你自定义访客登录、收到 Access 策略拒绝或批准命令行登录时看到的页面。模板使用 HTML 和 Liquid 显示特定于请求的信息。

自定义页面只会更改显示方式,不会更改 Access 决策。它们不会授予访问权限,也不能取代身份验证和授权策略。

页面类型

为每种页面类型创建单独的模板:

类型 用途 必需控件
登录 登录 Access 应用。 恰好一个 <cf-access-authbox></cf-access-authbox> 元素。
身份被拒绝 说明访客登录后被拒绝的原因。身份验证成功并不保证策略授权。 无需交互式控件。
禁止访问 说明非身份策略拒绝,例如请求未通过服务身份验证策略。 无需交互式控件。
插页 要求访客批准或拒绝命令行登录请求。 恰好一个 <cf-access-cli-approval></cf-access-cli-approval> 元素。

Access 会将自己的登录和批准控件插入必需元素中。请让这些元素保持可见,并置于 Liquid 条件或循环之外。它们必须恰好渲染一次,而不只是出现在模板源代码中一次。不要使用自己的表单、身份提供商链接或批准按钮替换它们。

创建自定义页面

  1. 在 Cloudflare One 中,转到 Reusable components > Custom pages。

    前往  ↗
  2. 在 Access custom pages 卡片上,选择 Manage。

  3. 选择 Create custom page。

  4. 输入唯一的 Name 并选择 Type。编辑器会加载该类型的起始模板。

  5. 编辑 HTML 和 Liquid。对于登录或插页页面,请保留必需控件。

  6. 使用 Variables 查看所选类型可用的数据。检查 Problems 中的验证错误和警告。

  7. 解决阻止性错误,然后选择 Publish。如果验证不可用,请在发布前选择 Retry validation。

发布会保存一个可复用模板。要显示该模板,请将其分配给应用或设为账户默认模板。

登录模板示例

这个最小示例会显示应用名称、登录消息和 Access 登录控件:

<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1" />
		<title>Sign in to {{ app_name }}</title>
	</head>
	<body>
		<main>
			<h1>Sign in to {{ app_name }}</h1>
			{% if message.text.size > 0 %}
			<p role="status">{{ message.text }}</p>
			{% endif %}
			<cf-access-authbox></cf-access-authbox>
		</main>
	</body>
</html>

让 message.text 保持可见,以便访客了解登录问题。不要在模板中硬编码身份提供商 URL,也不要将凭据复制到模板中。

将页面分配给应用

对于自托管应用:

  1. 转到 Access controls > Applications,然后选择应用。

    前往 Applications(应用程序) ↗
  2. 打开 Additional settings 并找到 Custom block pages。此部分还包含登录和插页设置。

  3. 为要替换的页面选择相应选项:

    应用设置 选项 模板类型
    身份失败阻止页面 自定义页面模板 身份被拒绝
    非身份失败阻止页面 自定义页面模板 禁止访问
    登录页面 自定义页面 登录
    插页页面 自定义页面 插页
  4. 从下拉列表中选择已保存的模板。每个下拉列表只提供匹配的页面类型。

  5. 选择 Save,然后执行应用流程。重新测试前,请预留配置更改传播的时间。

要移除应用分配,请为该页面类型选择 Cloudflare default 并保存。如果存在账户默认模板,且没有应用专用模板,Access 会使用账户默认模板。

账户默认模板

Access custom pages 列表提供 Set as default 和 Remove as default 操作。对于同一类型,应用专用分配优先于账户默认设置。如果两者都未分配,Access 会使用其内置页面。

账户默认设置会影响继承该页面类型的应用。更改账户默认设置前,请先测试应用专用分配。

模板数据

在编辑器中选择 Variables,可查看所选类型的变量名称和说明。不要假设每种页面类型都具有相同的数据。

页面类型 可用数据示例
登录 app_name、app_domain、org、idps、has_onetimepin 和 message。idps 列表提供显示信息,而不是登录 URL。
身份被拒绝 和 禁止访问 app,以及可选的 ray_id、user 和 policy_evaluation 数据。登录前可能没有用户信息。
插页 app、requesting_tool 和可选的 user 数据。批准凭据属于 Access 控件,而不是模板数据。
所有类型 request 连接信息和可选的 locale。请求字段也可能不存在。

使用 Liquid 条件保护可选数据。例如,身份被拒绝页面可以在电子邮件地址可用时显示它:

<h1>Access denied</h1>
<p>You do not have access to {{ app.name }}.</p>
{% if user.email %}
<p>You are signed in as {{ user.email }}.</p>
{% endif %} {% if ray_id %}
<p>Share this Ray ID with your administrator: {{ ray_id }}</p>
{% endif %}

Liquid 输出会进行 HTML 转义。缺失的变量会渲染为空文本。策略评估数据是结构化信息,并不是现成的拒绝说明。请选择要显示的内容,避免不必要地暴露敏感群组名称、声明或策略详细信息。

模板限制

模板在受限的 Liquid 环境中运行:

  • 不支持客户 JavaScript、内联事件处理程序和自定义身份验证表单。Access 拥有交互式登录和批准控件。
  • Liquid 标签 include、render、layout、echo 和 raw,以及 raw 过滤器不可用。
  • HTML 和 CSS 会经过清理。外部资源必须符合页面的内容安全策略 (CSP)。请使用 HTTPS 图像和字体 URL,不要依赖第三方脚本渲染页面。
  • 解析、渲染和内存限制均适用。请保持模板简小,并避免高开销循环。

如果已保存的模板不可用或无法安全渲染,Access 会回退到内置页面。此回退不会更改策略决策。

编辑和维护模板

从 Access custom pages 中选择模板进行编辑。模板创建后其类型固定不变。检查 Problems,然后选择 Publish 保存更改。

一个模板可供多个应用使用。发布编辑会更改共享模板,因此需要避免影响现有分配时,请使用单独的模板进行测试。删除模板前,请替换其应用分配,并取消其账户默认设置。

在仪表板之外保留 HTML 和 Liquid 的副本。编辑器不提供渲染预览或 Download 操作。

这篇文档对您有帮助吗?