我们在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版本仍然存在问题。
答案 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']