5.6. 应用程序启动操作
应用程序启动操作(AIA)允许客户端应用程序请求用户在红帽构建的 Keycloak 端执行操作。通常,当 OIDC 客户端应用程序希望用户登录时,它会将该用户重定向到登录 URL,如 OIDC 部分所述。登录后,用户将重定向到客户端应用程序。用户执行管理员所需的操作,如上一节中所述,然后立即重定向到应用程序。但是,AIA 允许客户端应用程序在登录期间从用户请求一些必要的操作。即使用户已在客户端上通过身份验证并具有活动的 SSO 会话,也可以执行此操作。它通过将 kc_action
参数添加到包含所请求操作的值的 OIDC 登录 URL 触发。例如 kc_action=UPDATE_PASSWORD
参数。
用户可以取消应用的启动操作。在这种情况下,用户会被重定向到客户端应用程序。重定向 URI 将包含查询参数 kc_action_status=cancelled
和 kc_action
,以及带有被取消操作的名称。
kc_action
和 kc_action_status
参数是红帽 OIDC 规格不支持的 Keycloak 专有机制的构建。
应用程序启动操作只支持 OIDC 客户端。
因此,如果使用 AIA,则一个示例流类似如下:
-
客户端应用使用附加参数将用户重定向到 OIDC 登录 URL,如
kc_action=UPDATE_PASSWORD
-
根据身份验证流部分中所述,始终触发
浏览器
流。如果用户未通过身份验证,则该用户需要在正常登录期间以 的身份进行身份验证。如果用户已通过身份验证,则该用户可能由 SSO Cookie 自动重新验证,而无需主动重新验证并再次提供凭据。在这种情况下,该用户将通过特定操作直接重定向到屏幕(本例中为更新密码)。然而,在某些情况下,即使用户具有 SSO Cookie (详细信息见 下方 )也需要活跃的重新身份验证。 -
用户会显示带有特定操作的屏幕(在本例中
更新密码
),以便用户需要执行特定的操作 - 然后,用户会被重定向到客户端应用程序
请注意,Red Hat build of Keycloak Account Console 使用 AIA 来请求更新密码或重置其他凭证,如 OTP 或 WebAuthn。
即使使用了参数 kc_action
,但假定用户始终执行操作是不够的。例如,用户可以从浏览器 URL 中手动删除 kc_action
参数。因此,在客户端请求 kc_action=CONFIGURE_TOTP
后,用户存在账户的 OTP。如果要验证用户配置了双因素验证器,客户端应用程序可能需要检查它是否已配置。例如,通过检查令牌中的 acr
等声明。
5.6.1. AIA 期间重新进行身份验证
如果用户因为活动的 SSO 会话而经过身份验证,则该用户通常不需要主动重新验证。但是,如果该用户主动验证时间超过五分钟前,当请求某些 AIA 时,客户端仍然可以请求重新身份验证。例外存在于这个指南中,如下所示:
-
操作
delete_account
始终要求用户主动重新验证 -
操作
UPDATE_PASSWORD
可能需要用户根据配置的 Maximum Authentication Age Password 策略 主动重新验证。如果没有配置策略,则在配置特定所需操作时,也可以在 Required 操作选项卡中 在所需的操作本身中配置它。如果策略没有在其中任何地方配置,则默认为五分钟。 -
如果要使用较短的重新身份验证,您仍然可以使用参数查询参数,如带有指定较短的值的
max_age
或最终prompt=login
,这将始终要求用户主动重新验证(如 OIDC 规格所述)。请注意,不支持将max_age
长于默认的五分钟(或根据密码策略规定的值)。max_age
目前可用于使值少于默认的五分钟。 -
如果启用了 Step-up 身份验证,且操作是添加或删除凭证,则需要在与给定凭证对应的级别进行身份验证。当用户已具有特定级别的凭证时,这个要求已存在。例如,如果在身份验证流中配置
otp
和webauthn
作为第二因素验证器(在 2 级验证流中),并且用户已具有双因素凭证(本例中为otp
或webauthn
),则需要通过现有的双因素凭证进行身份验证来添加另一个双因素凭证。同样,删除现有的双因素凭证(本例中为otp
或webauthn
),需要使用现有的双因素级凭证进行身份验证。出于安全考虑,需要存在。
5.6.2. 参数化 AIA
有些 AIA 可能需要将参数与操作名称一起发送。例如,Delete Credential
操作只能由 AIA 触发,它要求参数与操作的名称一起发送,指向已删除凭证的 ID。因此,本示例的 URL 为 kc_action=delete_credential:ce1008ac-f811-427f-825a-c0b878d1c24b
。在这种情况下,冒号字符(ce1008ac-f811-427f-825a-c0b878d1c24b
)后面的部分包含特定用户的 ID,即要删除的用户。Delete Credential
操作显示确认屏幕,用户可以在其中确认协议来删除凭证。
红帽 Keycloak 帐户控制台的构建 通常在删除第二因素凭证时使用 Delete Credential
操作。如果要直接从您自己的应用程序使用这个操作,您可以检查帐户控制台以了解示例。但是,依赖帐户控制台,而不是从您自己的应用程序管理凭证。
5.6.3. 可能的操作
要查看所有可用的操作,请登录到管理控制台,再进入右上角的 Realm info
Provider info
required-action
。但请注意,这可以根据在 Required 操作选项卡中为您的域启用哪些操作来 进一步限制。