keycloak-service
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.services.managers.UserSessionManager クラス
org.keycloak.services.managers.UserSessionManager 連携図
Collaboration graph

公開メンバ関数

 UserSessionManager (KeycloakSession session)
 
void createOrUpdateOfflineSession (AuthenticatedClientSessionModel clientSession, UserSessionModel userSession)
 
UserSessionModel findOfflineUserSession (RealmModel realm, String userSessionId)
 
Set< ClientModel > findClientsWithOfflineToken (RealmModel realm, UserModel user)
 
List< UserSessionModel > findOfflineSessions (RealmModel realm, UserModel user)
 
boolean revokeOfflineToken (UserModel user, ClientModel client)
 
void revokeOfflineUserSession (UserSessionModel userSession)
 
boolean isOfflineTokenAllowed (ClientSessionContext clientSessionCtx)
 

非公開メンバ関数

UserSessionModel createOfflineUserSession (UserModel user, UserSessionModel userSession)
 
void createOfflineClientSession (UserModel user, AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession)
 
void checkOfflineUserSessionHasClientSessions (RealmModel realm, UserModel user, UserSessionModel userSession)
 

非公開変数類

final KeycloakSession kcSession
 
final UserSessionPersisterProvider persister
 

静的非公開変数類

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

詳解

著者
Marek Posolda

構築子と解体子

◆ UserSessionManager()

org.keycloak.services.managers.UserSessionManager.UserSessionManager ( KeycloakSession  session)
inline
49  {
50  this.kcSession = session;
51  this.persister = session.getProvider(UserSessionPersisterProvider.class);
52  }
final UserSessionPersisterProvider persister
Definition: UserSessionManager.java:47
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

関数詳解

◆ checkOfflineUserSessionHasClientSessions()

void org.keycloak.services.managers.UserSessionManager.checkOfflineUserSessionHasClientSessions ( RealmModel  realm,
UserModel  user,
UserSessionModel  userSession 
)
inlineprivate
164  {
165  // TODO: Might need optimization to prevent loading client sessions from cache
166  if (! userSession.getAuthenticatedClientSessions().isEmpty()) {
167  return;
168  }
169 
170  if (logger.isTraceEnabled()) {
171  logger.tracef("Removing offline userSession for user %s as it doesn't have any client sessions attached. UserSessionID: %s", user.getUsername(), userSession.getId());
172  }
173  kcSession.sessions().removeOfflineUserSession(realm, userSession);
174  persister.removeUserSession(userSession.getId(), true);
175  }
static final Logger logger
Definition: UserSessionManager.java:44
final UserSessionPersisterProvider persister
Definition: UserSessionManager.java:47
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ createOfflineClientSession()

void org.keycloak.services.managers.UserSessionManager.createOfflineClientSession ( UserModel  user,
AuthenticatedClientSessionModel  clientSession,
UserSessionModel  offlineUserSession 
)
inlineprivate
153  {
154  if (logger.isTraceEnabled()) {
155  logger.tracef("Creating new offline token client session. ClientSessionId: '%s', UserSessionID: '%s' , Username: '%s', Client: '%s'" ,
156  clientSession.getId(), offlineUserSession.getId(), user.getUsername(), clientSession.getClient().getClientId());
157  }
158 
159  kcSession.sessions().createOfflineClientSession(clientSession, offlineUserSession);
160  persister.createClientSession(clientSession, true);
161  }
static final Logger logger
Definition: UserSessionManager.java:44
final UserSessionPersisterProvider persister
Definition: UserSessionManager.java:47
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ createOfflineUserSession()

UserSessionModel org.keycloak.services.managers.UserSessionManager.createOfflineUserSession ( UserModel  user,
UserSessionModel  userSession 
)
inlineprivate
143  {
144  if (logger.isTraceEnabled()) {
145  logger.tracef("Creating new offline user session. UserSessionID: '%s' , Username: '%s'", userSession.getId(), user.getUsername());
146  }
147 
148  UserSessionModel offlineUserSession = kcSession.sessions().createOfflineUserSession(userSession);
149  persister.createUserSession(offlineUserSession, true);
150  return offlineUserSession;
151  }
static final Logger logger
Definition: UserSessionManager.java:44
final UserSessionPersisterProvider persister
Definition: UserSessionManager.java:47
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ createOrUpdateOfflineSession()

void org.keycloak.services.managers.UserSessionManager.createOrUpdateOfflineSession ( AuthenticatedClientSessionModel  clientSession,
UserSessionModel  userSession 
)
inline
54  {
55  UserModel user = userSession.getUser();
56 
57  // Create and persist offline userSession if we don't have one
58  UserSessionModel offlineUserSession = kcSession.sessions().getOfflineUserSession(clientSession.getRealm(), userSession.getId());
59  if (offlineUserSession == null) {
60  offlineUserSession = createOfflineUserSession(user, userSession);
61  } else {
62  // update lastSessionRefresh but don't need to persist
63  offlineUserSession.setLastSessionRefresh(Time.currentTime());
64  }
65 
66  // Create and persist clientSession
67  AuthenticatedClientSessionModel offlineClientSession = offlineUserSession.getAuthenticatedClientSessionByClient(clientSession.getClient().getId());
68  if (offlineClientSession == null) {
69  createOfflineClientSession(user, clientSession, offlineUserSession);
70  }
71  }
void createOfflineClientSession(UserModel user, AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession)
Definition: UserSessionManager.java:153
UserSessionModel createOfflineUserSession(UserModel user, UserSessionModel userSession)
Definition: UserSessionManager.java:143
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ findClientsWithOfflineToken()

Set<ClientModel> org.keycloak.services.managers.UserSessionManager.findClientsWithOfflineToken ( RealmModel  realm,
UserModel  user 
)
inline
78  {
79  List<UserSessionModel> userSessions = kcSession.sessions().getOfflineUserSessions(realm, user);
80  Set<ClientModel> clients = new HashSet<>();
81  for (UserSessionModel userSession : userSessions) {
82  Set<String> clientIds = userSession.getAuthenticatedClientSessions().keySet();
83  for (String clientUUID : clientIds) {
84  ClientModel client = realm.getClientById(clientUUID);
85  clients.add(client);
86  }
87  }
88  return clients;
89  }
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ findOfflineSessions()

List<UserSessionModel> org.keycloak.services.managers.UserSessionManager.findOfflineSessions ( RealmModel  realm,
UserModel  user 
)
inline
91  {
92  return kcSession.sessions().getOfflineUserSessions(realm, user);
93  }
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ findOfflineUserSession()

UserSessionModel org.keycloak.services.managers.UserSessionManager.findOfflineUserSession ( RealmModel  realm,
String  userSessionId 
)
inline
74  {
75  return kcSession.sessions().getOfflineUserSession(realm, userSessionId);
76  }
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ isOfflineTokenAllowed()

boolean org.keycloak.services.managers.UserSessionManager.isOfflineTokenAllowed ( ClientSessionContext  clientSessionCtx)
inline
126  {
127  RoleModel offlineAccessRole = clientSessionCtx.getClientSession().getRealm().getRole(Constants.OFFLINE_ACCESS_ROLE);
128  if (offlineAccessRole == null) {
129  ServicesLogger.LOGGER.roleNotInRealm(Constants.OFFLINE_ACCESS_ROLE);
130  return false;
131  }
132 
133  // Check if offline_access is allowed here. Even through composite roles
134  for (RoleModel role : clientSessionCtx.getRoles()) {
135  if (role.hasRole(offlineAccessRole)) {
136  return true;
137  }
138  }
139 
140  return false;
141  }

◆ revokeOfflineToken()

boolean org.keycloak.services.managers.UserSessionManager.revokeOfflineToken ( UserModel  user,
ClientModel  client 
)
inline
95  {
96  RealmModel realm = client.getRealm();
97 
98  List<UserSessionModel> userSessions = kcSession.sessions().getOfflineUserSessions(realm, user);
99  boolean anyRemoved = false;
100  for (UserSessionModel userSession : userSessions) {
101  AuthenticatedClientSessionModel clientSession = userSession.getAuthenticatedClientSessionByClient(client.getId());
102  if (clientSession != null) {
103  if (logger.isTraceEnabled()) {
104  logger.tracef("Removing existing offline token for user '%s' and client '%s' .",
105  user.getUsername(), client.getClientId());
106  }
107 
108  clientSession.detachFromUserSession();
109  persister.removeClientSession(userSession.getId(), client.getId(), true);
110  checkOfflineUserSessionHasClientSessions(realm, user, userSession);
111  anyRemoved = true;
112  }
113  }
114 
115  return anyRemoved;
116  }
static final Logger logger
Definition: UserSessionManager.java:44
void checkOfflineUserSessionHasClientSessions(RealmModel realm, UserModel user, UserSessionModel userSession)
Definition: UserSessionManager.java:164
final UserSessionPersisterProvider persister
Definition: UserSessionManager.java:47
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

◆ revokeOfflineUserSession()

void org.keycloak.services.managers.UserSessionManager.revokeOfflineUserSession ( UserSessionModel  userSession)
inline
118  {
119  if (logger.isTraceEnabled()) {
120  logger.tracef("Removing offline user session '%s' for user '%s' ", userSession.getId(), userSession.getLoginUsername());
121  }
122  kcSession.sessions().removeOfflineUserSession(userSession.getRealm(), userSession);
123  persister.removeUserSession(userSession.getId(), true);
124  }
static final Logger logger
Definition: UserSessionManager.java:44
final UserSessionPersisterProvider persister
Definition: UserSessionManager.java:47
final KeycloakSession kcSession
Definition: UserSessionManager.java:46

メンバ詳解

◆ kcSession

final KeycloakSession org.keycloak.services.managers.UserSessionManager.kcSession
private

◆ logger

final Logger org.keycloak.services.managers.UserSessionManager.logger = Logger.getLogger(UserSessionManager.class)
staticprivate

◆ persister

final UserSessionPersisterProvider org.keycloak.services.managers.UserSessionManager.persister
private

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