keycloak~RequiredActionProvider中獲取表單認證前URL的參數

在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參數集合如下圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章