在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()这个字典中,供认证流程中使用。文章来源:https://www.toymoban.com/news/detail-858828.html
getClientNotes()返回的URL参数集合如下图:
文章来源地址https://www.toymoban.com/news/detail-858828.html
到了这里,关于keycloak~RequiredActionProvider中获取表单认证前URL的参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!