使用 OIDC 提供者配置 HTTP Bearer 认证

客户端应用程序(例如本机应用程序、移动应用程序、渐进式 Web 应用程序(PWA) 和单页应用程序 (SPA))可以使用 HTTP Bearer 认证以及从 OIDC 提供者获取的签名 JWT 访问令牌来向 Domino 服务器进行认证。

为什么是 Bearer 令牌?

可能无法轻松执行基于 SAML 的 SSO 的客户端应用程序可以改为使用 OpenID Connect (OIDC) 提供者来对最终用户进行认证。在 OAuth 2.0 和 OIDC 术语中,是 Domino 服务器充当依赖方,而不是 OAuth 客户端,并且在使用访问令牌。HTTP Bearer 认证在 HTTP 级别运行,类似于 HTTP 基本认证但比它更安全,但只能通过 HTTPS 使用。

在 Domino 12.0.2 中,您可以在 IdP 目录 (idpcat.nsf) 数据库中配置可信 OIDC 提供者。每个因特网站点可以配置不同的 OIDC 提供者。单个因特网站点只能配置一个 SAML IdP 或 OIDC 提供者。

每个 OIDC 提供者都需要根据 OpenID.Core 和 OpenID.Discovery 公开一个 .well-known/openid-configuration 端点和一个 jwks_uri 端点,以便 Domino 可以动态获取用于加密验证该 OIDC 提供者发布的 JWT 的公用密钥。

用于 HTTP Bearer 认证的 JWT 访问令牌的要求

  • 此功能使用 RFC 6750 定义的“Authorization: Bearer <token>”流程。
  • JWT 必须由根据 OpenID.Core 和 OpenID.Discovery 公开 .well-known/openid-configuration 和 jwks_uri 端点的 OIDC 生成。
  • 出于每个 OpenID.Core 的安全原因,此功能仅可通过 TLS 连接使用。
  • JWT 必须使用 RS256、RS384、RS512、ES256、ES384、ES512 或者 EdDSA 与 Ed25519 或 Ed448 进行签名。“无”和 HS256 高度不安全,依据 RFC 8725 不支持用于 HTTP Bearer 认证。
  • JWT 必须包含 Domino 可在 Domino 目录中唯一找到的最终用户名或电子邮件地址的格式。如果设置了 OIDC_CUSTOM_EMAIL_CLAIM_NAME notes.ini 变量,那么 Domino 将首先检查具有该指定名称的声明。如果未配置该定制声明名称或找不到该声明,那么 Domino 将接下来检查标准“email”声明,最后检查“upn”声明。
  • JWT 必须包含与从 OIDC 提供者的 .well-known/openid-configuration 端点返回的“发布者”匹配的“iss”(发布者)声明。
  • JWT 必须包含与从 OIDC 提供者的 jwks_uri 端点返回的其中一个 JWK 匹配的“kid”(keyID) 头声明。
  • JWT 必须包含包括“Domino.user.all”的“scope”声明。
  • JWT 的其中一个“aud”(受众)声明必须与 Domino 因特网站点的主机名相匹配,例如 https://ultraviolet.example.com
  • JWT 必须包含“iat”(发布时间)和“exp”(到期)声明,说明令牌是在过去发布的,将来会到期。
  • 如果要只允许向一组有限的可信应用程序发布的 JWT(通过 client_id),您可以将 HTTP_BEARER_ALLOWED_ID_COUNT notes.ini 配置为包含允许的 client_id 数,然后配置 HTTP_BEARER_ALLOWED_CLIENT_ID_1=<first client_id>、HTTP_BEARER_ALLOWED_CLIENT_ID_2=<second client_id> 等等。如果配置了一组数量非零的允许 client_id,那么必须在“azp”声明中找到其中一个 client_id 才能使 JWT 有效。

限制

  • 忽略 OIDC 提供者文档的“日志记录级别”字段。
  • 唯一受支持的作用域是“Domino.user.all”,它授予已认证的最终用户的完全访问权。
  • 不支持加密 JWT。
  • 仅在 Windows 和 Linux 服务器上支持 HTTP Bearer 认证。