keycloak~RequiredActionProvider中獲(huo)取表單認證前URL的參數
在keycloak中,我們在進行brower瀏覽器的表單認證時,一般在跳到本頁面時,URL上會有redirect_uri這種參數,用來告訴keycloak,在認證成功后的跳轉地址,你在表單認證控制器中,可以通過context.getHttpRequest().getUri().getQueryParameters().getFirst("redirect_uri")進行獲取,而當你為brower認證流程添加RequiredAction行為之后,你需要在進入RequiredAction時帶上這些參數,你是不能直接通過getQueryParameters()方(fang)法獲取的(de),因(yin)為它之前的(de)頁面(mian)不是來源(yuan)頁,而是認證表單(dan)頁,那么(me)keycloak對于這種問題是如何(he)處理的(de)呢?
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參數
很顯示(shi),獲取上(shang)一個頁面(mian)的(de)參數,應該在(zai)requiredActionChallenge渲染(ran)頁面(mian)方法中實現
private static String getRedirectUri(RequiredActionContext context) {
AuthenticationSessionModel authSession = context.getAuthenticationSession();
if( authSession.getClientNotes().containsKey("redirect_uri")){
return authSession.getClientNotes().get("redirect_uri");
}
return "//www.abc.com";
}
我們認證(zheng)頁(ye)面將來源頁(ye)的參數臨時(shi)存(cun)儲(chu)到了authSession.getClientNotes()這個字(zi)典中,供認證(zheng)流程(cheng)中使(shi)用。
getClientNotes()返回的URL參數集合如下圖:
