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

クラス

class  ServletFacade
 

公開メンバ関数

void stop ()
 
void redirectRelative (String relativePath, HttpServletRequest request, HttpServletResponse response) throws IOException
 
void redirect (String redirectUri, HttpServletRequest request, HttpServletResponse response) throws IOException
 
AccessTokenResponse getBearerToken (HttpServletRequest request) throws IOException, ServerRequest.HttpFailure
 
AccessTokenResponse refreshToken (HttpServletRequest request, String refreshToken) throws IOException, ServerRequest.HttpFailure
 
KeycloakDeployment getDeployment ()
 
void setDeployment (KeycloakDeployment deployment)
 
String getClientId ()
 
void setClientId (String clientId)
 
Map< String, Object > getCredentials ()
 
void setCredentials (Map< String, Object > credentials)
 
String getAuthUrl ()
 
void setAuthUrl (String authUrl)
 
String getTokenUrl ()
 
void setTokenUrl (String tokenUrl)
 
boolean isPublicClient ()
 
void setPublicClient (boolean publicClient)
 
RelativeUrlsUsed getRelativeUrlsUsed ()
 
void setRelativeUrlsUsed (RelativeUrlsUsed relativeUrlsUsed)
 
boolean isSecure ()
 
String getScope ()
 
void setScope (String scope)
 
String getStateCookieName ()
 
void setStateCookieName (String stateCookieName)
 
String getStateCookiePath ()
 
void setStateCookiePath (String stateCookiePath)
 
void setSecure (boolean secure)
 

静的公開メンバ関数

static String generateSecret ()
 
static String generateSecret (int bytes)
 
static IDToken extractIdToken (String idToken)
 

限定公開メンバ関数

String getCookieValue (String name, HttpServletRequest request)
 
String getCode (HttpServletRequest request)
 
String getStateCode ()
 
String stripOauthParametersFromRedirect (String uri)
 

限定公開変数類

String clientId
 
Map< String, Object > credentials
 
String authUrl
 
String tokenUrl
 
RelativeUrlsUsed relativeUrlsUsed
 
String scope
 
String stateCookieName = OAUTH_TOKEN_REQUEST_STATE
 
String stateCookiePath
 
boolean isSecure
 
boolean publicClient
 

非公開メンバ関数

void setCodeVerifier ()
 
void setCodeChallenge ()
 
AccessTokenResponse resolveBearerToken (HttpServletRequest request, String redirectUri, String code) throws IOException, ServerRequest.HttpFailure
 
KeycloakDeployment resolveDeployment (KeycloakDeployment baseDeployment, HttpServletRequest request)
 

非公開変数類

String codeVerifier
 
String codeChallenge
 
String codeChallengeMethod = OAuth2Constants.PKCE_METHOD_S256
 

静的非公開変数類

static Logger logger = Logger.getLogger(ServletOAuthClient.class)
 

詳解

著者
Bill Burke
バージョン
Revision
1

関数詳解

◆ extractIdToken()

static IDToken org.keycloak.servlet.ServletOAuthClient.extractIdToken ( String  idToken)
inlinestatic
237  {
238  if (idToken == null) return null;
239  try {
240  JWSInput input = new JWSInput(idToken);
241  return input.readJsonContent(IDToken.class);
242  } catch (JWSInputException e) {
243  throw new RuntimeException(e);
244  }
245  }

◆ generateSecret() [1/2]

static String org.keycloak.servlet.ServletOAuthClient.generateSecret ( )
inlinestatic
63  {
64  return generateSecret(32);
65  }
static String generateSecret()
Definition: ServletOAuthClient.java:63

◆ generateSecret() [2/2]

static String org.keycloak.servlet.ServletOAuthClient.generateSecret ( int  bytes)
inlinestatic
67  {
68  byte[] buf = new byte[bytes];
69  new SecureRandom().nextBytes(buf);
70  return Base64Url.encode(buf);
71  }

◆ getAuthUrl()

String org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.getAuthUrl ( )
inlineinherited
62  {
63  throw new IllegalStateException("Illegal to call this method. Use KeycloakDeployment to resolve correct deployment for this request");
64  }

◆ getBearerToken()

AccessTokenResponse org.keycloak.servlet.ServletOAuthClient.getBearerToken ( HttpServletRequest  request) throws IOException, ServerRequest.HttpFailure
inline

Obtain the code parameter from the url after being redirected back from the auth-server. Then do an authenticated request back to the auth-server to turn the access code into an access token.

引数
request
戻り値
例外
IOException
org.keycloak.adapters.ServerRequest.HttpFailure
214  {
215  String error = request.getParameter(OAuth2Constants.ERROR);
216  if (error != null) throw new IOException("OAuth error: " + error);
217  String redirectUri = request.getRequestURL().append("?").append(request.getQueryString()).toString();
218  String stateCookie = getCookieValue(stateCookieName, request);
219  if (stateCookie == null) throw new IOException("state cookie not set");
220  // we can call get parameter as this should be a redirect
221  String state = request.getParameter(OAuth2Constants.STATE);
222  String code = request.getParameter(OAuth2Constants.CODE);
223 
224  if (state == null) throw new IOException("state parameter was null");
225  if (!state.equals(stateCookie)) {
226  throw new IOException("state parameter invalid");
227  }
228  if (code == null) throw new IOException("code parameter was null");
229  return resolveBearerToken(request, redirectUri, code);
230  }
String getCookieValue(String name, HttpServletRequest request)
Definition: ServletOAuthClient.java:181
AccessTokenResponse resolveBearerToken(HttpServletRequest request, String redirectUri, String code)
Definition: ServletOAuthClient.java:107
String stateCookieName
Definition: AbstractOAuthClient.java:41

◆ getClientId()

String org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.getClientId ( )
inlineinherited
42  {
43  return deployment.getResourceName();
44  }
String getResourceName()
Definition: KeycloakDeployment.java:107
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31

◆ getCode()

String org.keycloak.servlet.ServletOAuthClient.getCode ( HttpServletRequest  request)
inlineprotected
190  {
191  String query = request.getQueryString();
192  if (query == null) return null;
193  String[] params = query.split("&");
194  for (String param : params) {
195  int eq = param.indexOf('=');
196  if (eq == -1) continue;
197  String name = param.substring(0, eq);
198  if (!name.equals(OAuth2Constants.CODE)) continue;
199  return param.substring(eq + 1);
200  }
201  return null;
202  }

◆ getCookieValue()

String org.keycloak.servlet.ServletOAuthClient.getCookieValue ( String  name,
HttpServletRequest  request 
)
inlineprotected
181  {
182  if (request.getCookies() == null) return null;
183 
184  for (Cookie cookie : request.getCookies()) {
185  if (cookie.getName().equals(name)) return cookie.getValue();
186  }
187  return null;
188  }

◆ getCredentials()

Map<String, Object> org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.getCredentials ( )
inlineinherited
52  {
54  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31
Map< String, Object > getResourceCredentials()
Definition: KeycloakDeployment.java:243

◆ getDeployment()

KeycloakDeployment org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.getDeployment ( )
inlineinherited
33  {
34  return deployment;
35  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31

◆ getRelativeUrlsUsed()

RelativeUrlsUsed org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.getRelativeUrlsUsed ( )
inlineinherited
92  {
93  return deployment.getRelativeUrls();
94  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31
RelativeUrlsUsed getRelativeUrls()
Definition: KeycloakDeployment.java:171

◆ getScope()

String org.keycloak.AbstractOAuthClient.getScope ( )
inlineinherited
81  {
82  return scope;
83  }
String scope
Definition: AbstractOAuthClient.java:40

◆ getStateCode()

String org.keycloak.AbstractOAuthClient.getStateCode ( )
inlineprotectedinherited
45  {
46  return counter.getAndIncrement() + "/" + UUID.randomUUID().toString();
47  }
final AtomicLong counter
Definition: AbstractOAuthClient.java:33

◆ getStateCookieName()

String org.keycloak.AbstractOAuthClient.getStateCookieName ( )
inlineinherited
89  {
90  return stateCookieName;
91  }
String stateCookieName
Definition: AbstractOAuthClient.java:41

◆ getStateCookiePath()

String org.keycloak.AbstractOAuthClient.getStateCookiePath ( )
inlineinherited
97  {
98  return stateCookiePath;
99  }
String stateCookiePath
Definition: AbstractOAuthClient.java:42

◆ getTokenUrl()

String org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.getTokenUrl ( )
inlineinherited
72  {
73  throw new IllegalStateException("Illegal to call this method. Use KeycloakDeployment to resolve correct deployment for this request");
74  }

◆ isPublicClient()

boolean org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.isPublicClient ( )
inlineinherited
82  {
83  return deployment.isPublicClient();
84  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31
boolean isPublicClient()
Definition: KeycloakDeployment.java:235

◆ isSecure()

boolean org.keycloak.AbstractOAuthClient.isSecure ( )
inlineinherited
113  {
114  return isSecure;
115  }
boolean isSecure()
Definition: AbstractOAuthClient.java:113

◆ redirect()

void org.keycloak.servlet.ServletOAuthClient.redirect ( String  redirectUri,
HttpServletRequest  request,
HttpServletResponse  response 
) throws IOException
inline

Start the process of obtaining an access token by redirecting the browser to the authentication server

引数
redirectUrifull URI you want auth server to redirect back to
request
response
例外
IOException
149  {
150  String state = getStateCode();
151  KeycloakDeployment resolvedDeployment = resolveDeployment(getDeployment(), request);
152  String authUrl = resolvedDeployment.getAuthUrl().clone().build().toString();
153  String scopeParam = TokenUtil.attachOIDCScope(scope);
154 
155  // https://tools.ietf.org/html/rfc7636#section-4
156  if (resolvedDeployment.isPkce()) {
157  setCodeVerifier();
159  }
160 
161  KeycloakUriBuilder uriBuilder = KeycloakUriBuilder.fromUri(authUrl)
162  .queryParam(OAuth2Constants.RESPONSE_TYPE, OAuth2Constants.CODE)
163  .queryParam(OAuth2Constants.CLIENT_ID, getClientId())
164  .queryParam(OAuth2Constants.REDIRECT_URI, redirectUri)
165  .queryParam(OAuth2Constants.STATE, state)
166  .queryParam(OAuth2Constants.SCOPE, scopeParam);
167 
168  URI url = uriBuilder.build();
169 
170  String stateCookiePath = this.stateCookiePath;
171  if (stateCookiePath == null) stateCookiePath = request.getContextPath();
172  if (stateCookiePath.equals("")) stateCookiePath = "/";
173 
174  Cookie cookie = new Cookie(stateCookieName, state);
175  cookie.setSecure(isSecure);
176  cookie.setPath(stateCookiePath);
177  response.addCookie(cookie);
178  response.sendRedirect(url.toString());
179  }
void setCodeChallenge()
Definition: ServletOAuthClient.java:79
KeycloakDeployment getDeployment()
Definition: KeycloakDeploymentDelegateOAuthClient.java:33
String stateCookiePath
Definition: AbstractOAuthClient.java:42
String getStateCode()
Definition: AbstractOAuthClient.java:45
String scope
Definition: AbstractOAuthClient.java:40
KeycloakDeployment resolveDeployment(KeycloakDeployment baseDeployment, HttpServletRequest request)
Definition: ServletOAuthClient.java:247
String authUrl
Definition: AbstractOAuthClient.java:37
boolean isSecure()
Definition: AbstractOAuthClient.java:113
String getClientId()
Definition: KeycloakDeploymentDelegateOAuthClient.java:42
void setCodeVerifier()
Definition: ServletOAuthClient.java:73
String stateCookieName
Definition: AbstractOAuthClient.java:41

◆ redirectRelative()

void org.keycloak.servlet.ServletOAuthClient.redirectRelative ( String  relativePath,
HttpServletRequest  request,
HttpServletResponse  response 
) throws IOException
inline

Start the process of obtaining an access token by redirecting the browser to the authentication server

引数
relativePathpath relative to context root you want auth server to redirect back to
request
response
例外
IOException
130  {
131  KeycloakUriBuilder builder = KeycloakUriBuilder.fromUri(request.getRequestURL().toString())
132  .replacePath(request.getContextPath())
133  .replaceQuery(null)
134  .path(relativePath);
135  String redirect = builder.toTemplate();
136  redirect(redirect, request, response);
137  }
void redirect(String redirectUri, HttpServletRequest request, HttpServletResponse response)
Definition: ServletOAuthClient.java:149

◆ refreshToken()

AccessTokenResponse org.keycloak.servlet.ServletOAuthClient.refreshToken ( HttpServletRequest  request,
String  refreshToken 
) throws IOException, ServerRequest.HttpFailure
inline
232  {
233  KeycloakDeployment resolvedDeployment = resolveDeployment(getDeployment(), request);
234  return ServerRequest.invokeRefresh(resolvedDeployment, refreshToken);
235  }
KeycloakDeployment getDeployment()
Definition: KeycloakDeploymentDelegateOAuthClient.java:33
KeycloakDeployment resolveDeployment(KeycloakDeployment baseDeployment, HttpServletRequest request)
Definition: ServletOAuthClient.java:247
AccessTokenResponse refreshToken(HttpServletRequest request, String refreshToken)
Definition: ServletOAuthClient.java:232

◆ resolveBearerToken()

AccessTokenResponse org.keycloak.servlet.ServletOAuthClient.resolveBearerToken ( HttpServletRequest  request,
String  redirectUri,
String  code 
) throws IOException, ServerRequest.HttpFailure
inlineprivate
107  {
108  // Don't send sessionId in oauth clients for now
109  KeycloakDeployment resolvedDeployment = resolveDeployment(getDeployment(), request);
110 
111  // https://tools.ietf.org/html/rfc7636#section-4
112  if (codeVerifier != null) {
113  logger.debugf("Before sending Token Request, codeVerifier = %s", codeVerifier);
114  return ServerRequest.invokeAccessCodeToToken(resolvedDeployment, code, redirectUri, null, codeVerifier);
115  } else {
116  logger.debug("Before sending Token Request without codeVerifier");
117  return ServerRequest.invokeAccessCodeToToken(resolvedDeployment, code, redirectUri, null);
118  }
119  }
static Logger logger
Definition: ServletOAuthClient.java:61
KeycloakDeployment getDeployment()
Definition: KeycloakDeploymentDelegateOAuthClient.java:33
KeycloakDeployment resolveDeployment(KeycloakDeployment baseDeployment, HttpServletRequest request)
Definition: ServletOAuthClient.java:247
String codeVerifier
Definition: ServletOAuthClient.java:58

◆ resolveDeployment()

KeycloakDeployment org.keycloak.servlet.ServletOAuthClient.resolveDeployment ( KeycloakDeployment  baseDeployment,
HttpServletRequest  request 
)
inlineprivate
247  {
248  ServletFacade facade = new ServletFacade(request);
249  return new AdapterDeploymentContext(baseDeployment).resolveDeployment(facade);
250  }

◆ setAuthUrl()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setAuthUrl ( String  authUrl)
inlineinherited
67  {
68  throw new IllegalStateException("Illegal to call this method");
69  }

◆ setClientId()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setClientId ( String  clientId)
inlineinherited
47  {
49  }
String clientId
Definition: AbstractOAuthClient.java:35
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31
void setResourceName(String resourceName)
Definition: KeycloakDeployment.java:207

◆ setCodeChallenge()

void org.keycloak.servlet.ServletOAuthClient.setCodeChallenge ( )
inlineprivate
79  {
80  try {
81  if (codeChallengeMethod.equals(OAuth2Constants.PKCE_METHOD_S256)) {
82  MessageDigest md = MessageDigest.getInstance("SHA-256");
83  md.update(codeVerifier.getBytes());
84  StringBuilder sb = new StringBuilder();
85  for (byte b : md.digest()) {
86  String hex = String.format("%02x", b);
87  sb.append(hex);
88  }
89  codeChallenge = Base64Url.encode(sb.toString().getBytes());
90  } else {
91  codeChallenge = Base64Url.encode(codeVerifier.getBytes());
92  }
93  logger.debugf("Encode codeChallenge = %s, codeChallengeMethod = %s", codeChallenge, codeChallengeMethod);
94  } catch (Exception e) {
95  logger.info("PKCE client side unknown hash algorithm");
96  codeChallenge = Base64Url.encode(codeVerifier.getBytes());
97  }
98  }
String codeChallengeMethod
Definition: ServletOAuthClient.java:60
static Logger logger
Definition: ServletOAuthClient.java:61
String codeChallenge
Definition: ServletOAuthClient.java:59
String codeVerifier
Definition: ServletOAuthClient.java:58

◆ setCodeVerifier()

void org.keycloak.servlet.ServletOAuthClient.setCodeVerifier ( )
inlineprivate
73  {
75  logger.debugf("Generated codeVerifier = %s", codeVerifier);
76  return;
77  }
static Logger logger
Definition: ServletOAuthClient.java:61
static String generateSecret()
Definition: ServletOAuthClient.java:63
String codeVerifier
Definition: ServletOAuthClient.java:58

◆ setCredentials()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setCredentials ( Map< String, Object >  credentials)
inlineinherited
57  {
59  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31
Map< String, Object > credentials
Definition: AbstractOAuthClient.java:36
void setResourceCredentials(Map< String, Object > resourceCredentials)
Definition: KeycloakDeployment.java:247

◆ setDeployment()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setDeployment ( KeycloakDeployment  deployment)
inlineinherited
37  {
38  this.deployment = deployment;
39  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31

◆ setPublicClient()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setPublicClient ( boolean  publicClient)
inlineinherited
87  {
89  }
KeycloakDeployment deployment
Definition: KeycloakDeploymentDelegateOAuthClient.java:31
void setPublicClient(boolean publicClient)
Definition: KeycloakDeployment.java:239
boolean publicClient
Definition: AbstractOAuthClient.java:44

◆ setRelativeUrlsUsed()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setRelativeUrlsUsed ( RelativeUrlsUsed  relativeUrlsUsed)
inlineinherited
97  {
98  throw new IllegalStateException("Illegal to call this method");
99  }

◆ setScope()

void org.keycloak.AbstractOAuthClient.setScope ( String  scope)
inlineinherited
85  {
86  this.scope = scope;
87  }
String scope
Definition: AbstractOAuthClient.java:40

◆ setSecure()

void org.keycloak.AbstractOAuthClient.setSecure ( boolean  secure)
inlineinherited
117  {
118  isSecure = secure;
119  }
boolean isSecure()
Definition: AbstractOAuthClient.java:113

◆ setStateCookieName()

void org.keycloak.AbstractOAuthClient.setStateCookieName ( String  stateCookieName)
inlineinherited
93  {
95  }
String stateCookieName
Definition: AbstractOAuthClient.java:41

◆ setStateCookiePath()

void org.keycloak.AbstractOAuthClient.setStateCookiePath ( String  stateCookiePath)
inlineinherited
101  {
103  }
String stateCookiePath
Definition: AbstractOAuthClient.java:42

◆ setTokenUrl()

void org.keycloak.servlet.KeycloakDeploymentDelegateOAuthClient.setTokenUrl ( String  tokenUrl)
inlineinherited
77  {
78  throw new IllegalStateException("Illegal to call this method");
79  }

◆ stop()

void org.keycloak.servlet.ServletOAuthClient.stop ( )
inline

closes client

103  {
104  getDeployment().getClient().getConnectionManager().shutdown();
105  }
HttpClient getClient()
Definition: KeycloakDeployment.java:259
KeycloakDeployment getDeployment()
Definition: KeycloakDeploymentDelegateOAuthClient.java:33

◆ stripOauthParametersFromRedirect()

String org.keycloak.AbstractOAuthClient.stripOauthParametersFromRedirect ( String  uri)
inlineprotectedinherited
129  {
130  KeycloakUriBuilder builder = KeycloakUriBuilder.fromUri(uri)
131  .replaceQueryParam(OAuth2Constants.CODE, null)
132  .replaceQueryParam(OAuth2Constants.STATE, null);
133  return builder.build().toString();
134  }

メンバ詳解

◆ authUrl

String org.keycloak.AbstractOAuthClient.authUrl
protectedinherited

◆ clientId

String org.keycloak.AbstractOAuthClient.clientId
protectedinherited

◆ codeChallenge

String org.keycloak.servlet.ServletOAuthClient.codeChallenge
private

◆ codeChallengeMethod

String org.keycloak.servlet.ServletOAuthClient.codeChallengeMethod = OAuth2Constants.PKCE_METHOD_S256
private

◆ codeVerifier

String org.keycloak.servlet.ServletOAuthClient.codeVerifier
private

◆ credentials

Map<String, Object> org.keycloak.AbstractOAuthClient.credentials
protectedinherited

◆ isSecure

boolean org.keycloak.AbstractOAuthClient.isSecure
protectedinherited

◆ logger

Logger org.keycloak.servlet.ServletOAuthClient.logger = Logger.getLogger(ServletOAuthClient.class)
staticprivate

◆ publicClient

boolean org.keycloak.AbstractOAuthClient.publicClient
protectedinherited

◆ relativeUrlsUsed

RelativeUrlsUsed org.keycloak.AbstractOAuthClient.relativeUrlsUsed
protectedinherited

◆ scope

String org.keycloak.AbstractOAuthClient.scope
protectedinherited

◆ stateCookieName

String org.keycloak.AbstractOAuthClient.stateCookieName = OAUTH_TOKEN_REQUEST_STATE
protectedinherited

◆ stateCookiePath

String org.keycloak.AbstractOAuthClient.stateCookiePath
protectedinherited

◆ tokenUrl

String org.keycloak.AbstractOAuthClient.tokenUrl
protectedinherited

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