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

公開メンバ関数

 ServletRequestAuthenticator (HttpFacade facade, KeycloakDeployment deployment, int sslRedirectPort, SecurityContext securityContext, HttpServerExchange exchange, AdapterTokenStore tokenStore)
 
AuthChallenge getChallenge ()
 
AuthOutcome authenticate ()
 

限定公開メンバ関数

OAuthRequestAuthenticator createOAuthAuthenticator ()
 
void propagateKeycloakContext (KeycloakUndertowAccount account)
 
KeycloakUndertowAccount createAccount (KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal)
 
String changeHttpSessionId (boolean create)
 
String getHttpSessionId (boolean create)
 
HttpSession getSession (boolean create)
 
void completeOAuthAuthentication (KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal)
 
void completeBearerAuthentication (KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal, String method)
 
boolean verifySSL ()
 
boolean isAutodetectedBearerOnly (HttpFacade.Request request)
 
BearerTokenRequestAuthenticator createBearerTokenAuthenticator ()
 
BasicAuthRequestAuthenticator createBasicAuthAuthenticator ()
 
QueryParamterTokenRequestAuthenticator createQueryParamterTokenRequestAuthenticator ()
 
void completeAuthentication (OAuthRequestAuthenticator oauth)
 
void completeAuthentication (BearerTokenRequestAuthenticator bearer, String method)
 

限定公開変数類

SecurityContext securityContext
 
HttpServerExchange exchange
 
HttpFacade facade
 
AuthChallenge challenge
 
KeycloakDeployment deployment
 
AdapterTokenStore tokenStore
 
int sslRedirectPort
 

静的限定公開変数類

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

詳解

著者
Bill Burke
Stan Silvert ssilv.nosp@m.ert@.nosp@m.redha.nosp@m.t.co.nosp@m.m (C) 2014 Red Hat Inc.
バージョン
Revision
1

構築子と解体子

◆ ServletRequestAuthenticator()

org.keycloak.adapters.undertow.ServletRequestAuthenticator.ServletRequestAuthenticator ( HttpFacade  facade,
KeycloakDeployment  deployment,
int  sslRedirectPort,
SecurityContext  securityContext,
HttpServerExchange  exchange,
AdapterTokenStore  tokenStore 
)
inline
43  {
45  }
HttpFacade facade
Definition: RequestAuthenticator.java:35
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
int sslRedirectPort
Definition: RequestAuthenticator.java:40
SecurityContext securityContext
Definition: AbstractUndertowRequestAuthenticator.java:37
HttpServerExchange exchange
Definition: AbstractUndertowRequestAuthenticator.java:38
AdapterTokenStore tokenStore
Definition: RequestAuthenticator.java:39

関数詳解

◆ authenticate()

AuthOutcome org.keycloak.adapters.RequestAuthenticator.authenticate ( )
inlineinherited
58  {
59  if (log.isTraceEnabled()) {
60  log.trace("--> authenticate()");
61  }
62 
63  BearerTokenRequestAuthenticator bearer = createBearerTokenAuthenticator();
64  if (log.isTraceEnabled()) {
65  log.trace("try bearer");
66  }
67 
68  AuthOutcome outcome = bearer.authenticate(facade);
69  if (outcome == AuthOutcome.FAILED) {
70  challenge = bearer.getChallenge();
71  log.debug("Bearer FAILED");
72  return AuthOutcome.FAILED;
73  } else if (outcome == AuthOutcome.AUTHENTICATED) {
74  if (verifySSL()) return AuthOutcome.FAILED;
75  completeAuthentication(bearer, "KEYCLOAK");
76  log.debug("Bearer AUTHENTICATED");
77  return AuthOutcome.AUTHENTICATED;
78  }
79 
80  QueryParamterTokenRequestAuthenticator queryParamAuth = createQueryParamterTokenRequestAuthenticator();
81  if (log.isTraceEnabled()) {
82  log.trace("try query paramter auth");
83  }
84 
85  outcome = queryParamAuth.authenticate(facade);
86  if (outcome == AuthOutcome.FAILED) {
87  challenge = queryParamAuth.getChallenge();
88  log.debug("QueryParamAuth auth FAILED");
89  return AuthOutcome.FAILED;
90  } else if (outcome == AuthOutcome.AUTHENTICATED) {
91  if (verifySSL()) return AuthOutcome.FAILED;
92  log.debug("QueryParamAuth AUTHENTICATED");
93  completeAuthentication(queryParamAuth, "KEYCLOAK");
94  return AuthOutcome.AUTHENTICATED;
95  }
96 
98  BasicAuthRequestAuthenticator basicAuth = createBasicAuthAuthenticator();
99  if (log.isTraceEnabled()) {
100  log.trace("try basic auth");
101  }
102 
103  outcome = basicAuth.authenticate(facade);
104  if (outcome == AuthOutcome.FAILED) {
105  challenge = basicAuth.getChallenge();
106  log.debug("BasicAuth FAILED");
107  return AuthOutcome.FAILED;
108  } else if (outcome == AuthOutcome.AUTHENTICATED) {
109  if (verifySSL()) return AuthOutcome.FAILED;
110  log.debug("BasicAuth AUTHENTICATED");
111  completeAuthentication(basicAuth, "BASIC");
112  return AuthOutcome.AUTHENTICATED;
113  }
114  }
115 
116  if (deployment.isBearerOnly()) {
117  challenge = bearer.getChallenge();
118  log.debug("NOT_ATTEMPTED: bearer only");
119  return AuthOutcome.NOT_ATTEMPTED;
120  }
121 
122  if (isAutodetectedBearerOnly(facade.getRequest())) {
123  challenge = bearer.getChallenge();
124  log.debug("NOT_ATTEMPTED: Treating as bearer only");
125  return AuthOutcome.NOT_ATTEMPTED;
126  }
127 
128  if (log.isTraceEnabled()) {
129  log.trace("try oauth");
130  }
131 
132  if (tokenStore.isCached(this)) {
133  if (verifySSL()) return AuthOutcome.FAILED;
134  log.debug("AUTHENTICATED: was cached");
135  return AuthOutcome.AUTHENTICATED;
136  }
137 
138  OAuthRequestAuthenticator oauth = createOAuthAuthenticator();
139  outcome = oauth.authenticate();
140  if (outcome == AuthOutcome.FAILED) {
141  challenge = oauth.getChallenge();
142  return AuthOutcome.FAILED;
143  } else if (outcome == AuthOutcome.NOT_ATTEMPTED) {
144  challenge = oauth.getChallenge();
145  return AuthOutcome.NOT_ATTEMPTED;
146 
147  }
148 
149  if (verifySSL()) return AuthOutcome.FAILED;
150 
151  completeAuthentication(oauth);
152 
153  // redirect to strip out access code and state query parameters
154  facade.getResponse().setHeader("Location", oauth.getStrippedOauthParametersRequestUri());
155  facade.getResponse().setStatus(302);
156  facade.getResponse().end();
157 
158  log.debug("AUTHENTICATED");
159  return AuthOutcome.AUTHENTICATED;
160  }
boolean isAutodetectedBearerOnly(HttpFacade.Request request)
Definition: RequestAuthenticator.java:171
BasicAuthRequestAuthenticator createBasicAuthAuthenticator()
Definition: RequestAuthenticator.java:207
HttpFacade facade
Definition: RequestAuthenticator.java:35
QueryParamterTokenRequestAuthenticator createQueryParamterTokenRequestAuthenticator()
Definition: RequestAuthenticator.java:211
BearerTokenRequestAuthenticator createBearerTokenAuthenticator()
Definition: RequestAuthenticator.java:203
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
boolean isCached(RequestAuthenticator authenticator)
void completeAuthentication(OAuthRequestAuthenticator oauth)
Definition: RequestAuthenticator.java:215
abstract OAuthRequestAuthenticator createOAuthAuthenticator()
AuthChallenge challenge
Definition: RequestAuthenticator.java:36
AdapterTokenStore tokenStore
Definition: RequestAuthenticator.java:39
static Logger log
Definition: RequestAuthenticator.java:34
boolean isEnableBasicAuth()
Definition: KeycloakDeployment.java:227
boolean verifySSL()
Definition: RequestAuthenticator.java:162
boolean isBearerOnly()
Definition: KeycloakDeployment.java:211

◆ changeHttpSessionId()

String org.keycloak.adapters.undertow.ServletRequestAuthenticator.changeHttpSessionId ( boolean  create)
inlineprotected
66  {
67  if (!deployment.isTurnOffChangeSessionIdOnLogin()) return ChangeSessionId.changeSessionId(exchange, create);
68  else return getHttpSessionId(create);
69  }
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
boolean isTurnOffChangeSessionIdOnLogin()
Definition: KeycloakDeployment.java:408
HttpServerExchange exchange
Definition: AbstractUndertowRequestAuthenticator.java:38
String getHttpSessionId(boolean create)
Definition: ServletRequestAuthenticator.java:71

◆ completeAuthentication() [1/2]

void org.keycloak.adapters.RequestAuthenticator.completeAuthentication ( OAuthRequestAuthenticator  oauth)
inlineprotectedinherited
215  {
216  RefreshableKeycloakSecurityContext session = new RefreshableKeycloakSecurityContext(deployment, tokenStore, oauth.getTokenString(), oauth.getToken(), oauth.getIdTokenString(), oauth.getIdToken(), oauth.getRefreshToken());
217  final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(AdapterUtils.getPrincipalName(deployment, oauth.getToken()), session);
218  completeOAuthAuthentication(principal);
219  log.debugv("User ''{0}'' invoking ''{1}'' on client ''{2}''", principal.getName(), facade.getRequest().getURI(), deployment.getResourceName());
220  }
String getResourceName()
Definition: KeycloakDeployment.java:107
HttpFacade facade
Definition: RequestAuthenticator.java:35
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
abstract void completeOAuthAuthentication(KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal)
AdapterTokenStore tokenStore
Definition: RequestAuthenticator.java:39
static Logger log
Definition: RequestAuthenticator.java:34

◆ completeAuthentication() [2/2]

void org.keycloak.adapters.RequestAuthenticator.completeAuthentication ( BearerTokenRequestAuthenticator  bearer,
String  method 
)
inlineprotectedinherited
234  {
235  RefreshableKeycloakSecurityContext session = new RefreshableKeycloakSecurityContext(deployment, null, bearer.getTokenString(), bearer.getToken(), null, null, null);
236  final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(AdapterUtils.getPrincipalName(deployment, bearer.getToken()), session);
237  completeBearerAuthentication(principal, method);
238  log.debugv("User ''{0}'' invoking ''{1}'' on client ''{2}''", principal.getName(), facade.getRequest().getURI(), deployment.getResourceName());
239  }
String getResourceName()
Definition: KeycloakDeployment.java:107
HttpFacade facade
Definition: RequestAuthenticator.java:35
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
abstract void completeBearerAuthentication(KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal, String method)
static Logger log
Definition: RequestAuthenticator.java:34

◆ completeBearerAuthentication()

void org.keycloak.adapters.undertow.AbstractUndertowRequestAuthenticator.completeBearerAuthentication ( KeycloakPrincipal< RefreshableKeycloakSecurityContext principal,
String  method 
)
inlineprotectedinherited
67  {
68  KeycloakUndertowAccount account = createAccount(principal);
69  securityContext.authenticationComplete(account, method, false);
70  propagateKeycloakContext(account);
71  }
void propagateKeycloakContext(KeycloakUndertowAccount account)
Definition: AbstractUndertowRequestAuthenticator.java:49
SecurityContext securityContext
Definition: AbstractUndertowRequestAuthenticator.java:37
abstract KeycloakUndertowAccount createAccount(KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal)

◆ completeOAuthAuthentication()

void org.keycloak.adapters.undertow.AbstractUndertowRequestAuthenticator.completeOAuthAuthentication ( KeycloakPrincipal< RefreshableKeycloakSecurityContext principal)
inlineprotectedinherited
59  {
60  KeycloakUndertowAccount account = createAccount(principal);
61  securityContext.authenticationComplete(account, "KEYCLOAK", false);
62  propagateKeycloakContext(account);
63  tokenStore.saveAccountInfo(account);
64  }
void propagateKeycloakContext(KeycloakUndertowAccount account)
Definition: AbstractUndertowRequestAuthenticator.java:49
void saveAccountInfo(OidcKeycloakAccount account)
SecurityContext securityContext
Definition: AbstractUndertowRequestAuthenticator.java:37
AdapterTokenStore tokenStore
Definition: RequestAuthenticator.java:39
abstract KeycloakUndertowAccount createAccount(KeycloakPrincipal< RefreshableKeycloakSecurityContext > principal)

◆ createAccount()

KeycloakUndertowAccount org.keycloak.adapters.undertow.ServletRequestAuthenticator.createAccount ( KeycloakPrincipal< RefreshableKeycloakSecurityContext principal)
inlineprotected
61  {
62  return new KeycloakUndertowAccount(principal);
63  }

◆ createBasicAuthAuthenticator()

BasicAuthRequestAuthenticator org.keycloak.adapters.RequestAuthenticator.createBasicAuthAuthenticator ( )
inlineprotectedinherited
207  {
208  return new BasicAuthRequestAuthenticator(deployment);
209  }
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38

◆ createBearerTokenAuthenticator()

BearerTokenRequestAuthenticator org.keycloak.adapters.RequestAuthenticator.createBearerTokenAuthenticator ( )
inlineprotectedinherited
203  {
204  return new BearerTokenRequestAuthenticator(deployment);
205  }
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38

◆ createOAuthAuthenticator()

OAuthRequestAuthenticator org.keycloak.adapters.undertow.ServletRequestAuthenticator.createOAuthAuthenticator ( )
inlineprotected
48  {
49  return new OAuthRequestAuthenticator(this, facade, deployment, sslRedirectPort, tokenStore);
50  }
HttpFacade facade
Definition: RequestAuthenticator.java:35
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
int sslRedirectPort
Definition: RequestAuthenticator.java:40
AdapterTokenStore tokenStore
Definition: RequestAuthenticator.java:39

◆ createQueryParamterTokenRequestAuthenticator()

QueryParamterTokenRequestAuthenticator org.keycloak.adapters.RequestAuthenticator.createQueryParamterTokenRequestAuthenticator ( )
inlineprotectedinherited
211  {
212  return new QueryParamterTokenRequestAuthenticator(deployment);
213  }
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38

◆ getChallenge()

AuthChallenge org.keycloak.adapters.RequestAuthenticator.getChallenge ( )
inlineinherited
54  {
55  return challenge;
56  }
AuthChallenge challenge
Definition: RequestAuthenticator.java:36

◆ getHttpSessionId()

String org.keycloak.adapters.undertow.ServletRequestAuthenticator.getHttpSessionId ( boolean  create)
inlineprotected
71  {
72  HttpSession session = getSession(create);
73  return session != null ? session.getId() : null;
74  }
HttpSession getSession(boolean create)
Definition: ServletRequestAuthenticator.java:76

◆ getSession()

HttpSession org.keycloak.adapters.undertow.ServletRequestAuthenticator.getSession ( boolean  create)
inlineprotected
76  {
77  final ServletRequestContext servletRequestContext = exchange.getAttachment(ServletRequestContext.ATTACHMENT_KEY);
78  HttpServletRequest req = (HttpServletRequest) servletRequestContext.getServletRequest();
79  return req.getSession(create);
80  }
HttpServerExchange exchange
Definition: AbstractUndertowRequestAuthenticator.java:38

◆ isAutodetectedBearerOnly()

boolean org.keycloak.adapters.RequestAuthenticator.isAutodetectedBearerOnly ( HttpFacade.Request  request)
inlineprotectedinherited
171  {
172  if (!deployment.isAutodetectBearerOnly()) return false;
173 
174  String headerValue = facade.getRequest().getHeader("X-Requested-With");
175  if (headerValue != null && headerValue.equalsIgnoreCase("XMLHttpRequest")) {
176  return true;
177  }
178 
179  headerValue = facade.getRequest().getHeader("Faces-Request");
180  if (headerValue != null && headerValue.startsWith("partial/")) {
181  return true;
182  }
183 
184  headerValue = facade.getRequest().getHeader("SOAPAction");
185  if (headerValue != null) {
186  return true;
187  }
188 
189  List<String> accepts = facade.getRequest().getHeaders("Accept");
190  if (accepts == null) accepts = Collections.emptyList();
191 
192  for (String accept : accepts) {
193  if (accept.contains("text/html") || accept.contains("text/*") || accept.contains("*/*")) {
194  return false;
195  }
196  }
197 
198  return true;
199  }
HttpFacade facade
Definition: RequestAuthenticator.java:35
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
boolean isAutodetectBearerOnly()
Definition: KeycloakDeployment.java:219

◆ propagateKeycloakContext()

void org.keycloak.adapters.undertow.ServletRequestAuthenticator.propagateKeycloakContext ( KeycloakUndertowAccount  account)
inlineprotected
53  {
54  super.propagateKeycloakContext(account);
55  final ServletRequestContext servletRequestContext = exchange.getAttachment(ServletRequestContext.ATTACHMENT_KEY);
56  HttpServletRequest req = (HttpServletRequest) servletRequestContext.getServletRequest();
57  req.setAttribute(KeycloakSecurityContext.class.getName(), account.getKeycloakSecurityContext());
58  }
HttpServerExchange exchange
Definition: AbstractUndertowRequestAuthenticator.java:38

◆ verifySSL()

boolean org.keycloak.adapters.RequestAuthenticator.verifySSL ( )
inlineprotectedinherited
162  {
163  if (!facade.getRequest().isSecure() && deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr())) {
164  log.warnf("SSL is required to authenticate. Remote address %s is secure: %s, SSL required for: %s .",
165  facade.getRequest().getRemoteAddr(), facade.getRequest().isSecure(), deployment.getSslRequired().name());
166  return true;
167  }
168  return false;
169  }
SslRequired getSslRequired()
Definition: KeycloakDeployment.java:275
HttpFacade facade
Definition: RequestAuthenticator.java:35
KeycloakDeployment deployment
Definition: RequestAuthenticator.java:38
boolean isRequired(ClientConnection connection)
Definition: SslRequired.java:34
static Logger log
Definition: RequestAuthenticator.java:34

メンバ詳解

◆ challenge

AuthChallenge org.keycloak.adapters.RequestAuthenticator.challenge
protectedinherited

◆ deployment

KeycloakDeployment org.keycloak.adapters.RequestAuthenticator.deployment
protectedinherited

◆ exchange

HttpServerExchange org.keycloak.adapters.undertow.AbstractUndertowRequestAuthenticator.exchange
protectedinherited

◆ facade

HttpFacade org.keycloak.adapters.RequestAuthenticator.facade
protectedinherited

◆ log

Logger org.keycloak.adapters.RequestAuthenticator.log = Logger.getLogger(RequestAuthenticator.class)
staticprotectedinherited

◆ securityContext

SecurityContext org.keycloak.adapters.undertow.AbstractUndertowRequestAuthenticator.securityContext
protectedinherited

◆ sslRedirectPort

int org.keycloak.adapters.RequestAuthenticator.sslRedirectPort
protectedinherited

◆ tokenStore

AdapterTokenStore org.keycloak.adapters.RequestAuthenticator.tokenStore
protectedinherited

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