首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Micronaut与Hashicorp Vault连接起来

将Micronaut与Hashicorp Vault连接起来
EN

Stack Overflow用户
提问于 2021-03-31 19:46:56
回答 1查看 772关注 0票数 0

我需要一些帮助来配置Micronaut和Vault。我试图从我的application.yml属性从我的本地仓库从Micronaut的秘密。

我已经下载了Vault CLI并启动了一个dev服务器,在此之前,我已经用vault kv put secret/application SECRET_GENERATOR_JWT=foobar在kv秘密引擎中配置了一个秘密。

对于Micronaut,我正在读取正式文件以配置与Vault的连接,但是当我在本地启动应用程序时,会收到以下错误:

代码语言:javascript
运行
复制
ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [io.micronaut.security.token.jwt.signature.secret.SecretSignatureConfiguration] could not be loaded: Error instantiating bean of type [io.micronaut.security.token.jwt.signature.secret.SecretSignatureConfiguration]: Could not resolve placeholder ${SECRET_GENERATOR_JWT}

我怎么才能和Vault解决这个问题?

这是我的Micronaut's application.yml

代码语言:javascript
运行
复制
micronaut:
  application:
    name: hello
  config-client:
    enabled: true
  security:
    authentication: bearer
    token:
      jwt:
        signatures:
          secret:
            generator:
              secret: ${SECRET_GENERATOR_JWT}
vault:
  client:
    token: s.pkUenRJ2TCNOPYghsd5an0Iw
    uri: http://127.0.0.1:8200
    config:
      enabled: true
    secret-engine-name: secret

这是Maven的依赖项部分:

代码语言:javascript
运行
复制
<dependencies>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-inject</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-http-server-netty</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut.test</groupId>
      <artifactId>micronaut-test-junit5</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut.security</groupId>
      <artifactId>micronaut-security-jwt</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micronaut</groupId>
        <artifactId>micronaut-discovery-client</artifactId>
    </dependency>
  </dependencies>

还有我的annotationProcessorPaths

代码语言:javascript
运行
复制
<configuration>
  <annotationProcessorPaths>
    <path>
      <!-- must precede micronaut-inject-java -->
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
    </path>
    <path>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-inject-java</artifactId>
      <version>${micronaut.version}</version>
    </path>
      <path>
      <groupId>io.micronaut.security</groupId>
      <artifactId>micronaut-security-annotations</artifactId>
      <version>${micronaut.security.version}</version>
    </path>
  </annotationProcessorPaths>
  <compilerArgs>
    <arg>-Amicronaut.processing.group=hello.world.cli.maven</arg>
    <arg>-Amicronaut.processing.module=hello-world-cli-maven</arg>
  </compilerArgs>
</configuration>

缩微版本: 2.3.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-13 01:50:15

要使其正常工作,您需要提供环境变量或设置默认值。

第一个选项是设置变量环境,如:

代码语言:javascript
运行
复制
$ export SECRET_GENERATOR_JWT="superSecreteGeneratorJWT"
$ ./mvnw mn:run

第二个选项是像这样配置您的application.yml

代码语言:javascript
运行
复制
micronaut:
  application:
    name: hello
  config-client:
    enabled: true
  security:
    authentication: bearer
    token:
      jwt:
        signatures:
          secret:
            generator:
              secret: ${SECRET_GENERATOR_JWT:`superSecreteGeneratorJWT`}

这样,您将正确地设置环境变量。

进一步信息https://docs.micronaut.io/latest/guide/index.html#propertySource

然后你必须注射它,就像:

代码语言:javascript
运行
复制
import io.micronaut.context.annotation.Value;

import javax.inject.Singleton;

@Singleton
public class YourServices {

    private final String secret;    
    YourServices(@Value("${micronaut.security.token.jwt.signatures.secret.generator.secret}") String secret) {
       this.secret = secret;
    }

}

更多信息:https://docs.micronaut.io/latest/guide/index.html#valueAnnotation

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66894378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档