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

公開メンバ関数

 RefreshableKeycloakSecurityContext ()
 
 RefreshableKeycloakSecurityContext (KeycloakDeployment deployment, AdapterTokenStore tokenStore, String tokenString, AccessToken token, String idTokenString, IDToken idToken, String refreshToken)
 
AccessToken getToken ()
 
String getTokenString ()
 
String getRefreshToken ()
 
void logout (KeycloakDeployment deployment)
 
boolean isActive ()
 
boolean isTokenTimeToLiveSufficient (AccessToken token)
 
KeycloakDeployment getDeployment ()
 
void setCurrentRequestInfo (KeycloakDeployment deployment, AdapterTokenStore tokenStore)
 
boolean refreshExpiredToken (boolean checkActive)
 
void setAuthorizationContext (AuthorizationContext authorizationContext)
 
AuthorizationContext getAuthorizationContext ()
 
IDToken getIdToken ()
 
String getIdTokenString ()
 
String getRealm ()
 

限定公開変数類

transient KeycloakDeployment deployment
 
transient AdapterTokenStore tokenStore
 
String refreshToken
 
String tokenString
 
String idTokenString
 
transient AccessToken token
 
transient IDToken idToken
 
transient AuthorizationContext authorizationContext
 

静的限定公開変数類

static Logger log = Logger.getLogger(RefreshableKeycloakSecurityContext.class)
 

関数

private< T > T parseToken (String encoded, Class< T > clazz) throws IOException
 

詳解

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ RefreshableKeycloakSecurityContext() [1/2]

org.keycloak.adapters.RefreshableKeycloakSecurityContext.RefreshableKeycloakSecurityContext ( )
inline
44  {
45  }

◆ RefreshableKeycloakSecurityContext() [2/2]

org.keycloak.adapters.RefreshableKeycloakSecurityContext.RefreshableKeycloakSecurityContext ( KeycloakDeployment  deployment,
AdapterTokenStore  tokenStore,
String  tokenString,
AccessToken  token,
String  idTokenString,
IDToken  idToken,
String  refreshToken 
)
inline
47  {
49  this.deployment = deployment;
50  this.tokenStore = tokenStore;
52  }
transient AdapterTokenStore tokenStore
Definition: RefreshableKeycloakSecurityContext.java:41
String idTokenString
Definition: KeycloakSecurityContext.java:39
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40
transient AccessToken token
Definition: KeycloakSecurityContext.java:42
String tokenString
Definition: KeycloakSecurityContext.java:38
transient IDToken idToken
Definition: KeycloakSecurityContext.java:43
String refreshToken
Definition: RefreshableKeycloakSecurityContext.java:42

関数詳解

◆ getAuthorizationContext()

AuthorizationContext org.keycloak.KeycloakSecurityContext.getAuthorizationContext ( )
inlineinherited
64  {
65  return authorizationContext;
66  }
transient AuthorizationContext authorizationContext
Definition: KeycloakSecurityContext.java:44

◆ getDeployment()

KeycloakDeployment org.keycloak.adapters.RefreshableKeycloakSecurityContext.getDeployment ( )
inline
86  {
87  return deployment;
88  }
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40

◆ getIdToken()

IDToken org.keycloak.KeycloakSecurityContext.getIdToken ( )
inlineinherited
68  {
69  return idToken;
70  }
transient IDToken idToken
Definition: KeycloakSecurityContext.java:43

◆ getIdTokenString()

String org.keycloak.KeycloakSecurityContext.getIdTokenString ( )
inlineinherited
72  {
73  return idTokenString;
74  }
String idTokenString
Definition: KeycloakSecurityContext.java:39

◆ getRealm()

String org.keycloak.KeycloakSecurityContext.getRealm ( )
inlineinherited
76  {
77  // Assumption that issuer contains realm name
78  return token.getIssuer().substring(token.getIssuer().lastIndexOf('/') + 1);
79  }
transient AccessToken token
Definition: KeycloakSecurityContext.java:42
String getIssuer()
Definition: JsonWebToken.java:133

◆ getRefreshToken()

String org.keycloak.adapters.RefreshableKeycloakSecurityContext.getRefreshToken ( )
inline
66  {
67  return refreshToken;
68  }
String refreshToken
Definition: RefreshableKeycloakSecurityContext.java:42

◆ getToken()

AccessToken org.keycloak.adapters.RefreshableKeycloakSecurityContext.getToken ( )
inline
55  {
56  refreshExpiredToken(true);
57  return super.getToken();
58  }
boolean refreshExpiredToken(boolean checkActive)
Definition: RefreshableKeycloakSecurityContext.java:99

◆ getTokenString()

String org.keycloak.adapters.RefreshableKeycloakSecurityContext.getTokenString ( )
inline
61  {
62  refreshExpiredToken(true);
63  return super.getTokenString();
64  }
boolean refreshExpiredToken(boolean checkActive)
Definition: RefreshableKeycloakSecurityContext.java:99

◆ isActive()

boolean org.keycloak.adapters.RefreshableKeycloakSecurityContext.isActive ( )
inline
78  {
79  return token != null && this.token.isActive() && deployment!=null && this.token.getIssuedAt() > deployment.getNotBefore();
80  }
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40
transient AccessToken token
Definition: KeycloakSecurityContext.java:42
boolean isActive()
Definition: JsonWebToken.java:105
int getNotBefore()
Definition: KeycloakDeployment.java:363
int getIssuedAt()
Definition: JsonWebToken.java:114

◆ isTokenTimeToLiveSufficient()

boolean org.keycloak.adapters.RefreshableKeycloakSecurityContext.isTokenTimeToLiveSufficient ( AccessToken  token)
inline
82  {
83  return token != null && (token.getExpiration() - this.deployment.getTokenMinimumTimeToLive()) > Time.currentTime();
84  }
int getTokenMinimumTimeToLive()
Definition: KeycloakDeployment.java:416
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40
int getExpiration()
Definition: JsonWebToken.java:71
transient AccessToken token
Definition: KeycloakSecurityContext.java:42

◆ logout()

void org.keycloak.adapters.RefreshableKeycloakSecurityContext.logout ( KeycloakDeployment  deployment)
inline
70  {
71  try {
72  ServerRequest.invokeLogout(deployment, refreshToken);
73  } catch (Exception e) {
74  log.error("failed to invoke remote logout", e);
75  }
76  }
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40
static Logger log
Definition: RefreshableKeycloakSecurityContext.java:38
String refreshToken
Definition: RefreshableKeycloakSecurityContext.java:42

◆ parseToken()

private<T> T org.keycloak.KeycloakSecurityContext.parseToken ( String  encoded,
Class< T >  clazz 
) throws IOException
inlinepackageinherited
95  {
96  if (encoded == null)
97  return null;
98 
99  String[] parts = encoded.split("\\.");
100  if (parts.length < 2 || parts.length > 3) throw new IllegalArgumentException("Parsing error");
101 
102  byte[] bytes = Base64Url.decode(parts[1]);
103  return JsonSerialization.readValue(bytes, clazz);
104  }

◆ refreshExpiredToken()

boolean org.keycloak.adapters.RefreshableKeycloakSecurityContext.refreshExpiredToken ( boolean  checkActive)
inline
引数
checkActiveif true, then we won't send refresh request if current accessToken is still active.
戻り値
true if accessToken is active or was successfully refreshed
99  {
100  if (checkActive) {
101  if (log.isTraceEnabled()) {
102  log.trace("checking whether to refresh.");
103  }
104  if (isActive() && isTokenTimeToLiveSufficient(this.token)) return true;
105  }
106 
107  if (this.deployment == null || refreshToken == null) return false; // Might be serialized in HttpSession?
108 
109  if (!this.getRealm().equals(this.deployment.getRealm())) {
110  // this should not happen, but let's check it anyway
111  return false;
112  }
113 
114  if (log.isTraceEnabled()) {
115  log.trace("Doing refresh");
116  }
117  AccessTokenResponse response = null;
118  try {
119  response = ServerRequest.invokeRefresh(deployment, refreshToken);
120  } catch (IOException e) {
121  log.error("Refresh token failure", e);
122  return false;
123  } catch (ServerRequest.HttpFailure httpFailure) {
124  log.error("Refresh token failure status: " + httpFailure.getStatus() + " " + httpFailure.getError());
125  return false;
126  }
127  if (log.isTraceEnabled()) {
128  log.trace("received refresh response");
129  }
130  String tokenString = response.getToken();
131  AccessToken token = null;
132  try {
133  token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
134  log.debug("Token Verification succeeded!");
135  } catch (VerificationException e) {
136  log.error("failed verification of token");
137  return false;
138  }
139 
140  // If the TTL is greater-or-equal to the expire time on the refreshed token, have to abort or go into an infinite refresh loop
141  if (!isTokenTimeToLiveSufficient(token)) {
142  log.error("failed to refresh the token with a longer time-to-live than the minimum");
143  return false;
144  }
145 
146  if (response.getNotBeforePolicy() > deployment.getNotBefore()) {
147  deployment.updateNotBefore(response.getNotBeforePolicy());
148  }
149 
150  this.token = token;
151  if (response.getRefreshToken() != null) {
152  if (log.isTraceEnabled()) {
153  log.trace("Setup new refresh token to the security context");
154  }
155  this.refreshToken = response.getRefreshToken();
156  }
157  this.tokenString = tokenString;
158  if (tokenStore != null) {
160  }
161  return true;
162  }
transient AdapterTokenStore tokenStore
Definition: RefreshableKeycloakSecurityContext.java:41
String getRealm()
Definition: KeycloakDeployment.java:111
boolean isActive()
Definition: RefreshableKeycloakSecurityContext.java:78
boolean isTokenTimeToLiveSufficient(AccessToken token)
Definition: RefreshableKeycloakSecurityContext.java:82
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40
static Logger log
Definition: RefreshableKeycloakSecurityContext.java:38
transient AccessToken token
Definition: KeycloakSecurityContext.java:42
String tokenString
Definition: KeycloakSecurityContext.java:38
void updateNotBefore(int notBefore)
Definition: KeycloakDeployment.java:371
String refreshToken
Definition: RefreshableKeycloakSecurityContext.java:42
String getRealm()
Definition: KeycloakSecurityContext.java:76
int getNotBefore()
Definition: KeycloakDeployment.java:363
void refreshCallback(RefreshableKeycloakSecurityContext securityContext)

◆ setAuthorizationContext()

void org.keycloak.adapters.RefreshableKeycloakSecurityContext.setAuthorizationContext ( AuthorizationContext  authorizationContext)
inline
164  {
166  }
transient AuthorizationContext authorizationContext
Definition: KeycloakSecurityContext.java:44

◆ setCurrentRequestInfo()

void org.keycloak.adapters.RefreshableKeycloakSecurityContext.setCurrentRequestInfo ( KeycloakDeployment  deployment,
AdapterTokenStore  tokenStore 
)
inline
90  {
91  this.deployment = deployment;
92  this.tokenStore = tokenStore;
93  }
transient AdapterTokenStore tokenStore
Definition: RefreshableKeycloakSecurityContext.java:41
transient KeycloakDeployment deployment
Definition: RefreshableKeycloakSecurityContext.java:40

メンバ詳解

◆ authorizationContext

transient AuthorizationContext org.keycloak.KeycloakSecurityContext.authorizationContext
protectedinherited

◆ deployment

transient KeycloakDeployment org.keycloak.adapters.RefreshableKeycloakSecurityContext.deployment
protected

◆ idToken

transient IDToken org.keycloak.KeycloakSecurityContext.idToken
protectedinherited

◆ idTokenString

String org.keycloak.KeycloakSecurityContext.idTokenString
protectedinherited

◆ log

Logger org.keycloak.adapters.RefreshableKeycloakSecurityContext.log = Logger.getLogger(RefreshableKeycloakSecurityContext.class)
staticprotected

◆ refreshToken

String org.keycloak.adapters.RefreshableKeycloakSecurityContext.refreshToken
protected

◆ token

transient AccessToken org.keycloak.KeycloakSecurityContext.token
protectedinherited

◆ tokenStore

transient AdapterTokenStore org.keycloak.adapters.RefreshableKeycloakSecurityContext.tokenStore
protected

◆ tokenString

String org.keycloak.KeycloakSecurityContext.tokenString
protectedinherited

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