7.7. 외부 스토리지 강화
PropertyFileUserStorageProvider 예제는 실제로 제한됩니다. 속성 파일에 저장된 사용자로 로그인할 수는 있지만 다른 많은 작업을 수행할 수는 없습니다. 이 공급자가 로드한 사용자가 특정 애플리케이션에 완전히 액세스하기 위해 특별한 역할 또는 그룹 매핑이 필요한 경우 이러한 사용자에게 역할 매핑을 추가할 수 있는 방법이 없습니다. 또한 이메일, 첫 번째 및 성과 같은 중요한 속성을 수정하거나 추가할 수 없습니다.
이러한 유형의 경우 Red Hat Single Sign-On을 사용하면 Red Hat Single Sign-On의 데이터베이스에 추가 정보를 저장하여 외부 저장소를 보강할 수 있습니다. 이를 페더레이션 사용자 스토리지라고 하며 org.keycloak.storage.federated.UserFederatedStorageProvider 클래스에 캡슐화됩니다.
UserFederatedStorageProvider
package org.keycloak.storage.federated;
public interface UserFederatedStorageProvider extends Provider {
Set<GroupModel> getGroups(RealmModel realm, String userId);
void joinGroup(RealmModel realm, String userId, GroupModel group);
void leaveGroup(RealmModel realm, String userId, GroupModel group);
List<String> getMembership(RealmModel realm, GroupModel group, int firstResult, int max);
...
UserFederatedStorageProvider 인스턴스는 KeycloakSession.userFederatedStorage() 메서드에서 사용할 수 있습니다. 속성, 그룹 및 역할 매핑, 다양한 인증 정보 유형 및 필요한 작업을 저장하는 데 필요한 모든 종류의 방법이 있습니다. 외부 저장소의 데이터 모델이 전체 Red Hat Single Sign-On 기능을 지원할 수 없는 경우 이 서비스는 격차를 채울 수 있습니다.
Red Hat Single Sign-On에는 org.keycloak.storage.adapter.AbstractUserAdapterFederatedStorage 가 포함되어 있습니다. 이 클래스는 사용자 이름 가져오기/설정을 제외한 모든 UserModel 방법을 사용자 페더레이션 스토리지에 위임합니다. 외부 스토리지 표현에 위임하기 위해 재정의해야 하는 메서드를 재정의합니다. 재정의할 수 있는 더 작은 보호 메서드가 있으므로 이 클래스의 javadoc을 읽는 것이 좋습니다. 그룹 멤버십 및 역할 매핑을 구체적으로 분석합니다.
7.7.1. 보강 예 링크 복사링크가 클립보드에 복사되었습니다!
우리의 PropertyFileUserStorageProvider 예제에서는 AbstractUserAdapterFederatedStorage 를 사용하기 위해 공급자에게 간단한 변경이 필요합니다.
PropertyFileUserStorageProvider
protected UserModel createAdapter(RealmModel realm, String username) {
return new AbstractUserAdapterFederatedStorage(session, realm, model) {
@Override
public String getUsername() {
return username;
}
@Override
public void setUsername(String username) {
String pw = (String)properties.remove(username);
if (pw != null) {
properties.put(username, pw);
save();
}
}
};
}
대신 AbstractUserAdapterFederatedStorage 의 익명 클래스 구현을 정의합니다. setUsername() 메서드는 속성 파일을 변경하여 저장합니다.