0

我们在 Spring Boot 项目中使用 okta 进行身份验证。我们已经使用 java 应用程序成功完成了身份验证(参考 - https://developer.okta.com/blog/2017/03/21/spring-boot-oauth

现在我要做的是将 okta clientId 和 secret 属性移动到 vault。

保险库的引导程序

spring.cloud.vault:
主机:localhost
端口:8200
方案:http
令牌:00000000-0000-0000-0000-000000000000

现在请看以下2个应用程序属性的案例

案例 1:使用 @Value 的属性有效

am.clientId=${account.clientId} am.issuer=${account.issuer}

用作

@Value("${am.clientId}")
private String clientId;
@Value("${am.issuer}")
private String clientSecret;

案例 2:用作弹簧属性不起作用 我对弹簧 oAuth 使用相同的属性,但它失败了

okta.oauth2.clientId=${account.clientId}

okta.oauth2.issuer=${account.issuer}

异常日志

java.lang.IllegalArgumentException:无法解析值“${account.clientId}”中的占位符“account.clientId” account-web_1 | 在 org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.5.RELEASE.jar!/:5.0.5.RELEASE] account-web_1 | 在 org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.5.RELEASE.jar!/:5.0.5.RELEASE] account-web_1 | 在 org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.5.RELEASE.jar!/:5.0.5.RELEASE] account-web_1 | 在 org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.5.

[更新]

所以调试spring代码我意识到问题只出在属性上

okta.oauth2.issuer

Github 也有同样的问题,但是 okta spring boot satarter 0.6.0 版本仍然存在问题。

4

2 回答 2

2

您是否尝试过okta.oauth2.*在云配置提供程序中设置属性?我通常使用文件 repo 测试 Cloud Config,但从客户端的角度来看,它应该是相同的。(我知道这并不能完全回答你的问题,但只是想在继续之前确保它有效)

于 2018-12-10T15:50:24.990 回答
1

所以我有一个解决方案。创建了一个 bean“oktaOAuth2Properties”来覆盖 Spring Boot 默认 bean 并使用 @Value 注释从 vault 中获取值。代码如下所示。这对我有用

@Value("${okta.clientId}") 私有字符串 clientId;

@Value("${okta.issuer}")
private String issuer;

@Bean
public OktaOAuth2Properties oktaOAuth2Properties() {
    OktaOAuth2Properties properties = new OktaOAuth2Properties();
    properties.setClientId(clientId);
    properties.setIssuer(issuer);
    return properties;
}
于 2018-12-13T12:57:39.950 回答