为 Web 用户配置基于 OIDC 的 SSO

可使用带有 PKCE 的 Open ID Connect (OIDC) 授权码流为浏览器客户端提供单点登录 (SSO) 选项。

Domino 的 OIDC 登录 SSO 功能允许浏览器客户端通过向 OIDC 提供者进行认证来访问 Domino Web 服务器。这种形式的 SSO 的作用类似于 Web 服务器的基本 SAML 认证。在 Domino 12.0.2 中,此功能不能用于根据 Notes 标识保险库进行认证以获取标识文件,因此不能替代 Web 联合登录、Notes 联合登录或 Nomad 联合登录。根据可信 OIDC 提供者进行认证后,用户的 Web 浏览器将收到会话 cookie,该 cookie 用于向该 Domino 服务器认证后续 HTTP 请求。

操作步骤

  1. 为一个或多个因特网站点配置 HTTP Bearer 认证,如启用 HTTP Bearer 认证中所述。
    注: 必须为 HTTP Bearer 认证启用因特网站点才能支持 OIDC 登录。
  2. 为其中一个或多个因特网站点配置可信 OIDC 提供者,如配置可信 OIDC 提供者中所示。
  3. 从“因特网站点”文档的 Domino Web 引擎选项卡启用会话认证。

    在所有 Web 服务器都可以配置为支持单个身份提供者的环境中,可以通过以下方法来提高安全性:使用 SAML IdP 或 OIDC 提供者对每个服务器的最终用户进行认证,并在每个后端服务器上使用单服务器会话 cookie 而不是使用多服务器 SSO cookie(例如 LTPA 令牌)。OIDC SSO 和 SAML SSO 互斥。

  4. 在 OIDC 提供者中为此因特网站点配置新的 OIDC/OAuth 2.0 客户端。建议您将 Domino 配置为“机密客户端”,仅启用授权码流并要求使用 S256 的 PKCE。侦听 myserver.example.com 的 Domino 服务器的重定向 URI 的格式为 https://myserver.example.com/names.nsf?OIDCLogin。请注意,可以在多个因特网站点上启用 OIDC 登录,方法是:在 idpcat.nsf 中的 OIDC 提供者文档中选择所有这些因特网站点,然后为 OIDC 提供者中的每个主机名配置重定向 URI。

    有关 KeyCloak 配置的示例,请参阅作为 Domino 的 OIDC 提供者的示例 KeyCloak 配置

    1. 在 OIDC_LOGIN_CLIENT_ID notes.ini 中设置在 OIDC 提供者中配置的client_id。
    2. 在 OIDC_LOGIN_CLIENT_SECRET notes.ini 中设置在 OIDC 提供者中配置的client_secret。
      注: 对于给定 Domino 服务器的 OIDC 登录,只能配置一个 OIDC 提供者和关联的 client_id 和 client_secret。
  5. 设置 OIDC_LOGIN_ENABLE_REDIRECT=1,以启用将未认证的用户从 Domino 服务器上的端点重定向到 /names.nsf?OIDCLogin 端点,并在认证后再次返回到其原始目标 URI。

其他配置设置

缺省情况下,用于维护 OIDC 认证状态的 cookie 中的生存期为 2 分钟。可以通过将 OIDC_LOGIN_COOKIE_DURATION_SEC notes.ini 设置为 30 到 900 秒之间的值来更改此缺省值,以促使最终用户更快地向其 OIDC 提供者进行认证,或者更慢地向其 OIDC 提供者进行认证。

除了 HTTP Bearer 认证文档中讨论的 notes.ini 变量外,还可以使用以下两个 notes.ini 变量在服务器控制台上启用其他跟踪:

  • DEBUG_OIDCLogin=(0,1,2,3,4)
  • DEBUG_OIDC_LOGIN_REDIRECT=(0,1)

限制、已知问题和注意事项

  • 根据当前的安全最佳实践,只有具有 PKCE 的授权码流可用于 OIDC 登录 SSO。
  • Domino 将始终请求“scope=openid email”
  • PKCE S256 和 nonce 将始终使用且无法禁用。
  • 接收到的 id_token 必须符合 OIDC.Core 中规定的要求,但如果未找到“email”声明,Domino 将故障转移以检查“upn”声明。
  • 跨多个 Domino 服务器喷洒请求的 Web 代理应配置会话亲和性,以确保不会跨两个 Domino 服务器喷洒单个 OIDC 登录尝试。
  • “client_secret_basic”和“none”是唯一受支持的客户端认证方法。
  • client_id 和 client_secret 是通过 notes.ini 为整个 Domino 服务器配置的,因此在单个 Domino 服务器上只能使用一个 OIDC 提供者进行 OIDC 登录。
  • OIDC 登录统计信息可以与 HTTP Bearer 认证统计信息组合在一起。
  • OIDC 登录仅在 Windows 和 Linux 服务器上受支持。