5.4. JavaScript 供应商
红帽构建的 Keycloak 能够在运行时执行脚本,以便管理员能够自定义特定功能:
- 身份验证器
- JavaScript 策略
- OpenID Connect Protocol Mapper
- SAML 协议映射程序
5.4.1. 身份验证器 复制链接链接已复制到粘贴板!
身份验证脚本必须至少提供以下功能之一: authentication (..),从 Authenticator#authenticate (AuthenticationFlowContext)操作(.. )调用,它从 Authenticator#action (AuthenticationFlowContext)调用。
自定义 身份验证器 应至少提供身份验证 (..) 函数。您可以使用代码中的 javax.script.Bindings 脚本。
script-
用于访问脚本元数据的脚本模型 realm-
RealmModel user-
当前
UserModel。请注意,如果在身份验证流中配置了脚本验证器时,用户就可以在另一个验证器成功下触发,并将该用户设置为身份验证会话。 会话-
活跃的
KeycloakSession authenticationSession-
当前的
身份验证SessionModel httpRequest-
当前
org.jboss.resteasy.spi.HttpRequest LOG-
org.jboss.logging.Logger范围为ScriptBasedAuthenticator
您可以从传递给 authentication ( context ) 函数的上下文参数中提取额外的上下文信息。
操作(context)
5.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
5.4.2. OpenID Connect Protocol Mapper 复制链接链接已复制到粘贴板!
OpenID Connect 协议映射程序脚本是 javascript 脚本,允许您更改 ID 令牌和/或访问令牌的内容。
您可以使用代码中的 javax.script.Bindings 脚本。
user-
当前
UserModel realm-
RealmModel token-
当前
IDToken。只有在为 ID 令牌配置了映射程序时,它才可用。 tokenResponse-
当前
AccessTokenResponse。只有在为 Access 令牌配置了映射程序时,它才可用。 userSession-
活跃的
UserSessionModel keycloakSession-
活跃的
KeycloakSession
脚本的导出将用作令牌声明的值。
以上脚本允许从授权请求中检索 user_input。这可用于映射程序中配置的 Token Claim Name。
5.4.3. 使用要部署的脚本创建一个 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 中的文件。
5.4.4. 部署脚本 JAR 复制链接链接已复制到粘贴板!
您有一个带有描述符和您要部署的脚本的 JAR 文件后,您只需要将 JAR 复制到 Keycloak 提供程序/目录的红帽构建中,然后运行 。请注意,您还需要启用 bin/ kc.[sh|bat] 构建脚本功能。