keycloak-federation
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 静的限定公開変数類 | 静的関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.federation.sssd.SSSDFederationProvider クラス
org.keycloak.federation.sssd.SSSDFederationProvider の継承関係図
Inheritance graph
org.keycloak.federation.sssd.SSSDFederationProvider 連携図
Collaboration graph

公開メンバ関数

 SSSDFederationProvider (KeycloakSession session, UserStorageProviderModel model, SSSDFederationProviderFactory sssdFederationProviderFactory)
 
UserModel getUserByUsername (String username, RealmModel realm)
 
UserModel validate (RealmModel realm, UserModel user)
 
UserModel getUserById (String id, RealmModel realm)
 
UserModel getUserByEmail (String email, RealmModel realm)
 
void preRemove (RealmModel realm)
 
void preRemove (RealmModel realm, RoleModel role)
 
void preRemove (RealmModel realm, GroupModel group)
 
boolean isValid (RealmModel realm, UserModel local)
 
boolean supportsCredentialType (String credentialType)
 
boolean isConfiguredFor (RealmModel realm, UserModel user, String credentialType)
 
boolean isValid (RealmModel realm, UserModel user, CredentialInput input)
 
UserModel validateAndProxy (RealmModel realm, UserModel local)
 
void close ()
 
boolean updateCredential (RealmModel realm, UserModel user, CredentialInput input)
 
void disableCredentialType (RealmModel realm, UserModel user, String credentialType)
 
Set< String > getDisableableCredentialTypes (RealmModel realm, UserModel user)
 

限定公開メンバ関数

UserModel findOrCreateAuthenticatedUser (RealmModel realm, String username)
 
UserModel importUserToKeycloak (RealmModel realm, String username)
 

限定公開変数類

KeycloakSession session
 
UserStorageProviderModel model
 

静的限定公開変数類

static final Set< String > supportedCredentialTypes = new HashSet<>()
 

静的関数

 [static initializer]
 

非公開変数類

final SSSDFederationProviderFactory factory
 

静的非公開変数類

static final Logger logger = Logger.getLogger(SSSDFederationProvider.class)
 

詳解

SPI provider implementation to retrieve data from SSSD and authenticate against PAM

著者
Bruno Oliveira
バージョン
Revision
1

構築子と解体子

◆ SSSDFederationProvider()

org.keycloak.federation.sssd.SSSDFederationProvider.SSSDFederationProvider ( KeycloakSession  session,
UserStorageProviderModel  model,
SSSDFederationProviderFactory  sssdFederationProviderFactory 
)
inline
59  {
60  this.session = session;
61  this.model = model;
62  this.factory = sssdFederationProviderFactory;
63  }
UserStorageProviderModel model
Definition: SSSDFederationProvider.java:57
KeycloakSession session
Definition: SSSDFederationProvider.java:56
final SSSDFederationProviderFactory factory
Definition: SSSDFederationProvider.java:55

関数詳解

◆ [static initializer]()

org.keycloak.federation.sssd.SSSDFederationProvider.[static initializer] ( )
inlinestaticpackage

◆ close()

void org.keycloak.federation.sssd.SSSDFederationProvider.close ( )
inline
192  {
193  Sssd.disconnect();
194  }

◆ disableCredentialType()

void org.keycloak.federation.sssd.SSSDFederationProvider.disableCredentialType ( RealmModel  realm,
UserModel  user,
String  credentialType 
)
inline
202  {
203  }

◆ findOrCreateAuthenticatedUser()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.findOrCreateAuthenticatedUser ( RealmModel  realm,
String  username 
)
inlineprotected

Called after successful authentication

引数
realmrealm
usernameusername without realm prefix
戻り値
user if found or successfully created. Null if user with same username already exists, but is not linked to this provider
87  {
88  UserModel user = session.userLocalStorage().getUserByUsername(username, realm);
89  if (user != null) {
90  logger.debug("SSSD authenticated user " + username + " found in Keycloak storage");
91 
92  if (!model.getId().equals(user.getFederationLink())) {
93  logger.warn("User with username " + username + " already exists, but is not linked to provider [" + model.getName() + "]");
94  return null;
95  } else {
96  UserModel proxied = validateAndProxy(realm, user);
97  if (proxied != null) {
98  return proxied;
99  } else {
100  logger.warn("User with username " + username + " already exists and is linked to provider [" + model.getName() +
101  "] but principal is not correct.");
102  logger.warn("Will re-create user");
103  new UserManager(session).removeUser(realm, user, session.userLocalStorage());
104  }
105  }
106  }
107 
108  logger.debug("SSSD authenticated user " + username + " not in Keycloak storage. Creating...");
109  return importUserToKeycloak(realm, username);
110  }
UserStorageProviderModel model
Definition: SSSDFederationProvider.java:57
KeycloakSession session
Definition: SSSDFederationProvider.java:56
UserModel importUserToKeycloak(RealmModel realm, String username)
Definition: SSSDFederationProvider.java:112
UserModel validateAndProxy(RealmModel realm, UserModel local)
Definition: SSSDFederationProvider.java:183
static final Logger logger
Definition: SSSDFederationProvider.java:52

◆ getDisableableCredentialTypes()

Set<String> org.keycloak.federation.sssd.SSSDFederationProvider.getDisableableCredentialTypes ( RealmModel  realm,
UserModel  user 
)
inline
206  {
207  return Collections.EMPTY_SET;
208  }

◆ getUserByEmail()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.getUserByEmail ( String  email,
RealmModel  realm 
)
inline
138  {
139  return null;
140  }

◆ getUserById()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.getUserById ( String  id,
RealmModel  realm 
)
inline
133  {
134  return null;
135  }

◆ getUserByUsername()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.getUserByUsername ( String  username,
RealmModel  realm 
)
inline
71  {
72  return findOrCreateAuthenticatedUser(realm, username);
73  }
UserModel findOrCreateAuthenticatedUser(RealmModel realm, String username)
Definition: SSSDFederationProvider.java:87

◆ importUserToKeycloak()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.importUserToKeycloak ( RealmModel  realm,
String  username 
)
inlineprotected
112  {
113  Sssd sssd = new Sssd(username);
114  User sssdUser = sssd.getUser();
115  logger.debugf("Creating SSSD user: %s to local Keycloak storage", username);
116  UserModel user = session.userLocalStorage().addUser(realm, username);
117  user.setEnabled(true);
118  user.setEmail(sssdUser.getEmail());
119  user.setFirstName(sssdUser.getFirstName());
120  user.setLastName(sssdUser.getLastName());
121  for (String s : sssd.getGroups()) {
122  GroupModel group = KeycloakModelUtils.findGroupByPath(realm, "/" + s);
123  if (group == null) {
124  group = session.realms().createGroup(realm, s);
125  }
126  user.joinGroup(group);
127  }
128  user.setFederationLink(model.getId());
129  return validateAndProxy(realm, user);
130  }
UserStorageProviderModel model
Definition: SSSDFederationProvider.java:57
KeycloakSession session
Definition: SSSDFederationProvider.java:56
UserModel validateAndProxy(RealmModel realm, UserModel local)
Definition: SSSDFederationProvider.java:183
static final Logger logger
Definition: SSSDFederationProvider.java:52

◆ isConfiguredFor()

boolean org.keycloak.federation.sssd.SSSDFederationProvider.isConfiguredFor ( RealmModel  realm,
UserModel  user,
String  credentialType 
)
inline
170  {
171  return CredentialModel.PASSWORD.equals(credentialType);
172  }

◆ isValid() [1/2]

boolean org.keycloak.federation.sssd.SSSDFederationProvider.isValid ( RealmModel  realm,
UserModel  local 
)
inline
159  {
160  User user = new Sssd(local.getUsername()).getUser();
161  return user.equals(local);
162  }

◆ isValid() [2/2]

boolean org.keycloak.federation.sssd.SSSDFederationProvider.isValid ( RealmModel  realm,
UserModel  user,
CredentialInput  input 
)
inline
175  {
176  if (!supportsCredentialType(input.getType()) || !(input instanceof UserCredentialModel)) return false;
177 
178  UserCredentialModel cred = (UserCredentialModel)input;
179  PAMAuthenticator pam = factory.createPAMAuthenticator(user.getUsername(), cred.getValue());
180  return (pam.authenticate() != null);
181  }
final SSSDFederationProviderFactory factory
Definition: SSSDFederationProvider.java:55
PAMAuthenticator createPAMAuthenticator(String username, String... factors)
Definition: SSSDFederationProviderFactory.java:66
boolean supportsCredentialType(String credentialType)
Definition: SSSDFederationProvider.java:165

◆ preRemove() [1/3]

void org.keycloak.federation.sssd.SSSDFederationProvider.preRemove ( RealmModel  realm)
inline
143  {
144  // complete We don't care about the realm being removed
145  }

◆ preRemove() [2/3]

void org.keycloak.federation.sssd.SSSDFederationProvider.preRemove ( RealmModel  realm,
RoleModel  role 
)
inline
148  {
149  // complete we dont'care if a role is removed
150 
151  }

◆ preRemove() [3/3]

void org.keycloak.federation.sssd.SSSDFederationProvider.preRemove ( RealmModel  realm,
GroupModel  group 
)
inline
154  {
155  // complete we dont'care if a role is removed
156 
157  }

◆ supportsCredentialType()

boolean org.keycloak.federation.sssd.SSSDFederationProvider.supportsCredentialType ( String  credentialType)
inline
165  {
166  return CredentialModel.PASSWORD.equals(credentialType);
167  }

◆ updateCredential()

boolean org.keycloak.federation.sssd.SSSDFederationProvider.updateCredential ( RealmModel  realm,
UserModel  user,
CredentialInput  input 
)
inline
197  {
198  throw new IllegalStateException("You can't update your password as your account is read only.");
199  }

◆ validate()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.validate ( RealmModel  realm,
UserModel  user 
)
inline
76  {
77  return validateAndProxy(realm, user);
78  }
UserModel validateAndProxy(RealmModel realm, UserModel local)
Definition: SSSDFederationProvider.java:183

◆ validateAndProxy()

UserModel org.keycloak.federation.sssd.SSSDFederationProvider.validateAndProxy ( RealmModel  realm,
UserModel  local 
)
inline
183  {
184  if (isValid(realm, local)) {
185  return new ReadonlySSSDUserModelDelegate(local, this);
186  } else {
187  return null;
188  }
189  }
boolean isValid(RealmModel realm, UserModel local)
Definition: SSSDFederationProvider.java:159

メンバ詳解

◆ factory

final SSSDFederationProviderFactory org.keycloak.federation.sssd.SSSDFederationProvider.factory
private

◆ logger

final Logger org.keycloak.federation.sssd.SSSDFederationProvider.logger = Logger.getLogger(SSSDFederationProvider.class)
staticprivate

◆ model

UserStorageProviderModel org.keycloak.federation.sssd.SSSDFederationProvider.model
protected

◆ session

KeycloakSession org.keycloak.federation.sssd.SSSDFederationProvider.session
protected

◆ supportedCredentialTypes

final Set<String> org.keycloak.federation.sssd.SSSDFederationProvider.supportedCredentialTypes = new HashSet<>()
staticprotected

このクラス詳解は次のファイルから抽出されました: