簡體   English   中英

在 keycloak 中跳過 kerberos sso 身份驗證

[英]Skip kerberos sso authentication in keycloak

在某些情況下,我們需要跳過通過 Kerberos 的自動登錄。 根據文檔,這應該通過參數?prompt=login來完成:

提示 - Keycloak 支持這些設置:

  • login - SSO 將被忽略並且 Keycloak 登錄頁面將始終顯示,即使用戶已經通過身份驗證

這在大多數情況下都有效(我們也使用 NTLM waffle 實現),但使用 Kerberos 時,用戶始終自動登錄。

任何提示或想法為什么?
是否有其他方法可以強制轉發到登錄頁面?

編輯:我需要跳過 Kerberos 身份驗證的原因是因為我需要使用管理員帳戶登錄,我必須在其中輸入用戶名+密碼。

EDIT2:我們使用的是 Keycloak.x 版本 14.0.0。

參數?prompt=login只會跳過身份驗證流程中的 Cookie 身份驗證器。 Cookie 身份驗證器的執行將被標記為已嘗試但未成功。 因此,Keycloak 將回退到替代身份驗證器。 我假設 Kerberos 身份驗證器已配置為替代方案。 如果是這種情況,您將通過 Kerberos 身份驗證器(自動)進行身份驗證。

如果您只需要特定客戶端的此行為,您可能需要為該客戶端創建額外的身份驗證流程,而無需 Kerberos 身份驗證器。 使用Authentication flow overrides為客戶端配置新流。

我剛剛在代碼方面創建了一個可能的解決方案的功能請求。
跳過 kerberos SSO 身份驗證以使用登錄表單

可能能夠使用包含login參數處理的自定義SpnegoAuthenticator覆蓋默認SpnegoAuthenticator
我在 kerberos 環境中修補並測試了它,它工作正常。

@Override
public void authenticate(AuthenticationFlowContext context) {
// +++ BEGIN CHANGE +++
    AuthenticationSessionModel session = context.getAuthenticationSession();
    Map<String, String> clientNotes = session.getClientNotes();

    if ("login".equals(clientNotes.get("prompt"))) {
        logger.info("skip SPNEGO authenticator because of client requests login prompt: " + clientNotes); //$NON-NLS-1$
        context.attempted();
        return;
    }
// +++ END CHANGE +++

    HttpRequest request = context.getHttpRequest();
    String authHeader = request.getHttpHeaders().getRequestHeaders().getFirst(HttpHeaders.AUTHORIZATION);
    if (authHeader == null) {
        Response challenge = challengeNegotiation(context, null);
        context.forceChallenge(challenge);
        return;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM