使用Spring Cloud Vault的Spring Okta OAuth2属性

时间:2018-12-10 14:40:03

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

我们在Spring启动项目中使用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}

用作

public static String removeChar(String str, char target) {
    if(str.length() == 0) {
        return str;
    } else {
        if(str.charAt(0) == target) {
            // remote the first character, and apply the recursive method to
            // the rest of the String
            return removeChar(str.substring(1),target);
        } else {
            // don't remote the first character, and apply the recursive method to
            // the rest of the String
            return str.charAt(0) + removeChar(str.substring(1),target);
        }
    }
}
@Value("${am.clientId}")
private String clientId;

第2种情况:用作弹簧特性不起作用 我对spring 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.RELEASE.jar!/:5.0.5.RELEASE]

[更新]

因此,调试spring代码后,我意识到问题仅在于属性

  

okta.oauth2.issuer

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  

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

a_list = ['twos' if var%2==0 else 'threes' if var%3==0 else var for var in range(0,10)]
a_list
>>> ['twos', 1, 'twos', 'threes', 'twos', 5, 'twos', 7, 'twos', 'threes']