Keycloak pridať server údajov na vlastné prihlasovacie stránku

0

Otázka

Snažím sa realizovať logining prostredníctvom digitálneho podpisu a na prihlasovacej stránke potrebujem údajov, ktoré vznikajú každý pokus o prihlásenie a ktoré som sa podpísať a poslať na server tak som hľadal spôsob, ako dať server údajov na prihlasovacej stránke, ktoré som sa pozrite na server po forme predložené.

Prietok nie končiaci nie je veľa čo vidieť ale možno je spôsob, ako umiestniť authote na prihlasovacej stránke?

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;
}
}

prihlásiť sa ftl s pozdravom tam sú niektoré js skripty za tento formulár ktoré 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

Najlepšiu odpoveď

0

Našiel spôsob, ako je potrebné pridať formy.setAttribute("serverdata", dataforsign); potom použite serverdata v ftl, ako je táto ${serverdata}

2021-11-18 21:31:40

V iných jazykoch

Táto stránka je v iných jazykoch

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