我有几个应用程序密码存储在Wildfly 17.x凭据存储中。如何以编程方式从凭据存储访问存储的密码?
这就是凭据存储的创建方式以及密码存储在其中的方式。
/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir, location=test.jceks, create=true,credential-reference={clear-text=storepass})
/subsystem=elytron/credential-store=test:add-alias(alias=keystorepw,secret-value=secret)
我在不同的扩展名而不是jceks中创建了商店。修复后,我可以从商店读取密码。花了一段时间才弄清楚,因为 WildFly 在创建商店时没有抱怨,除了以编程方式阅读它之外,一切都很好。
首先原谅我用英语写作。我现在最好的方法是使用此代码,库 Maven 版本 1.12.1.Final。其他库(如最近的 Alpha 版本(对此代码有错误。
<dependency>
<groupId>org.wildfly.security</groupId>
<artifactId>wildfly-elytron</artifactId>
<version>1.12.1.Final</version>
</dependency>
方法
public Password giveMeAPass(String alias) throws NoSuchAlgorithmException, CredentialStoreException, InvalidKeySpecException {
/*
* Create a ProtectionParameter for access to the store.
*/
Password storePassword = ClearPassword.createRaw(
ClearPassword.ALGORITHM_CLEAR,
"storepass".toCharArray());
ProtectionParameter protectionParameter = new CredentialSourceProtectionParameter(
IdentityCredentials.NONE.withCredential(
new PasswordCredential(storePassword)));
Security.addProvider(elytronProvider);
CredentialStore credentialStore = CredentialStore.getInstance(
"KeyStoreCredentialStore", csProvider);
// Configure and Initialise the CredentialStore
String configPath = System.getProperty("jboss.server.data.dir");
Map<String, String> configuration = new HashMap<>();
String path = configPath + File.separator + "test.jceks";
configuration.put("keyStoreType", "JCEKS");
configuration.put("location", path);
configuration.put("modifiable", "false");
//Inicialize credentialStore
credentialStore.initialize(configuration, protectionParameter);
return credentialStore.retrieve(alias, PasswordCredential.class).getPassword();
}
此方法基于凭据存储。
如果您正在寻找完整的示例,请查看 https://github.com/wildfly-security-incubator/elytron-examples/blob/master/credential-store/src/main/java/org/wildfly/security/examples/CredentialStoreExample.java 您可以在那里看到,cs(在那里命名为CREDENTIAL_STORE_PROVIDER(和elytronProvider(在那里命名为PASSWORD_PROVIDER(是通过调用apriate构造函数创建的: 私有静态最终提供程序CREDENTIAL_STORE_PROVIDER = new WildFlyElytronCredentialStoreProvider((; 私有静态最终提供程序PASSWORD_PROVIDER = new WildFlyElytronPasswordProvider((;