身份验证
身份验证
身份验证
此功能仅适用于企业计划。如需开始使用,请联系 support@buildwithfern.com。
自托管 Fern 文档支持通过在 Dockerfile 中设置环境变量来进行身份验证。当没有配置身份验证环境变量时,您的文档完全公开。
有两种身份验证模式可用:
密码身份验证通过简单的密码提示来保护您的文档。用户必须输入正确的密码才能查看文档。
将以下环境变量添加到您的 Dockerfile 中:
将 <YOUR PASSWORD> 替换为用户访问文档时需要输入的密码。
当用户访问文档时,他们会被重定向到登录页面,必须在那里输入密码。输入正确密码后,他们可以自由浏览文档。
基本令牌验证使用 JWT(JSON Web Tokens)来验证用户身份。当您希望将文档与现有身份验证系统(如您自己的登录门户)集成时,这很有用。
FERN_AUTH_REDIRECT)。/api/fern-docs/auth/jwt/callback)并携带 JWT。这可以通过GET重定向与令牌作为查询参数,或通过POST请求与令牌在 application/x-www-form-urlencoded 主体中来完成。将以下环境变量添加到您的 Dockerfile 中:
您的登录服务器负责验证用户身份并使用签名的 JWT 将他们重定向回文档。
当 Fern 容器重定向未经身份验证的用户时,它会将以下查询参数附加到 FERN_AUTH_REDIRECT:
redirect_uri - Fern 文档容器上的回调 URL(例如,https://docs.example.com/api/fern-docs/auth/jwt/callback)state - 用户试图访问的页面您的服务器必须:
FERN_AUTH_SECRET 和 HS256 算法签名的 JWT。redirect_uri,携带 JWT 作为 fern_token 和原始 state 作为返回路径。您可以使用任一方法:
fern_token 和 state 作为查询参数附加。fern_token 和 state 作为 application/x-www-form-urlencoded 字段提交。POST 避免在 URL 和服务器日志中暴露令牌。JWT 负载必须包括以下声明:
这是一个签名 JWT 并重定向到回调的 Node.js(Express)服务器示例:
您的登录服务器中的 FERN_AUTH_SECRET 必须与 Dockerfile 中设置的密钥完全匹配。如果它们不同,JWT 验证将失败,用户将无法登录。
自托管容器包括一个内置的测试登录页面,您可以在开发和测试中启用它。这让您可以在不构建自己的登录服务器的情况下验证身份验证流程。
将以下环境变量添加到您的 Dockerfile 中:
设置 FERN_AUTH_TEST_LOGIN="true" 启用容器上的 /__test-login 端点。当 FERN_AUTH_REDIRECT 指向此端点时,未经身份验证的用户会看到一个测试登录页面,只有一个”使用测试登录”按钮。点击按钮会创建有效的 JWT 并完成身份验证流程。
测试登录页面仅用于开发和测试。不要在生产环境中启用 FERN_AUTH_TEST_LOGIN。
默认情况下,启用身份验证时所有页面都需要身份验证。使用 FERN_AUTH_ALLOWLIST 和 FERN_AUTH_DENYLIST 来控制哪些页面需要登录。两者都接受逗号分隔的正则表达式模式,与页面路径匹配。
例如,要使所有页面都可以公开访问:
要使只有 API Reference 页面需要登录:
您可以为自托管部署在 API Explorer 中启用 API 密钥注入。这在 API Explorer 中显示一个登录按钮,以便用户可以进行身份验证并自动填充其 API 密钥,而无需为整个文档站点要求登录。
将 FERN_API_KEY_INJECTION_ENABLED 与基本令牌验证变量一起添加到您的 Dockerfile 中:
使用 FERN_AUTH_ALLOWLIST="/(.*)" 时,所有文档页面都可以公开访问(无登录墙),但 API Explorer 仍显示登录按钮。当用户登录时,会读取其 JWT 的 fern 负载,并将 API 密钥注入到 API Explorer 中。有关完整的 fern 负载参考,请参阅自动填充 API 密钥。