6.4. JavaScript 供应商
红帽构建的 Keycloak 能够在运行时执行脚本,以便管理员能够自定义特定功能:
- 验证器
- JavaScript 策略
- OpenID Connect 协议映射程序
- SAML 协议映射程序
6.4.1. 验证器 复制链接链接已复制到粘贴板!
身份验证脚本必须至少提供以下功能之一: authentication (..),从 Authenticator#authenticate (AuthenticationFlowContext)操作(.. )调用,它从 Authenticator#action (AuthenticationFlowContext)调用。
自定义 Authenticator 应该至少提供身份验证 (...) 功能。您可以在代码中使用 javax.script.Bindings 脚本。
script-
用于访问脚本元数据的
ScriptModel realm-
RealmModel user-
当前
UserModel。请注意,如果在身份验证流中配置了脚本验证器时,用户就可以在另一个验证器成功下触发,并将该用户设置为身份验证会话。 会话-
活跃的
KeycloakSession AuthenticationSession-
当前
身份验证SessionModel httpRequest-
当前的
org.jboss.resteasy.spi.HttpRequest LOG-
org.jboss.logging.Logger限定到scriptsBasedAuthenticator
您可以从传递给 身份验证(context) 信息。
操作( 参数中提取其他上下文context )函数的 context
6.4.1.1. 在什么位置添加脚本验证器 复制链接链接已复制到粘贴板!
可以使用脚本验证器是在身份验证结束时进行一些检查。请注意,如果您希望脚本验证器总是被触发(即使在使用身份 Cookie 的 SSO 重新身份验证过程中为实例),您可能需要将它添加为身份验证流末尾的 REQUIRED,并将现有的验证器封装到单独的 REQUIRED 身份验证子流中。这需要是因为 REQUIRED 和 ALTERNATIVE 执行不应处于相同的级别。例如,身份验证流配置应如下所示:
- User-authentication-subflow REQUIRED -- Cookie ALTERNATIVE -- Identity-provider-redirect ALTERNATIVE ... - Your-Script-Authenticator REQUIRED
- User-authentication-subflow REQUIRED
-- Cookie ALTERNATIVE
-- Identity-provider-redirect ALTERNATIVE
...
- Your-Script-Authenticator REQUIRED
6.4.2. 使用要部署的脚本创建 JAR 复制链接链接已复制到粘贴板!
JAR 文件是带有 .jar 扩展名的常规 ZIP 文件。
为了使您的脚本可供红帽构建的 Keycloak 使用,您需要将它们部署到服务器。为此,您应该创建具有以下结构的 JAR 文件:
META-INF/keycloak-scripts.json my-script-authenticator.js my-script-policy.js my-script-mapper.js
META-INF/keycloak-scripts.json
my-script-authenticator.js
my-script-policy.js
my-script-mapper.js
META-INF/keycloak-scripts.json 是一个文件描述符,提供了有关您要部署的脚本的元数据信息。它是具有以下结构的 JSON 文件:
此文件应该引用您要部署的不同类型的脚本供应商:
验证器对于 OpenID Connect 脚本验证器。您可以在同一 JAR 文件中有一个或者多个验证器
policies对于使用红帽构建的 Keycloak 授权服务时的 JavaScript 策略。您可以在同一个 JAR 文件中具有一个或多个策略
Mappers对于 OpenID Connect 脚本协议映射程序。您可以在同一 JAR 文件中有一个或多个映射程序
saml-mappers对于 SAML 脚本协议映射程序。您可以在同一 JAR 文件中有一个或多个映射程序
对于 JAR 文件中的每个脚本文件,您需要在 META-INF/keycloak-scripts.json 中对应条目,用于将脚本文件映射到特定的供应商类型。为此,您应该为每个条目提供以下属性:
name用于通过红帽构建的 Keycloak 管理控制台显示脚本的友好名称。如果没有提供,将使用脚本文件的名称替代
description更好地描述脚本文件的可选文本
fileName脚本文件的名称。此属性 是必需的,应映射到 JAR 中的文件。
6.4.3. 部署脚本 JAR 复制链接链接已复制到粘贴板!
您有一个带有描述符和您要部署的脚本的 JAR 文件后,您只需要将 JAR 复制到 Keycloak 提供程序/目录的红帽构建中,然后运行 。
bin/ kc.[sh|bat] 构建