Puncte:0

Wildfly standalone.xml - transmiterea secretului către KeyCloak SPI din magazinul de acreditări elytron

drapel br

Migrez parolele KeyCloak v15 (WildFly v23) din vechiul seif în magazinul de acreditări elytron. Funcționează bine pentru cazul de utilizare standard. În standalone.xml, Eu am: /server/extensii/extensie:

<extension module="org.wildfly.extension.elytron"/>

/server/profil/subsistem:

<subsystem xmlns="urn:wildfly:elytron:13.0" final-providers="elytron" disallowed-providers="OracleUcrypto">
    <providers>
        <provider-loader name="elytron" module="org.wildfly.security.elytron"/>
    </providers>
    <audit-logging>
        <file-audit-log name="local-audit" path="audit-log.log" relative-to="jboss.server.log.dir" format="JSON"/>
    </audit-logging>
    <credential-stores>
        <credential-store name="credStore" location="/data/credStore.jceks">
            <implementation-properties>
                <property name="keyStoreType" value="JCEKS"/>
            </implementation-properties>
            <credential-reference clear-text="MASK-123456789;salt123;42"/>
        </credential-store>
    </credential-stores>
</subsystem>

și accesez parolele folosind /server/profile/subsystem[@xmlns="urn:jboss:domain:jgroups:8.0"]/stacks/stack[@name="tcp"]/auth-protocol/digest-token/shared-secret-reference:

<shared-secret-reference store="credStore" alias="myBlock::mySecret"/>

Cu toate acestea, există un secret pe care trebuie să-l transmit unui SPI într-o proprietate. Ai idee cum să o faci? Acesta a fost vechiul mod de seif:

/server/system-properties/proprietate:

<property name="secret" value="${VAULT::myBlock::mySecret::1}"/>

/server/profile/subsystem[@xmlns="urn:jboss:domain:keycloak-server:1.1"]/spi:

<spi name="mySpi">
    <provider name="file" enabled="true">
        <properties>
            <property name="password" value="${secret}"/>
        </properties>
    </provider>
</spi>
Puncte:0
drapel br

Am gasit 2 posibilitati:

  1. Rescrieți SPI-ul pentru a prelua secretul direct din magazinul de acreditări Elytron în Java
  2. Setați o variabilă de mediu în prealabil (export SECRET="$(secret-getter-script)") și folosiți variabila în standalone.xml:
<spi name="mySpi">
    <provider name="file" enabled="true">
        <properties>
            <property name="password" value="${env.SECRET}"/>
        </properties>
    </provider>
</spi>
McLayn avatar
drapel br
În cele din urmă, folosirea unei variabile de mediu nu a fost suficient de sigură pentru utilizarea noastră și a trebuit să învăț SPI-ul nostru să citească conținutul magazinului de acreditări Elytron
Puncte:0
drapel br

A trebuit să rescriu SPI-ul nostru pentru a citi conținutul magazinului de acreditări Elytron:

import org.jboss.as.server.CurrentServiceContainer;
import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceRegistry;
import org.wildfly.security.credential.PasswordCredential;
import org.wildfly.security.credential.store.CredentialStore;
import org.wildfly.security.credential.store.CredentialStoreException;
import org.wildfly.security.parola.Parola;
import org.wildfly.security.password.interfaces.ClearPassword;
  private static String getClientSecret(String credentialStore, String secretAlias) {
    final ServiceName SERVICE_NAME_CRED_STORE = ServiceName.of("org", "wildfly", "security", "credential-store");
    final ServiceName sn = ServiceName.of(SERVICE_NAME_CRED_STORE, credentialStore);
    registru final ServiceRegistry = CurrentServiceContainer.getServiceContainer();
    final ServiceController<?> credStoreService = registry.getService(sn);
    final CredentialStore cs = (CredentialStore) credStoreService.getValue();
// dacă (!cs.exists(secretAlias, PasswordCredential.class)) {
// aruncă o nouă excepție CredentialStoreException ("Alias ​​" + secretAlias ​​+ " nu a fost găsit în magazinul de acreditări.");
// }
    parola finală a parolei;
    încerca {
      parola = cs.retrieve(secretAlias, PasswordCredential.class).getPassword();
    } catch (CredentialStoreException e) {
      e.printStackTrace();
      returnează nul;
    }
    dacă (!(instanța parolei din ClearPassword)) {
      throw new ClassCastException ("Parola nu este de tipul ClearPassword");
    }
    return new String(((ClearPassword) parola).getPassword());
  }

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.