Keycloak přidat server data do vlastní přihlašovací stránka

0

Otázka

Snažím se realizovat logining prostřednictvím digitálního podpisu a na přihlašovací stránce potřebuji data, která generují každý pokus o přihlášení, a které jsem se podepsat a odeslat na server, takže hledám způsob, jak dát data serveru na přihlašovací stránku, která jsem se podívat na server poté formulář odeslat.

Tok není ukončen, není moc vidět ale možná existuje způsob, jak umístit authote na přihlašovací stránku?

public class ExtAuthenticator extends UsernamePasswordForm {

private static final Logger logger = Logger.getLogger(ExtAuthenticatorclass);
private static final String LOGIN_FTL = "login-eds.ftl"; 

@Override
public void action(AuthenticationFlowContext context) {
    logger.infof("EDSAuthenticator action entry");
    MultivaluedMap<String, String> formData = context.getHttpRequest().getDecodedFormParameters();
    if (!validateForm(context, formData)) {
        return;
    }

    KeycloakSession session = context.getSession();
    RealmModel realm = context.getRealm();
    UserModel user = session.users().getUserByUsername(realm, "user");
    context.setUser(user);
    context.success();
}

@Override
protected boolean validateForm(AuthenticationFlowContext context, MultivaluedMap<String, String> formData) {
    logger.infof("EDSAuthenticator validateForm entry");
    logger.infof(context.getAuthenticationSession().getAuthNote("signdata"));
    formData.forEach((key, value) ->{
        System.out.println(key + ":" + value.size()) ;        
        System.out.println(key + ":" + value.toString());
        }
    );
    return true;
}


@Override
public boolean requiresUser() {
    return false;
}

@Override
protected Response challenge(AuthenticationFlowContext context, MultivaluedMap<String, String> formData) {
    LoginFormsProvider forms = context.form(); 
     **//maybe there is a way to place this note to login page?**  
    context.getAuthenticationSession().setAuthNote("signdata", "signdatavalue");
    if (!formData.isEmpty()) forms.setFormData(formData);
    return forms.createForm(LOGIN_FTL);
}

@Override
protected Response createLoginForm(LoginFormsProvider form) {
    return form.createForm(LOGIN_FTL);
}

@Override
protected String getDefaultChallengeMessage(AuthenticationFlowContext context) {
    return Messages.INVALID_USERNAME;
}
}

přihlášení ftl FYI tam jsou některé js skripty za tohoto formuláře, které pracují s cert

<#import "template.ftl" as layout>
<@layout.registrationLayout displayInfo=(realm.password && realm.registrationAllowed && !registrationDisabled??); section>
<#if section = "header">
    Enter
<#elseif section = "form">
    <div id="kc-form">
        <div id="kc-form-wrapper">
            <#if realm.password>
                <form id="kc-form-login" onsubmit="login.disabled = true; return true;" action="${url.loginAction}"
                      method="post">

                    <div class="${properties.kcFormGroupClass!}" style="display:none"> 
                        <label for="signedXML" class="${properties.kcLabelClass!}">signedXML</label>
                        <input id="signedXML" class="${properties.kcInputClass!}" value="signed xml test text" name="signedXML" type="hidden"/>
                    </div>
                    
                    <div id="kc-form-buttons" class="${properties.kcFormGroupClass!}">
                        <input tabindex="4"
                               class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonBlockClass!} ${properties.kcButtonLargeClass!}"
                               name="login" id="kc-login" onClick="signXmlCall()" type="button" value="choose cert"/>
                    </div>
                </form>
            </#if>
        </div>
    </div>
</#if>

</@layout.registrationLayout>
customization keycloak
2021-11-18 17:58:09
1

Nejlepší odpověď

0

Našel způsob, je třeba přidat forem.setAttribute("serverdata", dataforsign); pak použijte serverdata v ftl, jako to ${serverdata}

2021-11-18 21:31:40

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................