目前,我正在使用springsecurity编辑项目中saml支持的现有实现。我有多个identityprovider,我将其数据存储在数据库中。使用我的应用程序ui,我可以在运行时添加新的identityproviders,它将被添加到cachingmetadatamanager中。之后,调用refreshmetadata。不过,我有jkskeymanager,它在应用程序启动时加载,并加载一个用于所有identityproviders的所有元数据的jks密钥库。我希望用户能够在运行时创建identityprovider时使用我的应用程序ui上传(或粘贴)私钥,这样,不同的密钥可以用于不同的identityprovider,但我不知道如何使用。如果我把密钥存储在jks文件或其他地方,对我来说没有区别。没有spring引导,恐怕无法升级库版本/迁移到其他库。
密钥管理器注入如下所示:
@Bean
public KeyManager keyManager() {
DefaultResourceLoader loader = new DefaultResourceLoader();
Resource storeFile = loader
.getResource(environment.getProperty("server.ssl.key-store"));
Map<String, String> passwords = new HashMap<>();
passwords.put(environment.getProperty("server.ssl.key-alias"), environment.getProperty("server.ssl.key-store-password"));
String defaultKey = "spring";
return new JKSKeyManager(storeFile, environment.getProperty("server.ssl.key-store-password"), passwords, defaultKey);
}
使用的saml扩展是org.springframework.security.extensions中的spring-security-saml2-core(1.0.3.release)。而springsecurity版本是3.2.9.release。
1条答案
按热度按时间2eafrhcq1#
自
JKSKeyManager
在构造时计算所有可用的键,这是KeyManager
可能是最好的。例如,如下所示:
会改变世界
getAvailableCredentials
方法读取KeyStore
每次调用的别名。然后,当您需要向
KeyStore
,您可以使用KeyStore
api来做。当然,正如你提到的,你不必使用
KeyStore
. 无论您在哪里存储密钥,都可以实现自己的密钥KeyManager
使用opensaml的CollectionCredentialResolver
而不是KeyStoreCredentialResolver
.