Spring Vault 1.1.0 M1 和 2.0.0 M2 版本可用

发布 | Mark Paluch | 2017年7月27日 | ...

我谨代表社区宣布两个新的 Spring Vault 里程碑版本:1.1.0 M1 和 2.0.0 M2。1.1.0 M1 版本完成了 24 个工单,2.0.0 M2 版本解决了 7 个工单,这两个版本都可以在里程碑仓库中找到。

自上一个版本以来,这些功能已包含在当前的里程碑版本中:

  • 通过 AWS IAM 进行 Vault 登录

  • 根据租约期限轮换通用密钥

  • 引入 VaultEndpointProvider 以动态配置端点

此外,2.0.0 M2 版本还包含:

  • 用于声明身份验证流程的身份验证 DSL

  • 基于 Spring Framework 5 的 WebClientProject Reactor 的响应式支持

  • 通过添加 @NonNullApi@Nullable 注解来增强工具支持,以便您最喜欢的 IDE 可以识别它们

身份验证 DSL

身份验证步骤提供对常见身份验证活动的重用。通过 AuthenticationSteps 创建的步骤以函数式风格描述身份验证流程,将实际的身份验证执行留给特定的执行器。

// Static token use
AuthenticationSteps.just(VaultToken.of(…));

// AppRole authentication
AuthenticationSteps.fromSupplier(

    // Construct login body
    () -> Collections.singletonMap("role_id", options.getRoleId()))

    // post the payload to Vault to log in
    .login("auth/{mount}/login", options.getPath());

身份验证流程需要一个执行器来执行实际的登录。我们根据支持的执行模型提供两个执行器:

  • AuthenticationStepsExecutor 作为同步 ClientAuthentication 的直接替代。

  • AuthenticationStepsOperator 用于响应式执行。

ClientAuthentication 带有静态工厂方法,用于为其特定于身份验证的选项创建 AuthenticationSteps

CubbyholeAuthenticationOptions options = …
RestOperations restOperations = …

AuthenticationSteps steps = CubbyholeAuthentication.createAuthenticationSteps(options);

AuthenticationStepsExecutor executor = new AuthenticationStepsExecutor(steps, restOperations);

VaultToken token = executor.login();

身份验证 DSL 是响应式 Vault 客户端的先决条件,用于将身份验证步骤与其实际执行解耦。

响应式 Vault 客户端

Spring Vault 的响应式客户端支持建立在身份验证 DSL 和 Spring Framework 5 的 WebClient 之上。响应式支持通过 ReactiveVaultTemplate 涵盖读/写/列出和删除操作,并提供用于会话管理的缓存 VaultToken 提供程序。您可以使用几乎所有身份验证机制来获取 Vault 令牌。以下机制实现 AuthenticationStepsFactory 并为非阻塞登录提供 AuthenticationSteps

  • AppId

  • AppRole

  • AWS-EC2

  • 客户端证书

  • Cubbyhole

  • 静态令牌

创建一个配置类来开始使用响应式支持。

public class Foo extends AbstractReactiveVaultConfiguration {

	@Override
	public VaultEndpoint vaultEndpoint() {
		return VaultEndpoint.from(URI.create("https://127.0.0.1:8200"));
	}

	@Override
	public ClientAuthentication clientAuthentication() {
		return new AwsEc2Authentication(restOperations());
	}
}

AbstractReactiveVaultConfiguration 的配置支持将实现 AuthenticationStepsFactory 的身份验证适配到响应式身份验证方法,并配置命令式和响应式客户端。这两个客户端之间不共享会话,但这将是未来的任务。您可以独立使用 ReactiveVaultTemplate

reactiveVaultTemplate.write("secret/mykey", Collections.singletonMap("hello", "world"))
		.thenMany(vaultOperations.list("secret"))
		.subscribe(item -> System.out.println(item));

或在诸如 Spring WebFlux 之类的响应式运行时基础架构中使用。

@RestController
public class SecretsController {

  private final ReactiveVaultOperations operations;

  // Constructor omitted for brevity

  @GetMapping("secrets")
  Flux<List> listSecrets() {
    return vaultOperations.list("secret");
  }
}

贡献

如果没有社区,我们就不会取得今天的成功。我要感谢所有创建问题和提供反馈的人。

有关完整更改列表,请参阅 1.1.0 M12.0.0 M2 的更改日志。

项目页面 | GitHub | 问题 | 1.1.0 M1 文档 | 2.0.0 M2 文档 | Stack Overflow

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加快您的进度。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部