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

公開メンバ関数

BundleContext getBundleContext ()
 
void setBundleContext (BundleContext bundleContext)
 
void setKeycloakConfigFile (String configFile)
 
String getKeycloakConfigFile ()
 
String getKeycloakConfigResolverClass ()
 
void setKeycloakConfigResolverClass (String keycloakConfigResolverClass)
 
void filter (ContainerRequestContext request) throws IOException
 

限定公開メンバ関数

boolean isInitialized ()
 
Class<? extends KeycloakConfigResolverloadResolverClass ()
 
InputStream loadKeycloakConfigFile ()
 
void attemptStart ()
 
void start ()
 
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()
 

非公開変数類

BundleContext bundleContext
 

静的非公開変数類

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

詳解

Variant of JaxrsBearerTokenFilter, which can be used to properly use resources from current osgi bundle

著者
Marek Posolda

関数詳解

◆ attemptStart()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.attemptStart ( )
inlineprotectedinherited
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 
)
inlineprotectedinherited
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
inlineinherited
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

◆ getBundleContext()

BundleContext org.keycloak.jaxrs.OsgiJaxrsBearerTokenFilterImpl.getBundleContext ( )
inline
45  {
46  return bundleContext;
47  }
BundleContext bundleContext
Definition: OsgiJaxrsBearerTokenFilterImpl.java:43

◆ getKeycloakConfigFile()

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

◆ getKeycloakConfigResolverClass()

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

◆ getRequestSecurityContext()

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

◆ handleAuthActions()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.handleAuthActions ( JaxrsHttpFacade  facade,
KeycloakDeployment  deployment 
)
inlineprotectedinherited
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)
inlineprotectedinherited
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.OsgiJaxrsBearerTokenFilterImpl.isInitialized ( )
inlineprotected
55  {
56  return super.isInitialized() && bundleContext != null;
57  }
BundleContext bundleContext
Definition: OsgiJaxrsBearerTokenFilterImpl.java:43

◆ loadKeycloakConfigFile()

InputStream org.keycloak.jaxrs.OsgiJaxrsBearerTokenFilterImpl.loadKeycloakConfigFile ( )
inlineprotected
71  {
73  if (keycloakConfigFile.startsWith(GenericConstants.PROTOCOL_CLASSPATH)) {
74 
75  // Load from classpath of current bundle
76  String classPathLocation = keycloakConfigFile.replace(GenericConstants.PROTOCOL_CLASSPATH, "");
77  log.fine("Loading config from classpath on location: " + classPathLocation);
78 
79  URL cfgUrl = bundleContext.getBundle().getResource(classPathLocation);
80  if (cfgUrl == null) {
81  log.warning("Not able to find configFile from bundleContext. Fallback to current classloader");
82  return super.loadKeycloakConfigFile();
83  }
84 
85  try {
86  return cfgUrl.openStream();
87  } catch (IOException ioe) {
88  throw new RuntimeException(ioe);
89  }
90  } else {
91  return super.loadKeycloakConfigFile();
92  }
93  }
String keycloakConfigFile
Definition: JaxrsBearerTokenFilterImpl.java:62
String getKeycloakConfigFile()
Definition: JaxrsBearerTokenFilterImpl.java:77
static final Logger log
Definition: OsgiJaxrsBearerTokenFilterImpl.java:41
BundleContext bundleContext
Definition: OsgiJaxrsBearerTokenFilterImpl.java:43

◆ loadResolverClass()

Class<? extends KeycloakConfigResolver> org.keycloak.jaxrs.OsgiJaxrsBearerTokenFilterImpl.loadResolverClass ( )
inlineprotected
60  {
61  String resolverClass = getKeycloakConfigResolverClass();
62  try {
63  return (Class<? extends KeycloakConfigResolver>) bundleContext.getBundle().loadClass(resolverClass);
64  } catch (ClassNotFoundException cnfe) {
65  log.warning("Not able to find class from bundleContext. Fallback to current classloader");
66  return super.loadResolverClass();
67  }
68  }
String getKeycloakConfigResolverClass()
Definition: JaxrsBearerTokenFilterImpl.java:81
static final Logger log
Definition: OsgiJaxrsBearerTokenFilterImpl.java:41
BundleContext bundleContext
Definition: OsgiJaxrsBearerTokenFilterImpl.java:43

◆ propagateSecurityContext()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.propagateSecurityContext ( JaxrsHttpFacade  facade,
ContainerRequestContext  request,
KeycloakDeployment  resolvedDeployment,
BearerTokenRequestAuthenticator  bearer 
)
inlineprotectedinherited
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

◆ setBundleContext()

void org.keycloak.jaxrs.OsgiJaxrsBearerTokenFilterImpl.setBundleContext ( BundleContext  bundleContext)
inline
49  {
51  attemptStart();
52  }
void attemptStart()
Definition: JaxrsBearerTokenFilterImpl.java:92
BundleContext bundleContext
Definition: OsgiJaxrsBearerTokenFilterImpl.java:43

◆ setKeycloakConfigFile()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.setKeycloakConfigFile ( String  configFile)
inlineinherited
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)
inlineinherited
85  {
87  attemptStart();
88  }
void attemptStart()
Definition: JaxrsBearerTokenFilterImpl.java:92
String keycloakConfigResolverClass
Definition: JaxrsBearerTokenFilterImpl.java:63

◆ start()

void org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.start ( )
inlineprotectedinherited
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 
)
inlineprotectedinherited
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

メンバ詳解

◆ bundleContext

BundleContext org.keycloak.jaxrs.OsgiJaxrsBearerTokenFilterImpl.bundleContext
private

◆ deploymentContext

AdapterDeploymentContext org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.deploymentContext
protectedinherited

◆ log

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

◆ nodesRegistrationManagement

NodesRegistrationManagement org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl.nodesRegistrationManagement
protectedinherited

◆ started

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

◆ userSessionManagement

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

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