keycloak-service
クラス | 公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.protocol.docker.DockerKeyIdentifier クラス
org.keycloak.protocol.docker.DockerKeyIdentifier 連携図
Collaboration graph

クラス

class  DelimitingCollector
 

公開メンバ関数

 DockerKeyIdentifier (final Key key) throws InstantiationException
 
String toString ()
 
boolean equals (final Object o)
 
int hashCode ()
 

非公開メンバ関数

Stream< Byte > byteStream (final byte[] bytes)
 
byte [] truncateToBitLength (final int bitLength, final byte[] arrayToTruncate)
 

非公開変数類

final String identifier
 

詳解

The “kid” field has to be in a libtrust fingerprint compatible format. Such a format can be generated by following steps: 1) Take the DER encoded public key which the JWT token was signed against. 2) Create a SHA256 hash out of it and truncate to 240bits. 3) Split the result into 12 base32 encoded groups with : as delimiter.

Ex: "kid": "PYYO:TEWU:V7JH:26JV:AQTZ:LJC3:SXVJ:XGHA:34F2:2LAQ:ZRMK:Z7Q6"

参照
https://docs.docker.com/registry/spec/auth/jwt/
https://github.com/docker/libtrust/blob/master/key.go#L24

構築子と解体子

◆ DockerKeyIdentifier()

org.keycloak.protocol.docker.DockerKeyIdentifier.DockerKeyIdentifier ( final Key  key) throws InstantiationException
inline
35  {
36  try {
37  final MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
38  final byte[] hashed = sha256.digest(key.getEncoded());
39  final byte[] hashedTruncated = truncateToBitLength(240, hashed);
40  final String base32Id = Base32.encode(hashedTruncated);
41  identifier = byteStream(base32Id.getBytes()).collect(new DelimitingCollector());
42  } catch (final NoSuchAlgorithmException e) {
43  throw new InstantiationException("Could not instantiate docker key identifier, no SHA-256 algorithm available.");
44  }
45  }
final String identifier
Definition: DockerKeyIdentifier.java:33
Stream< Byte > byteStream(final byte[] bytes)
Definition: DockerKeyIdentifier.java:48
byte [] truncateToBitLength(final int bitLength, final byte[] arrayToTruncate)
Definition: DockerKeyIdentifier.java:57

関数詳解

◆ byteStream()

Stream<Byte> org.keycloak.protocol.docker.DockerKeyIdentifier.byteStream ( final byte []  bytes)
inlineprivate
48  {
49  final Collection<Byte> colectionedBytes = new ArrayList<>();
50  for (final byte aByte : bytes) {
51  colectionedBytes.add(aByte);
52  }
53 
54  return colectionedBytes.stream();
55  }

◆ equals()

boolean org.keycloak.protocol.docker.DockerKeyIdentifier.equals ( final Object  o)
inline
72  {
73  if (this == o) return true;
74  if (!(o instanceof DockerKeyIdentifier)) return false;
75 
76  final DockerKeyIdentifier that = (DockerKeyIdentifier) o;
77 
78  return identifier != null ? identifier.equals(that.identifier) : that.identifier == null;
79 
80  }
final String identifier
Definition: DockerKeyIdentifier.java:33
DockerKeyIdentifier(final Key key)
Definition: DockerKeyIdentifier.java:35

◆ hashCode()

int org.keycloak.protocol.docker.DockerKeyIdentifier.hashCode ( )
inline
83  {
84  return identifier != null ? identifier.hashCode() : 0;
85  }
final String identifier
Definition: DockerKeyIdentifier.java:33

◆ toString()

String org.keycloak.protocol.docker.DockerKeyIdentifier.toString ( )
inline
67  {
68  return identifier;
69  }
final String identifier
Definition: DockerKeyIdentifier.java:33

◆ truncateToBitLength()

byte [] org.keycloak.protocol.docker.DockerKeyIdentifier.truncateToBitLength ( final int  bitLength,
final byte []  arrayToTruncate 
)
inlineprivate
57  {
58  if (bitLength % 8 != 0) {
59  throw new IllegalArgumentException("Bit length for truncation of byte array given as a number not divisible by 8");
60  }
61 
62  final int numberOfBytes = bitLength / 8;
63  return Arrays.copyOfRange(arrayToTruncate, 0, numberOfBytes);
64  }

メンバ詳解

◆ identifier

final String org.keycloak.protocol.docker.DockerKeyIdentifier.identifier
private

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