keycloak
クラス | 公開メンバ関数 | 静的公開メンバ関数 | 静的公開変数類 | 限定公開メンバ関数 | 関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.TokenVerifier< T extends JsonWebToken > クラステンプレート
org.keycloak.TokenVerifier< T extends JsonWebToken > の継承関係図
Inheritance graph
org.keycloak.TokenVerifier< T extends JsonWebToken > 連携図
Collaboration graph

クラス

class  AudienceCheck
 
interface  Predicate
 
class  RealmUrlCheck
 
class  TokenTypeCheck
 

公開メンバ関数

TokenVerifier< T > verifierContext (SignatureVerifierContext verifier)
 
TokenVerifier< T > withDefaultChecks ()
 
TokenVerifier< T > withChecks (Predicate<? super T >... checks)
 
TokenVerifier< T > publicKey (PublicKey publicKey)
 
TokenVerifier< T > secretKey (SecretKey secretKey)
 
TokenVerifier< T > realmUrl (String realmUrl)
 
TokenVerifier< T > checkTokenType (boolean checkTokenType)
 
TokenVerifier< T > tokenType (String tokenType)
 
TokenVerifier< T > checkActive (boolean checkActive)
 
TokenVerifier< T > checkRealmUrl (boolean checkRealmUrl)
 
TokenVerifier< T > audience (String expectedAudience)
 
TokenVerifier< T > parse () throws VerificationException
 
getToken () throws VerificationException
 
JWSHeader getHeader () throws VerificationException
 
void verifySignature () throws VerificationException
 
TokenVerifier< T > verify () throws VerificationException
 

静的公開メンバ関数

static< T extends JsonWebToken > TokenVerifier< T > create (String tokenString, Class< T > clazz)
 
static< T extends JsonWebToken > TokenVerifier< T > createWithoutSignature (T token)
 
static< T extends JsonWebToken > Predicate< T > optional (final Predicate< T > mandatoryPredicate)
 
static< T extends JsonWebToken > Predicate< T > alternative (final Predicate<? super T >... predicates)
 

静的公開変数類

static final Predicate< JsonWebTokenSUBJECT_EXISTS_CHECK
 
static final Predicate< JsonWebTokenIS_ACTIVE
 

限定公開メンバ関数

 TokenVerifier (String tokenString, Class< T > clazz)
 
 TokenVerifier (T token)
 

関数

private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck (Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
 
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck (Predicate<? super T > check, boolean active, P predicate)
 

非公開メンバ関数

void removeCheck (Class<? extends Predicate<?>> checkClass)
 
void removeCheck (Predicate<? super T > check)
 

非公開変数類

String tokenString
 
Class<? extends T > clazz
 
PublicKey publicKey
 
SecretKey secretKey
 
String realmUrl
 
String expectedTokenType = TokenUtil.TOKEN_TYPE_BEARER
 
boolean checkTokenType = true
 
boolean checkRealmUrl = true
 
final LinkedList< Predicate<? super T > > checks = new LinkedList<>()
 
JWSInput jws
 
token
 
SignatureVerifierContext verifier = null
 

静的非公開変数類

static final Logger LOG = Logger.getLogger(TokenVerifier.class.getName())
 

詳解

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ TokenVerifier() [1/2]

org.keycloak.TokenVerifier< T extends JsonWebToken >.TokenVerifier ( String  tokenString,
Class< T >  clazz 
)
inlineprotected
187  {
188  this.tokenString = tokenString;
189  this.clazz = clazz;
190  }
Class<? extends T > clazz
Definition: TokenVerifier.java:168
String tokenString
Definition: TokenVerifier.java:164

◆ TokenVerifier() [2/2]

org.keycloak.TokenVerifier< T extends JsonWebToken >.TokenVerifier ( token)
inlineprotected
192  {
193  this.token = token;
194  }
T token
Definition: TokenVerifier.java:178

関数詳解

◆ alternative()

static <T extends JsonWebToken> Predicate<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.alternative ( final Predicate<? super T >...  predicates)
inlinestatic

Creates a predicate that will proceed with checks of the given predicates and will pass if and only if at least one of the given predicates passes.

引数
<T>
predicates
戻り値
474  {
475  return new Predicate<T>() {
476  @Override
477  public boolean test(T t) {
478  for (Predicate<? super T> predicate : predicates) {
479  try {
480  if (predicate.test(t)) {
481  return true;
482  }
483 
484  LOG.finer("[alternative] predicate failed: " + predicate);
485  } catch (VerificationException ex) {
486  LOG.log(Level.FINER, "[alternative] predicate " + predicate + " failed.", ex);
487  }
488  }
489 
490  return false;
491  }
492  };
493  }
static final Logger LOG
Definition: TokenVerifier.java:46

◆ audience()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.audience ( String  expectedAudience)
inline

Add check for verifying that token contains the expectedAudience

引数
expectedAudienceAudience, which needs to be in the target token. Can't be null
戻り値
This token verifier
351  {
352  return this.replaceCheck(AudienceCheck.class, true, new AudienceCheck(expectedAudience));
353  }
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck(Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
Definition: TokenVerifier.java:253

◆ checkActive()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.checkActive ( boolean  checkActive)
inline
非推奨:
This method is here only for backward compatibility with previous version of

.

戻り値
This token verifier
332  {
334  }
static final Predicate< JsonWebToken > IS_ACTIVE
Definition: TokenVerifier.java:82
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck(Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
Definition: TokenVerifier.java:253
TokenVerifier< T > checkActive(boolean checkActive)
Definition: TokenVerifier.java:332

◆ checkRealmUrl()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.checkRealmUrl ( boolean  checkRealmUrl)
inline
非推奨:
This method is here only for backward compatibility with previous version of

.

戻り値
This token verifier
340  {
342  return replaceCheck(RealmUrlCheck.class, this.checkRealmUrl, new RealmUrlCheck(realmUrl));
343  }
boolean checkRealmUrl
Definition: TokenVerifier.java:174
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck(Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
Definition: TokenVerifier.java:253
String realmUrl
Definition: TokenVerifier.java:171

◆ checkTokenType()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.checkTokenType ( boolean  checkTokenType)
inline
非推奨:
This method is here only for backward compatibility with previous version of

.

戻り値
This token verifier
314  {
316  return replaceCheck(TokenTypeCheck.class, this.checkTokenType, new TokenTypeCheck(expectedTokenType));
317  }
String expectedTokenType
Definition: TokenVerifier.java:172
boolean checkTokenType
Definition: TokenVerifier.java:173
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck(Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
Definition: TokenVerifier.java:253

◆ create()

static <T extends JsonWebToken> TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.create ( String  tokenString,
Class< T >  clazz 
)
inlinestatic

Creates an instance of

from the given string on a JWT of the given class. The token verifier has no checks defined. Note that the checks are only tested when verify() method is invoked.

引数
<T>Type of the token
tokenStringString representation of JWT
clazzClass of the token
戻り値
205  {
206  return new TokenVerifier(tokenString, clazz);
207  }
Class<? extends T > clazz
Definition: TokenVerifier.java:168
String tokenString
Definition: TokenVerifier.java:164
TokenVerifier(String tokenString, Class< T > clazz)
Definition: TokenVerifier.java:187

◆ createWithoutSignature()

static <T extends JsonWebToken> TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.createWithoutSignature ( token)
inlinestatic

Creates an instance of

for the given token. The token verifier has no checks defined. Note that the checks are only tested when verify() method is invoked.

NOTE: The returned token verifier cannot verify token signature since that is not part of the JsonWebToken object.

戻り値
218  {
219  return new TokenVerifier(token);
220  }
T token
Definition: TokenVerifier.java:178
TokenVerifier(String tokenString, Class< T > clazz)
Definition: TokenVerifier.java:187

◆ getHeader()

JWSHeader org.keycloak.TokenVerifier< T extends JsonWebToken >.getHeader ( ) throws VerificationException
inline
384  {
385  parse();
386  return jws.getHeader();
387  }
TokenVerifier< T > parse()
Definition: TokenVerifier.java:355
JWSInput jws
Definition: TokenVerifier.java:177
JWSHeader getHeader()
Definition: JWSInput.java:81

◆ getToken()

T org.keycloak.TokenVerifier< T extends JsonWebToken >.getToken ( ) throws VerificationException
inline
377  {
378  if (token == null) {
379  parse();
380  }
381  return token;
382  }
T token
Definition: TokenVerifier.java:178
TokenVerifier< T > parse()
Definition: TokenVerifier.java:355

◆ optional()

static <T extends JsonWebToken> Predicate<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.optional ( final Predicate< T >  mandatoryPredicate)
inlinestatic

Creates an optional predicate from a predicate that will proceed with check but always pass.

引数
<T>
mandatoryPredicate
戻り値
449  {
450  return new Predicate<T>() {
451  @Override
452  public boolean test(T t) throws VerificationException {
453  try {
454  if (! mandatoryPredicate.test(t)) {
455  LOG.finer("[optional] predicate failed: " + mandatoryPredicate);
456  }
457 
458  return true;
459  } catch (VerificationException ex) {
460  LOG.log(Level.FINER, "[optional] predicate " + mandatoryPredicate + " failed.", ex);
461  return true;
462  }
463  }
464  };
465  }
static final Logger LOG
Definition: TokenVerifier.java:46

◆ parse()

355  {
356  if (jws == null) {
357  if (tokenString == null) {
358  throw new VerificationException("Token not set");
359  }
360 
361  try {
362  jws = new JWSInput(tokenString);
363  } catch (JWSInputException e) {
364  throw new VerificationException("Failed to parse JWT", e);
365  }
366 
367 
368  try {
370  } catch (JWSInputException e) {
371  throw new VerificationException("Failed to read access token from JWT", e);
372  }
373  }
374  return this;
375  }
T token
Definition: TokenVerifier.java:178
Class<? extends T > clazz
Definition: TokenVerifier.java:168
String tokenString
Definition: TokenVerifier.java:164
public< T > T readJsonContent(Class< T > type)
Definition: JWSInput.java:100
JWSInput jws
Definition: TokenVerifier.java:177

◆ publicKey()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.publicKey ( PublicKey  publicKey)
inline

Sets the key for verification of RSA-based signature.

引数
publicKey
戻り値
286  {
287  this.publicKey = publicKey;
288  return this;
289  }
PublicKey publicKey
Definition: TokenVerifier.java:169

◆ realmUrl()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.realmUrl ( String  realmUrl)
inline
非推奨:
This method is here only for backward compatibility with previous version of

.

戻り値
This token verifier
305  {
306  this.realmUrl = realmUrl;
307  return replaceCheck(RealmUrlCheck.class, checkRealmUrl, new RealmUrlCheck(realmUrl));
308  }
boolean checkRealmUrl
Definition: TokenVerifier.java:174
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck(Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
Definition: TokenVerifier.java:253
String realmUrl
Definition: TokenVerifier.java:171

◆ removeCheck() [1/2]

void org.keycloak.TokenVerifier< T extends JsonWebToken >.removeCheck ( Class<? extends Predicate<?>>  checkClass)
inlineprivate
241  {
242  for (Iterator<Predicate<? super T>> it = checks.iterator(); it.hasNext();) {
243  if (it.next().getClass() == checkClass) {
244  it.remove();
245  }
246  }
247  }
final LinkedList< Predicate<? super T > > checks
Definition: TokenVerifier.java:175

◆ removeCheck() [2/2]

void org.keycloak.TokenVerifier< T extends JsonWebToken >.removeCheck ( Predicate<? super T >  check)
inlineprivate
249  {
250  checks.remove(check);
251  }
final LinkedList< Predicate<? super T > > checks
Definition: TokenVerifier.java:175

◆ replaceCheck() [1/2]

private<P extends Predicate<? super T> > TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.replaceCheck ( Class<? extends Predicate<?>>  checkClass,
boolean  active,
predicate 
)
inlinepackage
253  {
254  removeCheck(checkClass);
255  if (active) {
256  checks.add(predicate);
257  }
258  return this;
259  }
final LinkedList< Predicate<? super T > > checks
Definition: TokenVerifier.java:175
void removeCheck(Class<? extends Predicate<?>> checkClass)
Definition: TokenVerifier.java:241

◆ replaceCheck() [2/2]

private<P extends Predicate<? super T> > TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.replaceCheck ( Predicate<? super T >  check,
boolean  active,
predicate 
)
inlinepackage
261  {
262  removeCheck(check);
263  if (active) {
264  checks.add(predicate);
265  }
266  return this;
267  }
final LinkedList< Predicate<? super T > > checks
Definition: TokenVerifier.java:175
void removeCheck(Class<? extends Predicate<?>> checkClass)
Definition: TokenVerifier.java:241

◆ secretKey()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.secretKey ( SecretKey  secretKey)
inline

Sets the key for verification of HMAC-based signature.

引数
secretKey
戻り値
296  {
297  this.secretKey = secretKey;
298  return this;
299  }
SecretKey secretKey
Definition: TokenVerifier.java:170

◆ tokenType()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.tokenType ( String  tokenType)
inline
非推奨:
This method is here only for backward compatibility with previous version of

.

戻り値
This token verifier
323  {
325  return replaceCheck(TokenTypeCheck.class, this.checkTokenType, new TokenTypeCheck(expectedTokenType));
326  }
String expectedTokenType
Definition: TokenVerifier.java:172
TokenVerifier< T > tokenType(String tokenType)
Definition: TokenVerifier.java:323
private< P extends Predicate<? super T > > TokenVerifier< T > replaceCheck(Class<? extends Predicate<?>> checkClass, boolean active, P predicate)
Definition: TokenVerifier.java:253

◆ verifierContext()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.verifierContext ( SignatureVerifierContext  verifier)
inline
182  {
183  this.verifier = verifier;
184  return this;
185  }
SignatureVerifierContext verifier
Definition: TokenVerifier.java:180

◆ verify()

426  {
427  if (getToken() == null) {
428  parse();
429  }
430  if (jws != null) {
431  verifySignature();
432  }
433 
434  for (Predicate<? super T> check : checks) {
435  if (! check.test(getToken())) {
436  throw new VerificationException("JWT check failed for check " + check);
437  }
438  }
439 
440  return this;
441  }
TokenVerifier< T > parse()
Definition: TokenVerifier.java:355
void verifySignature()
Definition: TokenVerifier.java:389
T getToken()
Definition: TokenVerifier.java:377
final LinkedList< Predicate<? super T > > checks
Definition: TokenVerifier.java:175
JWSInput jws
Definition: TokenVerifier.java:177

◆ verifySignature()

void org.keycloak.TokenVerifier< T extends JsonWebToken >.verifySignature ( ) throws VerificationException
inline
389  {
390  if (this.verifier != null) {
391  try {
392  if (!verifier.verify(jws.getEncodedSignatureInput().getBytes("UTF-8"), jws.getSignature())) {
393  throw new TokenSignatureInvalidException(token, "Invalid token signature");
394  }
395  } catch (Exception e) {
396  throw new VerificationException(e);
397  }
398  } else {
399  AlgorithmType algorithmType = getHeader().getAlgorithm().getType();
400 
401  if (null == algorithmType) {
402  throw new VerificationException("Unknown or unsupported token algorithm");
403  } else switch (algorithmType) {
404  case RSA:
405  if (publicKey == null) {
406  throw new VerificationException("Public key not set");
407  }
408  if (!RSAProvider.verify(jws, publicKey)) {
409  throw new TokenSignatureInvalidException(token, "Invalid token signature");
410  }
411  break;
412  case HMAC:
413  if (secretKey == null) {
414  throw new VerificationException("Secret key not set");
415  }
416  if (!HMACProvider.verify(jws, secretKey)) {
417  throw new TokenSignatureInvalidException(token, "Invalid token signature");
418  }
419  break;
420  default:
421  throw new VerificationException("Unknown or unsupported token algorithm");
422  }
423  }
424  }
Algorithm getAlgorithm()
Definition: JWSHeader.java:55
byte [] getSignature()
Definition: JWSInput.java:89
String getEncodedSignatureInput()
Definition: JWSInput.java:77
T token
Definition: TokenVerifier.java:178
JWSHeader getHeader()
Definition: TokenVerifier.java:384
SecretKey secretKey
Definition: TokenVerifier.java:170
SignatureVerifierContext verifier
Definition: TokenVerifier.java:180
boolean verify(byte[] data, byte[] signature)
JWSInput jws
Definition: TokenVerifier.java:177
PublicKey publicKey
Definition: TokenVerifier.java:169

◆ withChecks()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.withChecks ( Predicate<? super T >...  checks)
inline

Will test the given checks in verify() method in addition to already set checks.

引数
checks
戻り値
274  {
275  if (checks != null) {
276  this.checks.addAll(Arrays.asList(checks));
277  }
278  return this;
279  }
final LinkedList< Predicate<? super T > > checks
Definition: TokenVerifier.java:175

◆ withDefaultChecks()

TokenVerifier<T> org.keycloak.TokenVerifier< T extends JsonWebToken >.withDefaultChecks ( )
inline

Adds default checks to the token verification:

  • Realm URL (JWT issuer field:
    iss
    ) has to be defined and match realm set via realmUrl(java.lang.String) method
  • Subject (JWT subject field:
    sub
    ) has to be defined
  • Token type (JWT type field:
    typ
    ) has to be
    Bearer
    . The type can be set via tokenType(java.lang.String) method
  • Token has to be active, ie. both not expired and not used before its validity (JWT issuer fields:
    exp
    and
    nbf
    )
戻り値
This token verifier.
232  {
233  return withChecks(
234  RealmUrlCheck.NULL_INSTANCE,
236  TokenTypeCheck.INSTANCE_BEARER,
237  IS_ACTIVE
238  );
239  }
static final Predicate< JsonWebToken > SUBJECT_EXISTS_CHECK
Definition: TokenVerifier.java:66
TokenVerifier< T > withChecks(Predicate<? super T >... checks)
Definition: TokenVerifier.java:274
static final Predicate< JsonWebToken > IS_ACTIVE
Definition: TokenVerifier.java:82

メンバ詳解

◆ checkRealmUrl

boolean org.keycloak.TokenVerifier< T extends JsonWebToken >.checkRealmUrl = true
private

◆ checks

final LinkedList<Predicate<? super T> > org.keycloak.TokenVerifier< T extends JsonWebToken >.checks = new LinkedList<>()
private

◆ checkTokenType

boolean org.keycloak.TokenVerifier< T extends JsonWebToken >.checkTokenType = true
private

◆ clazz

Class<? extends T> org.keycloak.TokenVerifier< T extends JsonWebToken >.clazz
private

◆ expectedTokenType

String org.keycloak.TokenVerifier< T extends JsonWebToken >.expectedTokenType = TokenUtil.TOKEN_TYPE_BEARER
private

◆ IS_ACTIVE

final Predicate<JsonWebToken> org.keycloak.TokenVerifier< T extends JsonWebToken >.IS_ACTIVE
static
初期値:
= new Predicate<JsonWebToken>() {
@Override
public boolean test(JsonWebToken t) throws VerificationException {
if (! t.isActive()) {
throw new TokenNotActiveException(t, "Token is not active");
}
return true;
}
}

Check for token being neither expired nor used before it gets valid.

参照
JsonWebToken::isActive()

◆ jws

◆ LOG

final Logger org.keycloak.TokenVerifier< T extends JsonWebToken >.LOG = Logger.getLogger(TokenVerifier.class.getName())
staticprivate

◆ publicKey

PublicKey org.keycloak.TokenVerifier< T extends JsonWebToken >.publicKey
private

◆ realmUrl

String org.keycloak.TokenVerifier< T extends JsonWebToken >.realmUrl
private

◆ secretKey

SecretKey org.keycloak.TokenVerifier< T extends JsonWebToken >.secretKey
private

◆ SUBJECT_EXISTS_CHECK

final Predicate<JsonWebToken> org.keycloak.TokenVerifier< T extends JsonWebToken >.SUBJECT_EXISTS_CHECK
static
初期値:
= new Predicate<JsonWebToken>() {
@Override
public boolean test(JsonWebToken t) throws VerificationException {
String subject = t.getSubject();
if (subject == null) {
throw new VerificationException("Subject missing in token");
}
return true;
}
}

◆ token

T org.keycloak.TokenVerifier< T extends JsonWebToken >.token
private

◆ tokenString

String org.keycloak.TokenVerifier< T extends JsonWebToken >.tokenString
private

◆ verifier


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