Điểm:0

Wildfly standalone.xml - chuyển bí mật tới KeyCloak SPI từ cửa hàng thông tin đăng nhập elytron

lá cờ br

Tôi đang di chuyển mật khẩu KeyCloak v15 (WildFly v23) từ kho tiền cũ sang kho lưu trữ thông tin xác thực elytron. Nó hoạt động tốt cho trường hợp sử dụng tiêu chuẩn. Trong độc lập.xml, Tôi có: /máy chủ/tiện ích mở rộng/tiện ích mở rộng:

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

/máy chủ/hồ sơ/hệ thống con:

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

và tôi truy cập mật khẩu bằng cách sử dụng /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"/>

Tuy nhiên, có một bí mật mà tôi cần chuyển cho một SPI trong thuộc tính. Bất cứ ý tưởng làm thế nào để làm điều đó? Đây là cách kho tiền cũ:

/máy chủ/hệ thống-thuộc tính/thuộc tính:

<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>
Điểm:0
lá cờ br

Tôi tìm thấy 2 khả năng:

  1. Viết lại SPI để truy xuất bí mật trực tiếp từ kho lưu trữ thông tin xác thực Elytron trong Java
  2. Đặt trước một biến môi trường (xuất SECRET="$(secret-getter-script)") và sử dụng biến trong độc lập.xml:
<spi name="mySpi">
    <provider name="file" enabled="true">
        <properties>
            <property name="password" value="${env.SECRET}"/>
        </properties>
    </provider>
</spi>
McLayn avatar
lá cờ br
Cuối cùng, việc sử dụng một biến môi trường không đủ an toàn cho việc sử dụng của chúng tôi và tôi đã phải dạy SPI của chúng tôi đọc nội dung cửa hàng thông tin xác thực Elytron
Điểm:0
lá cờ br

Tôi đã phải viết lại SPI của chúng tôi để đọc nội dung cửa hàng thông tin xác thực Elytron:

nhập org.jboss.as.server.CienServiceContainer;
nhập org.jboss.msc.service.ServiceController;
nhập org.jboss.msc.service.ServiceName;
nhập org.jboss.msc.service.ServiceRegistry;
nhập org.wildfly.security.credential.PasswordCredential;
nhập org.wildfly.security.credential.store.CredentialStore;
nhập org.wildfly.security.credential.store.CredentialStoreException;
nhập org.wildfly.security.password.Password;
nhập org.wildfly.security.password.interfaces.ClearPassword;
  chuỗi tĩnh riêng getClientSecret(String credentialStore, String secretAlias) {
    ServiceName cuối cùng SERVICE_NAME_CRED_STORE = ServiceName.of("org", "wildfly", "security", "credential-store");
    ServiceName cuối cùng sn = ServiceName.of(SERVICE_NAME_CRED_STORE, credentialStore);
    sổ đăng ký ServiceRegistry cuối cùng = CurrentServiceContainer.getServiceContainer();
    ServiceController cuối cùng<?> credStoreService = registry.getService(sn);
    CredentialStore cuối cùng cs = (CredentialStore) credStoreService.getValue();
// if (!cs.exists(secretAlias, PasswordCredential.class)) {
// ném new CredentialStoreException("Alias ​​" + secretAlias ​​+ " not found in credential store.");
// }
    mật khẩu Mật khẩu cuối cùng;
    cố gắng {
      mật khẩu = cs.retrieve(secretAlias, PasswordCredential.class).getPassword();
    } bắt (CredentialStoreException e) {
      e.printStackTrace();
      trả về giá trị rỗng;
    }
    if (!(password instanceof ClearPassword)) {
      throw new ClassCastException("Mật khẩu không thuộc loại ClearPassword");
    }
    trả lại mật khẩu String mới(((ClearPassword)).getPassword());
  }

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.