Spring security как автоматически настроить KeyStoreKeyFactory из файла yml - PullRequest
0 голосов
/ 03 апреля 2020

Мне нужно использовать oauth-jwt сервер безопасности.

Прямо сейчас у меня есть очень простое решение по сравнению с пользовательскими java классами и методами для загрузки конфигураций и построения требуемых KeyStoreKeyFactory и KeyPair, которые использовались вместе с jwt:

Ниже я предоставляю самые интересные детали.

  1. Итак, моя конфигурация yml:
server:
  port: 8090
  ssl:
    key-store: classpath:keystore.jks
    key-store-password: store-password
    key-alias: mytestkeyalias
    key-password: key-password
Так что я думаю, что мой избыточный класс конфигурации Jwt
@ConfigurationProperties("server")
public class SecurityProperties {

    private JwtProperties jwt;

    public JwtProperties getJwt() {
        return jwt;
    }

    public void setJwt(JwtProperties jwt) {
        this.jwt = jwt;
    }

    @ConfigurationProperties("server.ssl")
    public static class JwtProperties {

        private Resource publicKey;

        public Resource getPublicKey() {
            return publicKey;
        }

        public void setPublicKey(Resource publicKey) {
            this.publicKey = publicKey;
        }

        @Override
        public String toString() {
            try {
                return IOUtils.toString(publicKey.getInputStream(), UTF_8);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "empty";
        }
    }

}
и bean-компоненты, настроенные с использованием предыдущих данных из класса:
    @Autovired
    private SecurityProperties securityProperties;

    @Bean
    KeyPair keyPair() {
        SecurityProperties.JwtProperties jwtProperties = securityProperties.getJwt();
        return keyStoreKeyFactory().getKeyPair(jwtProperties.getKeyPairAlias(), jwtProperties.getKeyPairPassword().toCharArray());
    }

    @Bean
    KeyStoreKeyFactory keyStoreKeyFactory() {
        SecurityProperties.JwtProperties jwtProperties = securityProperties.getJwt();
        return new KeyStoreKeyFactory(jwtProperties.getKeyStore(), jwtProperties.getKeyStorePassword().toCharArray());
    }

Так что вопрос:

Было бы здорово иметь возможность ввести уже построенный java.security.KeyPair .

Я надеюсь, что Spring предоставляет что-то очень похожее на мой wi sh, но я не обнаружил никаких готовых решений. Также было бы неплохо иметь дополнительный подход для его построения, уменьшающий java конфиги. Есть какие-то решения для этого?

...