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

公開メンバ関数

 ElytronHttpFacade (HttpServerRequest request, AdapterDeploymentContext deploymentContext, CallbackHandler handler)
 
Request getRequest ()
 
Response getResponse ()
 
X509Certificate [] getCertificateChain ()
 
KeycloakSecurityContext getSecurityContext ()
 
boolean restoreRequest ()
 
void suspendRequest ()
 
boolean isAuthorized ()
 

関数

void authenticationComplete (ElytronAccount account, boolean storeToken)
 
void authenticationComplete ()
 
void authenticationFailed ()
 
void noAuthenticationInProgress ()
 
void noAuthenticationInProgress (AuthChallenge challenge)
 
void authenticationInProgress ()
 
HttpScope getScope (Scope scope)
 
HttpScope getScope (Scope scope, String id)
 
Collection< String > getScopeIds (Scope scope)
 
AdapterTokenStore getTokenStore ()
 
KeycloakDeployment getDeployment ()
 

静的変数

static final String UNDERTOW_EXCHANGE = ElytronHttpFacade.class.getName() + ".undertow.exchange"
 

非公開メンバ関数

AdapterTokenStore createTokenStore ()
 

非公開変数類

final HttpServerRequest request
 
final CallbackHandler callbackHandler
 
final AdapterTokenStore tokenStore
 
final AdapterDeploymentContext deploymentContext
 
Consumer< HttpServerResponse > responseConsumer
 
ElytronAccount account
 
SecurityIdentity securityIdentity
 
boolean restored
 
final Map< String, String > headers = new HashMap<>()
 

詳解

著者
Pedro Igor

構築子と解体子

◆ ElytronHttpFacade()

org.keycloak.adapters.elytron.ElytronHttpFacade.ElytronHttpFacade ( HttpServerRequest  request,
AdapterDeploymentContext  deploymentContext,
CallbackHandler  handler 
)
inline
78  {
79  this.request = request;
81  this.callbackHandler = handler;
83  this.responseConsumer = response -> {};
84  }
final AdapterDeploymentContext deploymentContext
Definition: ElytronHttpFacade.java:71
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
AdapterTokenStore createTokenStore()
Definition: ElytronHttpFacade.java:153
final CallbackHandler callbackHandler
Definition: ElytronHttpFacade.java:69
final AdapterTokenStore tokenStore
Definition: ElytronHttpFacade.java:70
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

関数詳解

◆ authenticationComplete() [1/2]

void org.keycloak.adapters.elytron.ElytronHttpFacade.authenticationComplete ( ElytronAccount  account,
boolean  storeToken 
)
inlinepackage
86  {
87  this.securityIdentity = SecurityIdentityUtil.authorize(this.callbackHandler, account.getPrincipal());
88 
89  if (securityIdentity != null) {
90  this.account = account;
91  RefreshableKeycloakSecurityContext keycloakSecurityContext = account.getKeycloakSecurityContext();
92  account.setCurrentRequestInfo(keycloakSecurityContext.getDeployment(), this.tokenStore);
93  if (storeToken) {
95  }
96  }
97  }
void setCurrentRequestInfo(KeycloakDeployment deployment, AdapterTokenStore tokenStore)
Definition: ElytronAccount.java:64
SecurityIdentity securityIdentity
Definition: ElytronHttpFacade.java:74
RefreshableKeycloakSecurityContext getKeycloakSecurityContext()
Definition: ElytronAccount.java:48
ElytronAccount account
Definition: ElytronHttpFacade.java:73
final CallbackHandler callbackHandler
Definition: ElytronHttpFacade.java:69
void saveAccountInfo(OidcKeycloakAccount account)
final AdapterTokenStore tokenStore
Definition: ElytronHttpFacade.java:70
Principal getPrincipal()
Definition: ElytronAccount.java:53

◆ authenticationComplete() [2/2]

void org.keycloak.adapters.elytron.ElytronHttpFacade.authenticationComplete ( )
inlinepackage
99  {
100  if (securityIdentity != null) {
101  HttpScope requestScope = request.getScope(Scope.EXCHANGE);
102  RefreshableKeycloakSecurityContext keycloakSecurityContext = account.getKeycloakSecurityContext();
103 
104  requestScope.setAttachment(KeycloakSecurityContext.class.getName(), keycloakSecurityContext);
105 
106  this.request.authenticationComplete(response -> {
107  if (!restored) {
108  responseConsumer.accept(response);
109  }
110  }, () -> ((ElytronTokeStore) tokenStore).logout(true));
111  }
112  }
boolean restored
Definition: ElytronHttpFacade.java:75
SecurityIdentity securityIdentity
Definition: ElytronHttpFacade.java:74
RefreshableKeycloakSecurityContext getKeycloakSecurityContext()
Definition: ElytronAccount.java:48
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
ElytronAccount account
Definition: ElytronHttpFacade.java:73
final AdapterTokenStore tokenStore
Definition: ElytronHttpFacade.java:70
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ authenticationFailed()

void org.keycloak.adapters.elytron.ElytronHttpFacade.authenticationFailed ( )
inlinepackage
114  {
115  this.request.authenticationFailed("Authentication Failed", response -> responseConsumer.accept(response));
116  }
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ authenticationInProgress()

void org.keycloak.adapters.elytron.ElytronHttpFacade.authenticationInProgress ( )
inlinepackage
129  {
130  this.request.authenticationInProgress(response -> responseConsumer.accept(response));
131  }
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ createTokenStore()

AdapterTokenStore org.keycloak.adapters.elytron.ElytronHttpFacade.createTokenStore ( )
inlineprivate
153  {
154  KeycloakDeployment deployment = getDeployment();
155 
156  if (TokenStore.SESSION.equals(deployment.getTokenStore())) {
157  return new ElytronSessionTokenStore(this, this.callbackHandler);
158  } else {
159  return new ElytronCookieTokenStore(this, this.callbackHandler);
160  }
161  }
KeycloakDeployment getDeployment()
Definition: ElytronHttpFacade.java:149
final CallbackHandler callbackHandler
Definition: ElytronHttpFacade.java:69

◆ getCertificateChain()

X509Certificate [] org.keycloak.adapters.elytron.ElytronHttpFacade.getCertificateChain ( )
inline
422  {
423  return new X509Certificate[0];
424  }

◆ getDeployment()

KeycloakDeployment org.keycloak.adapters.elytron.ElytronHttpFacade.getDeployment ( )
inlinepackage
149  {
151  }
KeycloakDeployment resolveDeployment(HttpFacade facade)
Definition: AdapterDeploymentContext.java:86
final AdapterDeploymentContext deploymentContext
Definition: ElytronHttpFacade.java:71

◆ getRequest()

Request org.keycloak.adapters.elytron.ElytronHttpFacade.getRequest ( )
inline
164  {
165  return new Request() {
166  private InputStream inputStream;
167 
168  @Override
169  public String getMethod() {
170  return request.getRequestMethod();
171  }
172 
173  @Override
174  public String getURI() {
175  try {
176  return URLDecoder.decode(request.getRequestURI().toString(), "UTF-8");
177  } catch (UnsupportedEncodingException e) {
178  throw new RuntimeException("Failed to decode request URI", e);
179  }
180  }
181 
182  @Override
183  public String getRelativePath() {
184  return request.getRequestPath();
185  }
186 
187  @Override
188  public boolean isSecure() {
189  return request.getRequestURI().getScheme().equals("https");
190  }
191 
192  @Override
193  public String getFirstParam(String param) {
194  return request.getFirstParameterValue(param);
195  }
196 
197  @Override
198  public String getQueryParamValue(String param) {
199  URI requestURI = request.getRequestURI();
200  String query = requestURI.getQuery();
201  if (query != null) {
202  String[] parameters = query.split("&");
203  for (String parameter : parameters) {
204  String[] keyValue = parameter.split("=");
205  if (keyValue[0].equals(param)) {
206  return keyValue[1];
207  }
208  }
209  }
210  return null;
211  }
212 
213  @Override
214  public Cookie getCookie(final String cookieName) {
215  List<HttpServerCookie> cookies = request.getCookies();
216 
217  if (cookies != null) {
218  for (HttpServerCookie cookie : cookies) {
219  if (cookie.getName().equals(cookieName)) {
220  return new Cookie(cookie.getName(), cookie.getValue(), cookie.getVersion(), cookie.getDomain(), cookie.getPath());
221  }
222  }
223  }
224 
225  return null;
226  }
227 
228  @Override
229  public String getHeader(String name) {
230  return request.getFirstRequestHeaderValue(name);
231  }
232 
233  @Override
234  public List<String> getHeaders(String name) {
235  return request.getRequestHeaderValues(name);
236  }
237 
238  @Override
239  public InputStream getInputStream() {
240  return getInputStream(false);
241  }
242 
243  @Override
244  public InputStream getInputStream(boolean buffered) {
245  if (inputStream != null) {
246  return inputStream;
247  }
248 
249  if (buffered) {
250  return inputStream = new BufferedInputStream(request.getInputStream());
251  }
252 
253  return request.getInputStream();
254  }
255 
256  @Override
257  public String getRemoteAddr() {
258  InetSocketAddress sourceAddress = request.getSourceAddress();
259  if (sourceAddress == null) {
260  return "";
261  }
262  InetAddress address = sourceAddress.getAddress();
263  if (address == null) {
264  // this is unresolved, so we just return the host name not exactly spec, but if the name should be
265  // resolved then a PeerNameResolvingHandler should be used and this is probably better than just
266  // returning null
267  return sourceAddress.getHostString();
268  }
269  return address.getHostAddress();
270  }
271 
272  @Override
273  public void setError(AuthenticationError error) {
274  request.getScope(Scope.EXCHANGE).setAttachment(AuthenticationError.class.getName(), error);
275  }
276 
277  @Override
278  public void setError(LogoutError error) {
279  request.getScope(Scope.EXCHANGE).setAttachment(LogoutError.class.getName(), error);
280  }
281  };
282  }
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ getResponse()

Response org.keycloak.adapters.elytron.ElytronHttpFacade.getResponse ( )
inline
285  {
286  return new Response() {
287 
288  @Override
289  public void setStatus(final int status) {
290  if (status < 200 || status > 300) {
291  responseConsumer = responseConsumer.andThen(response -> response.setStatusCode(status));
292  }
293  }
294 
295  @Override
296  public void addHeader(final String name, final String value) {
297  headers.put(name, value);
298  responseConsumer = responseConsumer.andThen(new Consumer<HttpServerResponse>() {
299  @Override
300  public void accept(HttpServerResponse response) {
301  String latestValue = headers.get(name);
302 
303  if (latestValue.equals(value)) {
304  response.addResponseHeader(name, latestValue);
305  }
306  }
307  });
308  }
309 
310  @Override
311  public void setHeader(String name, String value) {
312  addHeader(name, value);
313  }
314 
315  @Override
316  public void resetCookie(final String name, final String path) {
317  responseConsumer = responseConsumer.andThen(response -> setCookie(name, "", path, null, 0, false, false, response));
318  HttpScope exchangeScope = getScope(Scope.EXCHANGE);
319  ProtectedHttpServerExchange undertowExchange = ProtectedHttpServerExchange.class.cast(exchangeScope.getAttachment(UNDERTOW_EXCHANGE));
320 
321  if (undertowExchange != null) {
322  CookieImpl cookie = new CookieImpl(name, "");
323 
324  cookie.setMaxAge(0);
325  cookie.setPath(path);
326 
327  undertowExchange.getExchange().setResponseCookie(cookie);
328  }
329  }
330 
331  @Override
332  public void setCookie(final String name, final String value, final String path, final String domain, final int maxAge, final boolean secure, final boolean httpOnly) {
333  responseConsumer = responseConsumer.andThen(response -> setCookie(name, value, path, domain, maxAge, secure, httpOnly, response));
334  }
335 
336  private void setCookie(final String name, final String value, final String path, final String domain, final int maxAge, final boolean secure, final boolean httpOnly, HttpServerResponse response) {
337  response.setResponseCookie(new HttpServerCookie() {
338  @Override
339  public String getName() {
340  return name;
341  }
342 
343  @Override
344  public String getValue() {
345  return value;
346  }
347 
348  @Override
349  public String getDomain() {
350  return domain;
351  }
352 
353  @Override
354  public int getMaxAge() {
355  return maxAge;
356  }
357 
358  @Override
359  public String getPath() {
360  return path;
361  }
362 
363  @Override
364  public boolean isSecure() {
365  return secure;
366  }
367 
368  @Override
369  public int getVersion() {
370  return 0;
371  }
372 
373  @Override
374  public boolean isHttpOnly() {
375  return httpOnly;
376  }
377  });
378  }
379 
380  @Override
381  public OutputStream getOutputStream() {
382  ByteArrayOutputStream stream = new ByteArrayOutputStream();
383  responseConsumer = responseConsumer.andThen(new Consumer<HttpServerResponse>() {
384  @Override
385  public void accept(HttpServerResponse httpServerResponse) {
386  try {
387  httpServerResponse.getOutputStream().write(stream.toByteArray());
388  } catch (IOException e) {
389  throw new RuntimeException("Failed to write to response output stream", e);
390  }
391  }
392  });
393  return stream;
394  }
395 
396  @Override
397  public void sendError(int code) {
398  setStatus(code);
399  }
400 
401  @Override
402  public void sendError(final int code, final String message) {
403  responseConsumer = responseConsumer.andThen(response -> {
404  response.setStatusCode(code);
405  response.addResponseHeader("Content-Type", "text/html");
406  try {
407  response.getOutputStream().write(message.getBytes());
408  } catch (IOException e) {
409  throw new RuntimeException(e);
410  }
411  });
412  }
413 
414  @Override
415  public void end() {
416 
417  }
418  };
419  }
HttpScope getScope(Scope scope)
Definition: ElytronHttpFacade.java:133
static final String UNDERTOW_EXCHANGE
Definition: ElytronHttpFacade.java:66
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
final Map< String, String > headers
Definition: ElytronHttpFacade.java:76

◆ getScope() [1/2]

HttpScope org.keycloak.adapters.elytron.ElytronHttpFacade.getScope ( Scope  scope)
inlinepackage
133  {
134  return request.getScope(scope);
135  }
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ getScope() [2/2]

HttpScope org.keycloak.adapters.elytron.ElytronHttpFacade.getScope ( Scope  scope,
String  id 
)
inlinepackage
137  {
138  return request.getScope(scope, id);
139  }
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ getScopeIds()

Collection<String> org.keycloak.adapters.elytron.ElytronHttpFacade.getScopeIds ( Scope  scope)
inlinepackage
141  {
142  return request.getScopeIds(scope);
143  }
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ getSecurityContext()

KeycloakSecurityContext org.keycloak.adapters.elytron.ElytronHttpFacade.getSecurityContext ( )
inline

org.keycloak.adapters.OIDCHttpFacadeを実装しています。

427  {
428  if (account == null) {
429  return null;
430  }
431  return this.account.getKeycloakSecurityContext();
432  }
RefreshableKeycloakSecurityContext getKeycloakSecurityContext()
Definition: ElytronAccount.java:48
ElytronAccount account
Definition: ElytronHttpFacade.java:73

◆ getTokenStore()

AdapterTokenStore org.keycloak.adapters.elytron.ElytronHttpFacade.getTokenStore ( )
inlinepackage
145  {
146  return this.tokenStore;
147  }
final AdapterTokenStore tokenStore
Definition: ElytronHttpFacade.java:70

◆ isAuthorized()

boolean org.keycloak.adapters.elytron.ElytronHttpFacade.isAuthorized ( )
inline
443  {
444  return this.securityIdentity != null;
445  }
SecurityIdentity securityIdentity
Definition: ElytronHttpFacade.java:74

◆ noAuthenticationInProgress() [1/2]

void org.keycloak.adapters.elytron.ElytronHttpFacade.noAuthenticationInProgress ( )
inlinepackage
118  {
119  this.request.noAuthenticationInProgress();
120  }
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ noAuthenticationInProgress() [2/2]

void org.keycloak.adapters.elytron.ElytronHttpFacade.noAuthenticationInProgress ( AuthChallenge  challenge)
inlinepackage
122  {
123  if (challenge != null) {
124  challenge.challenge(this);
125  }
126  this.request.noAuthenticationInProgress(response -> responseConsumer.accept(response));
127  }
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ restoreRequest()

boolean org.keycloak.adapters.elytron.ElytronHttpFacade.restoreRequest ( )
inline
434  {
435  restored = this.request.resumeRequest();
436  return restored;
437  }
boolean restored
Definition: ElytronHttpFacade.java:75
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

◆ suspendRequest()

void org.keycloak.adapters.elytron.ElytronHttpFacade.suspendRequest ( )
inline
439  {
440  responseConsumer = responseConsumer.andThen(httpServerResponse -> request.suspendRequest());
441  }
Consumer< HttpServerResponse > responseConsumer
Definition: ElytronHttpFacade.java:72
final HttpServerRequest request
Definition: ElytronHttpFacade.java:68

メンバ詳解

◆ account

ElytronAccount org.keycloak.adapters.elytron.ElytronHttpFacade.account
private

◆ callbackHandler

final CallbackHandler org.keycloak.adapters.elytron.ElytronHttpFacade.callbackHandler
private

◆ deploymentContext

final AdapterDeploymentContext org.keycloak.adapters.elytron.ElytronHttpFacade.deploymentContext
private

◆ headers

final Map<String, String> org.keycloak.adapters.elytron.ElytronHttpFacade.headers = new HashMap<>()
private

◆ request

final HttpServerRequest org.keycloak.adapters.elytron.ElytronHttpFacade.request
private

◆ responseConsumer

Consumer<HttpServerResponse> org.keycloak.adapters.elytron.ElytronHttpFacade.responseConsumer
private

◆ restored

boolean org.keycloak.adapters.elytron.ElytronHttpFacade.restored
private

◆ securityIdentity

SecurityIdentity org.keycloak.adapters.elytron.ElytronHttpFacade.securityIdentity
private

◆ tokenStore

final AdapterTokenStore org.keycloak.adapters.elytron.ElytronHttpFacade.tokenStore
private

◆ UNDERTOW_EXCHANGE

final String org.keycloak.adapters.elytron.ElytronHttpFacade.UNDERTOW_EXCHANGE = ElytronHttpFacade.class.getName() + ".undertow.exchange"
staticpackage

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