#spring-boot #single-sign-on #keycloak #java-11
#spring-boot #единый вход #keycloak #java-11
Вопрос:
Я реализовал своего поставщика пользовательского хранилища следующим образом:
public class UserStorageProvider implements org.keycloak.storage.UserStorageProvider, UserLookupProvider, CredentialInputValidator {
public UserStorageProvider(KeycloakSession session) {
this.session = session;
}
public UserStorageProvider(KeycloakSession session, ComponentModel model) {
this.session = session;
this.model = model;
}
protected KeycloakSession session;
protected ComponentModel model;
@Override
public boolean isConfiguredFor(RealmModel realm, UserModel user, String credentialType) {
return true;
}
@Override
public boolean supportsCredentialType(String credentialType) {
return true;
}
@Override
public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
return true;
}
@Override
public UserModel getUserByUsername(String username, RealmModel realm) {
//here to fetch user from my DB.
return null;
}
@Override
public UserModel getUserById(String id, RealmModel realm) {
StorageId storageId = new StorageId(id);
String username = storageId.getExternalId();
return getUserByUsername(username, realm);
}
@Override
public UserModel getUserByEmail(String email, RealmModel realm) {
return null;
}
public void close() {
}
}
и его заводской класс:
public class UserStorageProviderFactory implements org.keycloak.storage.UserStorageProviderFactory<UserStorageProvider> {
public static final String PROVIDER_NAME = "user-provider";
@Override
public String getHelpText() {
return "JPA Example User Storage Provider";
}
@Override
public List<ProviderConfigProperty> getConfigProperties() {
return null;
}
@Override
public UserStorageProvider create(KeycloakSession keycloakSession) {
return new UserStorageProvider(keycloakSession);
}
@Override
public UserStorageProvider create(KeycloakSession keycloakSession, ComponentModel componentModel) {
UserStorageProvider provider = new UserStorageProvider(keycloakSession, componentModel);
provider.session = keycloakSession;
provider.model = componentModel;
return provider;
}
@Override
public String getId() {
return PROVIDER_NAME;
}
@Override
public void init(Config.Scope config) {
}
@Override
public void postInit(KeycloakSessionFactory factory) {
}
@Override
public void close() {
}
}
и org.keycloak.storage.UserStorageProviderFactory
файл находится на, META-INF/services/
а его содержимое:
com.kian.neshan.userfederation.UserStorageProviderFactory
Итак, я создаю jar by mvn clean package
и помещаю его в папку хранилища keycloak, но когда я захожу в панель администратора, мой провайдер не добавляется в опцию объединения пользователей
Где не так?
Комментарии:
1. Есть ли какие-либо журналы об инициализации развертывания?
Ответ №1:
Весь мой модуль правильный.
Проблема заключается в том, что local-keycloak-docker-image должен быть удален после любых изменений модуля
Keycloak запускается docker-compose, а его изображения создаются с помощью Dockerfile, поэтому после любых изменений моего модуля local-keycloak-image следует удалить, sudo docker rmi [local-image-name]
чтобы перестроить образ, чтобы получить новейший файл my jar и поместить его в папку развертывания local-docker-image.