【问题标题】:Spring okta oauth2 properties using spring cloud vault使用 Spring Cloud Vault 的 Spring okta oauth2 属性
【发布时间】:2018-12-10 14:40:03
【问题描述】:

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

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

保险库的引导程序

spring.cloud.vault:
主机:本地主机
端口: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:用作弹簧属性不起作用 我对 spring oAuth 使用相同的属性,但它失败了

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

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

异常日志

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

[更新]

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

okta.oauth2.issuer

Github 有一个 issue 相同,但 okta spring boot satarter 0.6.0 版本仍然存在问题。

【问题讨论】:

    标签: java spring-boot okta spring-oauth2 spring-cloud-vault-config


    【解决方案1】:

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

    【讨论】:

    • 我在这里的理解是,您希望我使用以下密钥 okta.oauth2.clientId okta.oauth2.issuer 设置保险库中的属性。是的,我试过了,不起作用。看起来spring在解析属性值之前初始化了bean。我无法弄清楚 spring 正在创建哪个 bean,因此我可以覆盖它。
    • 所以我明白了 Brian Demers。如果我在保管库中添加以下属性并将它们从应用程序属性 okta.oauth2.clientId okta.oauth2.issuer 中删除,则此方法有效
    【解决方案2】:

    所以我有一个解决方案。创建了一个 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 2016-07-06
      • 2018-01-12
      • 2018-07-25
      • 2018-05-21
      • 2021-05-07
      • 2019-01-09
      • 2020-07-04
      • 2021-11-26
      相关资源
      最近更新 更多