在keycloak中,我們在進行brower瀏覽器的表單認證時,一般在跳到本頁面時,URL上會有redirect_uri這種參數,用來告訴keycloak,在認證成功後的跳轉地址,你在表單認證控制器中,可以通過context.getHttpRequest().getUri().getQueryPar ...
在keycloak中,我們在進行brower瀏覽器的表單認證時,一般在跳到本頁面時,URL上會有redirect_uri這種參數,用來告訴keycloak,在認證成功後的跳轉地址,你在表單認證控制器中,可以通過context.getHttpRequest().getUri().getQueryParameters().getFirst("redirect_uri")
進行獲取,而當你為brower認證流程添加RequiredAction行為之後,你需要在進入RequiredAction時帶上這些參數,你是不能直接通過getQueryParameters()
方法獲取的,因為它之前的頁面不是來源頁,而是認證表單頁,那麼keycloak對於這種問題是如何處理的呢?
RequiredActionProvider中的方法
頁面渲染
@Override
public void requiredActionChallenge(RequiredActionContext context) {
Response challenge = context.form()
.createForm("login-sms-otp-config.ftl");
context.challenge(challenge);
}
表單提交
@Override
public void processAction(RequiredActionContext context) {
context.success();
}
添加獲取認證表單中URL參數
很顯示,獲取上一個頁面的參數,應該在requiredActionChallenge渲染頁面方法中實現
private static String getRedirectUri(RequiredActionContext context) {
AuthenticationSessionModel authSession = context.getAuthenticationSession();
if( authSession.getClientNotes().containsKey("redirect_uri")){
return authSession.getClientNotes().get("redirect_uri");
}
return "https://www.abc.com";
}
我們認證頁面將來源頁的參數臨時存儲到了authSession.getClientNotes()這個字典中,供認證流程中使用。
getClientNotes()返回的URL參數集合如下圖:
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!