![](/img/trans.png)
[英]SSO authentication combining Kerberos, ADFS and Spring Security
[英]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.