keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.adapters.AuthenticatedActionsHandler クラス
org.keycloak.adapters.AuthenticatedActionsHandler 連携図
Collaboration graph

公開メンバ関数

 AuthenticatedActionsHandler (KeycloakDeployment deployment, OIDCHttpFacade facade)
 
boolean handledRequest ()
 

限定公開メンバ関数

void queryBearerToken ()
 
boolean abortTokenResponse ()
 
boolean corsRequest ()
 

限定公開変数類

KeycloakDeployment deployment
 
OIDCHttpFacade facade
 

非公開メンバ関数

boolean isAuthorized ()
 

静的非公開変数類

static final Logger log = Logger.getLogger(AuthenticatedActionsHandler.class)
 

詳解

Pre-installed actions that must be authenticated

Actions include:

CORS Origin Check and Response headers k_query_bearer_token: Get bearer token from server for Javascripts CORS requests

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ AuthenticatedActionsHandler()

org.keycloak.adapters.AuthenticatedActionsHandler.AuthenticatedActionsHandler ( KeycloakDeployment  deployment,
OIDCHttpFacade  facade 
)
inline
47  {
48  this.deployment = deployment;
49  this.facade = facade;
50  }
KeycloakDeployment deployment
Definition: AuthenticatedActionsHandler.java:44
OIDCHttpFacade facade
Definition: AuthenticatedActionsHandler.java:45

関数詳解

◆ abortTokenResponse()

boolean org.keycloak.adapters.AuthenticatedActionsHandler.abortTokenResponse ( )
inlineprotected
79  {
80  if (facade.getSecurityContext() == null) {
81  log.debugv("Not logged in, sending back 401: {0}",facade.getRequest().getURI());
82  facade.getResponse().sendError(401);
83  facade.getResponse().end();
84  return true;
85  }
86  if (!deployment.isExposeToken()) {
87  facade.getResponse().setStatus(200);
88  facade.getResponse().end();
89  return true;
90  }
91  // Don't allow a CORS request if we're not validating CORS requests.
92  if (!deployment.isCors() && facade.getRequest().getHeader(CorsHeaders.ORIGIN) != null) {
93  facade.getResponse().setStatus(200);
94  facade.getResponse().end();
95  return true;
96  }
97  return false;
98  }
static final Logger log
Definition: AuthenticatedActionsHandler.java:43
KeycloakSecurityContext getSecurityContext()
boolean isExposeToken()
Definition: KeycloakDeployment.java:355
KeycloakDeployment deployment
Definition: AuthenticatedActionsHandler.java:44
boolean isCors()
Definition: KeycloakDeployment.java:315
OIDCHttpFacade facade
Definition: AuthenticatedActionsHandler.java:45

◆ corsRequest()

boolean org.keycloak.adapters.AuthenticatedActionsHandler.corsRequest ( )
inlineprotected
100  {
101  if (!deployment.isCors()) return false;
102  KeycloakSecurityContext securityContext = facade.getSecurityContext();
103  String origin = facade.getRequest().getHeader(CorsHeaders.ORIGIN);
104  String exposeHeaders = deployment.getCorsExposedHeaders();
105 
106  if (deployment.getPolicyEnforcer() != null) {
107  if (exposeHeaders != null) {
108  exposeHeaders += ",";
109  }
110  exposeHeaders += "WWW-Authenticate";
111  }
112 
113  String requestOrigin = UriUtils.getOrigin(facade.getRequest().getURI());
114  log.debugv("Origin: {0} uri: {1}", origin, facade.getRequest().getURI());
115  if (securityContext != null && origin != null && !origin.equals(requestOrigin)) {
116  AccessToken token = securityContext.getToken();
117  Set<String> allowedOrigins = token.getAllowedOrigins();
118  if (log.isDebugEnabled()) {
119  for (String a : allowedOrigins) log.debug(" " + a);
120  }
121  if (allowedOrigins == null || (!allowedOrigins.contains("*") && !allowedOrigins.contains(origin))) {
122  if (allowedOrigins == null) {
123  log.debugv("allowedOrigins was null in token");
124  } else {
125  log.debugv("allowedOrigins did not contain origin");
126 
127  }
128  facade.getResponse().sendError(403);
129  facade.getResponse().end();
130  return true;
131  }
132  log.debugv("returning origin: {0}", origin);
133  facade.getResponse().setStatus(200);
134  facade.getResponse().setHeader(CorsHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
135  facade.getResponse().setHeader(CorsHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
136  if (exposeHeaders != null) {
137  facade.getResponse().setHeader(CorsHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, exposeHeaders);
138  }
139  } else {
140  log.debugv("cors validation not needed as we're not a secure session or origin header was null: {0}", facade.getRequest().getURI());
141  }
142  return false;
143  }
String getCorsExposedHeaders()
Definition: KeycloakDeployment.java:347
static final Logger log
Definition: AuthenticatedActionsHandler.java:43
KeycloakSecurityContext getSecurityContext()
PolicyEnforcer getPolicyEnforcer()
Definition: KeycloakDeployment.java:444
KeycloakDeployment deployment
Definition: AuthenticatedActionsHandler.java:44
boolean isCors()
Definition: KeycloakDeployment.java:315
OIDCHttpFacade facade
Definition: AuthenticatedActionsHandler.java:45

◆ handledRequest()

boolean org.keycloak.adapters.AuthenticatedActionsHandler.handledRequest ( )
inline
52  {
53  log.debugv("AuthenticatedActionsValve.invoke {0}", facade.getRequest().getURI());
54  if (corsRequest()) return true;
55  String requestUri = facade.getRequest().getURI();
56  if (requestUri.endsWith(AdapterConstants.K_QUERY_BEARER_TOKEN)) {
58  return true;
59  }
60  if (!isAuthorized()) {
61  return true;
62  }
63  return false;
64  }
static final Logger log
Definition: AuthenticatedActionsHandler.java:43
void queryBearerToken()
Definition: AuthenticatedActionsHandler.java:66
boolean corsRequest()
Definition: AuthenticatedActionsHandler.java:100
boolean isAuthorized()
Definition: AuthenticatedActionsHandler.java:145
OIDCHttpFacade facade
Definition: AuthenticatedActionsHandler.java:45

◆ isAuthorized()

boolean org.keycloak.adapters.AuthenticatedActionsHandler.isAuthorized ( )
inlineprivate
145  {
146  PolicyEnforcer policyEnforcer = this.deployment.getPolicyEnforcer();
147 
148  if (policyEnforcer == null) {
149  log.debugv("Policy enforcement is disabled.");
150  return true;
151  }
152  try {
153  OIDCHttpFacade facade = (OIDCHttpFacade) this.facade;
154  AuthorizationContext authorizationContext = policyEnforcer.enforce(facade);
155  RefreshableKeycloakSecurityContext session = (RefreshableKeycloakSecurityContext) facade.getSecurityContext();
156 
157  if (session != null) {
158  session.setAuthorizationContext(authorizationContext);
159 
160  return authorizationContext.isGranted();
161  }
162 
163  return true;
164  } catch (Exception e) {
165  throw new RuntimeException("Failed to enforce policy decisions.", e);
166  }
167  }
static final Logger log
Definition: AuthenticatedActionsHandler.java:43
KeycloakSecurityContext getSecurityContext()
PolicyEnforcer getPolicyEnforcer()
Definition: KeycloakDeployment.java:444
KeycloakDeployment deployment
Definition: AuthenticatedActionsHandler.java:44
OIDCHttpFacade facade
Definition: AuthenticatedActionsHandler.java:45

◆ queryBearerToken()

void org.keycloak.adapters.AuthenticatedActionsHandler.queryBearerToken ( )
inlineprotected
66  {
67  log.debugv("queryBearerToken {0}",facade.getRequest().getURI());
68  if (abortTokenResponse()) return;
69  facade.getResponse().setStatus(200);
70  facade.getResponse().setHeader("Content-Type", "text/plain");
71  try {
72  facade.getResponse().getOutputStream().write(facade.getSecurityContext().getTokenString().getBytes());
73  } catch (IOException e) {
74  throw new RuntimeException(e);
75  }
76  facade.getResponse().end();
77  }
static final Logger log
Definition: AuthenticatedActionsHandler.java:43
KeycloakSecurityContext getSecurityContext()
String getTokenString()
Definition: KeycloakSecurityContext.java:60
OIDCHttpFacade facade
Definition: AuthenticatedActionsHandler.java:45
boolean abortTokenResponse()
Definition: AuthenticatedActionsHandler.java:79

メンバ詳解

◆ deployment

KeycloakDeployment org.keycloak.adapters.AuthenticatedActionsHandler.deployment
protected

◆ facade

OIDCHttpFacade org.keycloak.adapters.AuthenticatedActionsHandler.facade
protected

◆ log

final Logger org.keycloak.adapters.AuthenticatedActionsHandler.log = Logger.getLogger(AuthenticatedActionsHandler.class)
staticprivate

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