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

クラス

class  EmptyUserSessionManagement
 

公開メンバ関数

void setKeycloakConfigFile (String configFile)
 
String getKeycloakConfigFile ()
 
String getKeycloakConfigResolverClass ()
 
void setKeycloakConfigResolverClass (String keycloakConfigResolverClass)
 
void filter (ContainerRequestContext request) throws IOException
 

限定公開メンバ関数

void attemptStart ()
 
boolean isInitialized ()
 
void start ()
 
Class<? extends KeycloakConfigResolverloadResolverClass ()
 
InputStream loadKeycloakConfigFile ()
 
boolean handlePreauth (JaxrsHttpFacade facade)
 
void bearerAuthentication (JaxrsHttpFacade facade, ContainerRequestContext request, KeycloakDeployment resolvedDeployment)
 
void propagateSecurityContext (JaxrsHttpFacade facade, ContainerRequestContext request, KeycloakDeployment resolvedDeployment, BearerTokenRequestAuthenticator bearer)
 
boolean verifySslFailed (JaxrsHttpFacade facade, KeycloakDeployment deployment)
 
SecurityContext getRequestSecurityContext (ContainerRequestContext request)
 
void handleAuthActions (JaxrsHttpFacade facade, KeycloakDeployment deployment)
 

限定公開変数類

volatile boolean started
 
AdapterDeploymentContext deploymentContext
 
NodesRegistrationManagement nodesRegistrationManagement
 
UserSessionManagement userSessionManagement = new EmptyUserSessionManagement()
 

非公開変数類

String keycloakConfigFile
 
String keycloakConfigResolverClass
 

静的非公開変数類

static final Logger log = Logger.getLogger("" + JaxrsBearerTokenFilterImpl.class)
 

詳解

著者
Bill Burke
バージョン
Revision
1

関数詳解

◆ attemptStart()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.attemptStart ( )
inlineprotected
92  {
93  if (started) {
94  throw new IllegalStateException("Filter already started. Make sure to specify just keycloakConfigResolver or keycloakConfigFile but not both");
95  }
96 
97  if (isInitialized()) {
98  start();
99  } else {
100  log.fine("Not yet initialized");
101  }
102  }
void start()
Definition: JaxrsBearerTokenFilterImpl.java:108
boolean isInitialized()
Definition: JaxrsBearerTokenFilterImpl.java:104
volatile boolean started
Definition: JaxrsBearerTokenFilterImpl.java:64
static final Logger log
Definition: JaxrsBearerTokenFilterImpl.java:60

◆ bearerAuthentication()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.bearerAuthentication ( JaxrsHttpFacade  facade,
ContainerRequestContext  request,
KeycloakDeployment  resolvedDeployment 
)
inlineprotected
208  {
209  BearerTokenRequestAuthenticator authenticator = new BearerTokenRequestAuthenticator(resolvedDeployment);
210  AuthOutcome outcome = authenticator.authenticate(facade);
211 
212  if (outcome == AuthOutcome.NOT_ATTEMPTED && resolvedDeployment.isEnableBasicAuth()) {
213  authenticator = new BasicAuthRequestAuthenticator(resolvedDeployment);
214  outcome = authenticator.authenticate(facade);
215  }
216 
217  if (outcome == AuthOutcome.FAILED || outcome == AuthOutcome.NOT_ATTEMPTED) {
218  AuthChallenge challenge = authenticator.getChallenge();
219  log.fine("Authentication outcome: " + outcome);
220  boolean challengeSent = challenge.challenge(facade);
221  if (!challengeSent) {
222  // Use some default status code
223  facade.getResponse().setStatus(Response.Status.UNAUTHORIZED.getStatusCode());
224  }
225 
226  // Send response now (if not already sent)
227  if (!facade.isResponseFinished()) {
228  facade.getResponse().end();
229  }
230  return;
231  } else {
232  if (verifySslFailed(facade, resolvedDeployment)) {
233  return;
234  }
235  }
236 
237  propagateSecurityContext(facade, request, resolvedDeployment, authenticator);
238  handleAuthActions(facade, resolvedDeployment);
239  }
boolean verifySslFailed(JaxrsHttpFacade facade, KeycloakDeployment deployment)
Definition: JaxrsBearerTokenFilterImpl.java:278
void handleAuthActions(JaxrsHttpFacade facade, KeycloakDeployment deployment)
Definition: JaxrsBearerTokenFilterImpl.java:291
static final Logger log
Definition: JaxrsBearerTokenFilterImpl.java:60
void propagateSecurityContext(JaxrsHttpFacade facade, ContainerRequestContext request, KeycloakDeployment resolvedDeployment, BearerTokenRequestAuthenticator bearer)
Definition: JaxrsBearerTokenFilterImpl.java:241

◆ filter()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.filter ( ContainerRequestContext  request) throws IOException
inline
181  {
182  SecurityContext securityContext = getRequestSecurityContext(request);
183  JaxrsHttpFacade facade = new JaxrsHttpFacade(request, securityContext);
184  if (handlePreauth(facade)) {
185  return;
186  }
187 
188  KeycloakDeployment resolvedDeployment = deploymentContext.resolveDeployment(facade);
189 
190  nodesRegistrationManagement.tryRegister(resolvedDeployment);
191 
192  bearerAuthentication(facade, request, resolvedDeployment);
193  }
KeycloakDeployment resolveDeployment(HttpFacade facade)
Definition: AdapterDeploymentContext.java:86
SecurityContext getRequestSecurityContext(ContainerRequestContext request)
Definition: JaxrsBearerTokenFilterImpl.java:287
void bearerAuthentication(JaxrsHttpFacade facade, ContainerRequestContext request, KeycloakDeployment resolvedDeployment)
Definition: JaxrsBearerTokenFilterImpl.java:208
boolean handlePreauth(JaxrsHttpFacade facade)
Definition: JaxrsBearerTokenFilterImpl.java:195
AdapterDeploymentContext deploymentContext
Definition: JaxrsBearerTokenFilterImpl.java:66
NodesRegistrationManagement nodesRegistrationManagement
Definition: JaxrsBearerTokenFilterImpl.java:69
void tryRegister(final KeycloakDeployment resolvedDeployment)
Definition: NodesRegistrationManagement.java:42

◆ getKeycloakConfigFile()

String org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.getKeycloakConfigFile ( )
inline
77  {
78  return this.keycloakConfigFile;
79  }
String keycloakConfigFile
Definition: JaxrsBearerTokenFilterImpl.java:62

◆ getKeycloakConfigResolverClass()

String org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.getKeycloakConfigResolverClass ( )
inline
81  {
83  }
String keycloakConfigResolverClass
Definition: JaxrsBearerTokenFilterImpl.java:63

◆ getRequestSecurityContext()

SecurityContext org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.getRequestSecurityContext ( ContainerRequestContext  request)
inlineprotected
287  {
288  return request.getSecurityContext();
289  }

◆ handleAuthActions()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.handleAuthActions ( JaxrsHttpFacade  facade,
KeycloakDeployment  deployment 
)
inlineprotected
291  {
292  AuthenticatedActionsHandler authActionsHandler = new AuthenticatedActionsHandler(deployment, facade);
293  if (authActionsHandler.handledRequest()) {
294  // Send response now (if not already sent)
295  if (!facade.isResponseFinished()) {
296  facade.getResponse().end();
297  }
298  }
299  }

◆ handlePreauth()

boolean org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.handlePreauth ( JaxrsHttpFacade  facade)
inlineprotected
195  {
196  PreAuthActionsHandler handler = new PreAuthActionsHandler(userSessionManagement, deploymentContext, facade);
197  if (handler.handleRequest()) {
198  // Send response now (if not already sent)
199  if (!facade.isResponseFinished()) {
200  facade.getResponse().end();
201  }
202  return true;
203  }
204 
205  return false;
206  }
UserSessionManagement userSessionManagement
Definition: JaxrsBearerTokenFilterImpl.java:70
AdapterDeploymentContext deploymentContext
Definition: JaxrsBearerTokenFilterImpl.java:66

◆ isInitialized()

boolean org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.isInitialized ( )
inlineprotected
104  {
105  return this.keycloakConfigFile != null || this.keycloakConfigResolverClass != null;
106  }
String keycloakConfigFile
Definition: JaxrsBearerTokenFilterImpl.java:62
String keycloakConfigResolverClass
Definition: JaxrsBearerTokenFilterImpl.java:63

◆ loadKeycloakConfigFile()

InputStream org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.loadKeycloakConfigFile ( )
inlineprotected
151  {
152  if (keycloakConfigFile.startsWith(GenericConstants.PROTOCOL_CLASSPATH)) {
153  String classPathLocation = keycloakConfigFile.replace(GenericConstants.PROTOCOL_CLASSPATH, "");
154  log.fine("Loading config from classpath on location: " + classPathLocation);
155  // Try current class classloader first
156  InputStream is = getClass().getClassLoader().getResourceAsStream(classPathLocation);
157  if (is == null) {
158  is = Thread.currentThread().getContextClassLoader().getResourceAsStream(classPathLocation);
159  }
160 
161  if (is != null) {
162  return is;
163  } else {
164  throw new RuntimeException("Unable to find config from classpath: " + keycloakConfigFile);
165  }
166  } else {
167  // Fallback to file
168  try {
169  log.fine("Loading config from file: " + keycloakConfigFile);
170  return new FileInputStream(keycloakConfigFile);
171  } catch (FileNotFoundException fnfe) {
172  log.severe("Config not found on " + keycloakConfigFile);
173  throw new RuntimeException(fnfe);
174  }
175  }
176  }
String keycloakConfigFile
Definition: JaxrsBearerTokenFilterImpl.java:62
static final Logger log
Definition: JaxrsBearerTokenFilterImpl.java:60

◆ loadResolverClass()

Class<? extends KeycloakConfigResolver> org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.loadResolverClass ( )
inlineprotected
138  {
139  try {
140  return (Class<? extends KeycloakConfigResolver>)getClass().getClassLoader().loadClass(keycloakConfigResolverClass);
141  } catch (ClassNotFoundException cnfe) {
142  // Fallback to tccl
143  try {
144  return (Class<? extends KeycloakConfigResolver>)Thread.currentThread().getContextClassLoader().loadClass(keycloakConfigResolverClass);
145  } catch (ClassNotFoundException cnfe2) {
146  throw new RuntimeException("Unable to find resolver class: " + keycloakConfigResolverClass);
147  }
148  }
149  }
String keycloakConfigResolverClass
Definition: JaxrsBearerTokenFilterImpl.java:63

◆ propagateSecurityContext()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.propagateSecurityContext ( JaxrsHttpFacade  facade,
ContainerRequestContext  request,
KeycloakDeployment  resolvedDeployment,
BearerTokenRequestAuthenticator  bearer 
)
inlineprotected
241  {
242  RefreshableKeycloakSecurityContext skSession = new RefreshableKeycloakSecurityContext(resolvedDeployment, null, bearer.getTokenString(), bearer.getToken(), null, null, null);
243 
244  // Not needed to do resteasy specifics as KeycloakSecurityContext can be always retrieved from SecurityContext by typecast SecurityContext.getUserPrincipal to KeycloakPrincipal
245  // ResteasyProviderFactory.pushContext(KeycloakSecurityContext.class, skSession);
246 
247  facade.setSecurityContext(skSession);
248  String principalName = AdapterUtils.getPrincipalName(resolvedDeployment, bearer.getToken());
249  final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(principalName, skSession);
250  SecurityContext anonymousSecurityContext = getRequestSecurityContext(request);
251  final boolean isSecure = anonymousSecurityContext.isSecure();
252  final Set<String> roles = AdapterUtils.getRolesFromSecurityContext(skSession);
253 
254  SecurityContext ctx = new SecurityContext() {
255  @Override
256  public Principal getUserPrincipal() {
257  return principal;
258  }
259 
260  @Override
261  public boolean isUserInRole(String role) {
262  return roles.contains(role);
263  }
264 
265  @Override
266  public boolean isSecure() {
267  return isSecure;
268  }
269 
270  @Override
271  public String getAuthenticationScheme() {
272  return "OAUTH_BEARER";
273  }
274  };
275  request.setSecurityContext(ctx);
276  }
SecurityContext getRequestSecurityContext(ContainerRequestContext request)
Definition: JaxrsBearerTokenFilterImpl.java:287

◆ setKeycloakConfigFile()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.setKeycloakConfigFile ( String  configFile)
inline
72  {
73  this.keycloakConfigFile = configFile;
74  attemptStart();
75  }
String keycloakConfigFile
Definition: JaxrsBearerTokenFilterImpl.java:62
void attemptStart()
Definition: JaxrsBearerTokenFilterImpl.java:92

◆ setKeycloakConfigResolverClass()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.setKeycloakConfigResolverClass ( String  keycloakConfigResolverClass)
inline
85  {
87  attemptStart();
88  }
void attemptStart()
Definition: JaxrsBearerTokenFilterImpl.java:92
String keycloakConfigResolverClass
Definition: JaxrsBearerTokenFilterImpl.java:63

◆ start()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.start ( )
inlineprotected
108  {
109  if (started) {
110  throw new IllegalStateException("Filter already started. Make sure to specify just keycloakConfigResolver or keycloakConfigFile but not both");
111  }
112 
113  if (keycloakConfigResolverClass != null) {
114  Class<? extends KeycloakConfigResolver> resolverClass = loadResolverClass();
115 
116  try {
117  KeycloakConfigResolver resolver = resolverClass.newInstance();
118  log.info("Using " + resolver + " to resolve Keycloak configuration on a per-request basis.");
119  this.deploymentContext = new AdapterDeploymentContext(resolver);
120  } catch (Exception e) {
121  throw new RuntimeException("Unable to instantiate resolver " + resolverClass);
122  }
123  } else {
124  if (keycloakConfigFile == null) {
125  throw new IllegalArgumentException("You need to specify either keycloakConfigResolverClass or keycloakConfigFile in configuration");
126  }
127  InputStream is = loadKeycloakConfigFile();
128  KeycloakDeployment kd = KeycloakDeploymentBuilder.build(is);
129  deploymentContext = new AdapterDeploymentContext(kd);
130  log.info("Keycloak is using a per-deployment configuration loaded from: " + keycloakConfigFile);
131  }
132 
133  nodesRegistrationManagement = new NodesRegistrationManagement();
134  started = true;
135  }
String keycloakConfigFile
Definition: JaxrsBearerTokenFilterImpl.java:62
InputStream loadKeycloakConfigFile()
Definition: JaxrsBearerTokenFilterImpl.java:151
Class<? extends KeycloakConfigResolver > loadResolverClass()
Definition: JaxrsBearerTokenFilterImpl.java:138
volatile boolean started
Definition: JaxrsBearerTokenFilterImpl.java:64
AdapterDeploymentContext deploymentContext
Definition: JaxrsBearerTokenFilterImpl.java:66
static final Logger log
Definition: JaxrsBearerTokenFilterImpl.java:60
String keycloakConfigResolverClass
Definition: JaxrsBearerTokenFilterImpl.java:63
NodesRegistrationManagement nodesRegistrationManagement
Definition: JaxrsBearerTokenFilterImpl.java:69

◆ verifySslFailed()

boolean org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.verifySslFailed ( JaxrsHttpFacade  facade,
KeycloakDeployment  deployment 
)
inlineprotected
278  {
279  if (!facade.getRequest().isSecure() && deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr())) {
280  log.warning("SSL is required to authenticate, but request is not secured");
281  facade.getResponse().sendError(403, "SSL required!");
282  return true;
283  }
284  return false;
285  }
static final Logger log
Definition: JaxrsBearerTokenFilterImpl.java:60

メンバ詳解

◆ deploymentContext

AdapterDeploymentContext org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.deploymentContext
protected

◆ keycloakConfigFile

String org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.keycloakConfigFile
private

◆ keycloakConfigResolverClass

String org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.keycloakConfigResolverClass
private

◆ log

final Logger org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.log = Logger.getLogger("" + JaxrsBearerTokenFilterImpl.class)
staticprivate

◆ nodesRegistrationManagement

NodesRegistrationManagement org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.nodesRegistrationManagement
protected

◆ started

volatile boolean org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.started
protected

◆ userSessionManagement

UserSessionManagement org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.userSessionManagement = new EmptyUserSessionManagement()
protected

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