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

クラス

class  ProviderComparator
 

公開メンバ関数

 DefaultKeyManager (KeycloakSession session)
 
KeyWrapper getActiveKey (RealmModel realm, KeyUse use, String algorithm)
 
KeyWrapper getKey (RealmModel realm, String kid, KeyUse use, String algorithm)
 
List< KeyWrapper > getKeys (RealmModel realm, KeyUse use, String algorithm)
 
List< KeyWrapper > getKeys (RealmModel realm)
 
ActiveRsaKey getActiveRsaKey (RealmModel realm)
 
ActiveHmacKey getActiveHmacKey (RealmModel realm)
 
ActiveAesKey getActiveAesKey (RealmModel realm)
 
PublicKey getRsaPublicKey (RealmModel realm, String kid)
 
Certificate getRsaCertificate (RealmModel realm, String kid)
 
SecretKey getHmacSecretKey (RealmModel realm, String kid)
 
SecretKey getAesSecretKey (RealmModel realm, String kid)
 
List< RsaKeyMetadata > getRsaKeys (RealmModel realm)
 
List< SecretKeyMetadata > getHmacKeys (RealmModel realm)
 
List< SecretKeyMetadata > getAesKeys (RealmModel realm)
 

非公開メンバ関数

KeyWrapper getActiveKey (List< KeyProvider > providers, RealmModel realm, KeyUse use, String algorithm)
 
boolean matches (KeyWrapper key, KeyUse use, String algorithm)
 
List< KeyProvider > getProviders (RealmModel realm)
 

非公開変数類

final KeycloakSession session
 
final Map< String, List< KeyProvider > > providersMap = new HashMap<>()
 

静的非公開変数類

static final Logger logger = Logger.getLogger(DefaultKeyManager.class)
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ DefaultKeyManager()

org.keycloak.keys.DefaultKeyManager.DefaultKeyManager ( KeycloakSession  session)
inline
50  {
51  this.session = session;
52  }
final KeycloakSession session
Definition: DefaultKeyManager.java:47

関数詳解

◆ getActiveAesKey()

ActiveAesKey org.keycloak.keys.DefaultKeyManager.getActiveAesKey ( RealmModel  realm)
inline
163  {
164  KeyWrapper key = getActiveKey(realm, KeyUse.ENC, Algorithm.AES);
165  return new ActiveAesKey(key.getKid(), key.getSecretKey());
166  }
KeyWrapper getActiveKey(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:55

◆ getActiveHmacKey()

ActiveHmacKey org.keycloak.keys.DefaultKeyManager.getActiveHmacKey ( RealmModel  realm)
inline
156  {
157  KeyWrapper key = getActiveKey(realm, KeyUse.SIG, Algorithm.HS256);
158  return new ActiveHmacKey(key.getKid(), key.getSecretKey());
159  }
KeyWrapper getActiveKey(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:55

◆ getActiveKey() [1/2]

KeyWrapper org.keycloak.keys.DefaultKeyManager.getActiveKey ( RealmModel  realm,
KeyUse  use,
String  algorithm 
)
inline
55  {
56  KeyWrapper activeKey = getActiveKey(getProviders(realm), realm, use, algorithm);
57  if (activeKey != null) {
58  return activeKey;
59  }
60 
61  logger.debugv("Failed to find active key for realm, trying fallback: realm={0} algorithm={1} use={2}", realm.getName(), algorithm, use.name());
62 
63  for (ProviderFactory f : session.getKeycloakSessionFactory().getProviderFactories(KeyProvider.class)) {
64  KeyProviderFactory kf = (KeyProviderFactory) f;
65  if (kf.createFallbackKeys(session, use, algorithm)) {
66  providersMap.remove(realm.getId());
67  List<KeyProvider> providers = getProviders(realm);
68  activeKey = getActiveKey(providers, realm, use, algorithm);
69  if (activeKey != null) {
70  logger.warnv("Fallback key created: realm={0} algorithm={1} use={2}", realm.getName(), algorithm, use.name());
71  return activeKey;
72  } else {
73  break;
74  }
75  }
76  }
77 
78  logger.errorv("Failed to create fallback key for realm: realm={0} algorithm={1} use={2", realm.getName(), algorithm, use.name());
79  throw new RuntimeException("Failed to find key: realm=" + realm.getName() + " algorithm=" + algorithm + " use=" + use.name());
80  }
List< KeyProvider > getProviders(RealmModel realm)
Definition: DefaultKeyManager.java:248
final KeycloakSession session
Definition: DefaultKeyManager.java:47
final Map< String, List< KeyProvider > > providersMap
Definition: DefaultKeyManager.java:48
KeyWrapper getActiveKey(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:55
static final Logger logger
Definition: DefaultKeyManager.java:45

◆ getActiveKey() [2/2]

KeyWrapper org.keycloak.keys.DefaultKeyManager.getActiveKey ( List< KeyProvider >  providers,
RealmModel  realm,
KeyUse  use,
String  algorithm 
)
inlineprivate
82  {
83  for (KeyProvider p : providers) {
84  for (KeyWrapper key : p .getKeys()) {
85  if (key.getStatus().isActive() && matches(key, use, algorithm)) {
86  if (logger.isTraceEnabled()) {
87  logger.tracev("Active key found: realm={0} kid={1} algorithm={2} use={3}", realm.getName(), key.getKid(), algorithm, use.name());
88  }
89 
90  return key;
91  }
92  }
93  }
94  return null;
95  }
boolean matches(KeyWrapper key, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:244
List< KeyWrapper > getKeys(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:124
static final Logger logger
Definition: DefaultKeyManager.java:45

◆ getActiveRsaKey()

ActiveRsaKey org.keycloak.keys.DefaultKeyManager.getActiveRsaKey ( RealmModel  realm)
inline
149  {
150  KeyWrapper key = getActiveKey(realm, KeyUse.SIG, Algorithm.RS256);
151  return new ActiveRsaKey(key.getKid(), (PrivateKey) key.getSignKey(), (PublicKey) key.getVerifyKey(), key.getCertificate());
152  }
KeyWrapper getActiveKey(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:55

◆ getAesKeys()

List<SecretKeyMetadata> org.keycloak.keys.DefaultKeyManager.getAesKeys ( RealmModel  realm)
inline
230  {
231  List<SecretKeyMetadata> keys = new LinkedList<>();
232  for (KeyWrapper key : getKeys(realm, KeyUse.ENC, Algorithm.AES)) {
233  SecretKeyMetadata m = new SecretKeyMetadata();
234  m.setKid(key.getKid());
235  m.setProviderId(key.getProviderId());
236  m.setProviderPriority(key.getProviderPriority());
237  m.setStatus(key.getStatus());
238 
239  keys.add(m);
240  }
241  return keys;
242  }
List< KeyWrapper > getKeys(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:124

◆ getAesSecretKey()

SecretKey org.keycloak.keys.DefaultKeyManager.getAesSecretKey ( RealmModel  realm,
String  kid 
)
inline
191  {
192  KeyWrapper key = getKey(realm, kid, KeyUse.ENC, Algorithm.AES);
193  return key.getSecretKey();
194  }
KeyWrapper getKey(RealmModel realm, String kid, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:98

◆ getHmacKeys()

List<SecretKeyMetadata> org.keycloak.keys.DefaultKeyManager.getHmacKeys ( RealmModel  realm)
inline
215  {
216  List<SecretKeyMetadata> keys = new LinkedList<>();
217  for (KeyWrapper key : getKeys(realm, KeyUse.SIG, Algorithm.HS256)) {
218  SecretKeyMetadata m = new SecretKeyMetadata();
219  m.setKid(key.getKid());
220  m.setProviderId(key.getProviderId());
221  m.setProviderPriority(key.getProviderPriority());
222  m.setStatus(key.getStatus());
223 
224  keys.add(m);
225  }
226  return keys;
227  }
List< KeyWrapper > getKeys(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:124

◆ getHmacSecretKey()

SecretKey org.keycloak.keys.DefaultKeyManager.getHmacSecretKey ( RealmModel  realm,
String  kid 
)
inline
184  {
185  KeyWrapper key = getKey(realm, kid, KeyUse.SIG, Algorithm.HS256);
186  return key != null ? key.getSecretKey() : null;
187  }
KeyWrapper getKey(RealmModel realm, String kid, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:98

◆ getKey()

KeyWrapper org.keycloak.keys.DefaultKeyManager.getKey ( RealmModel  realm,
String  kid,
KeyUse  use,
String  algorithm 
)
inline
98  {
99  if (kid == null) {
100  logger.warnv("kid is null, can't find public key", realm.getName(), kid);
101  return null;
102  }
103 
104  for (KeyProvider p : getProviders(realm)) {
105  for (KeyWrapper key : p.getKeys()) {
106  if (key.getKid().equals(kid) && key.getStatus().isEnabled() && matches(key, use, algorithm)) {
107  if (logger.isTraceEnabled()) {
108  logger.tracev("Found key: realm={0} kid={1} algorithm={2} use={3}", realm.getName(), key.getKid(), algorithm, use.name());
109  }
110 
111  return key;
112  }
113  }
114  }
115 
116  if (logger.isTraceEnabled()) {
117  logger.tracev("Failed to find public key: realm={0} kid={1} algorithm={2} use={3}", realm.getName(), kid, algorithm, use.name());
118  }
119 
120  return null;
121  }
List< KeyProvider > getProviders(RealmModel realm)
Definition: DefaultKeyManager.java:248
boolean matches(KeyWrapper key, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:244
static final Logger logger
Definition: DefaultKeyManager.java:45

◆ getKeys() [1/2]

List<KeyWrapper> org.keycloak.keys.DefaultKeyManager.getKeys ( RealmModel  realm,
KeyUse  use,
String  algorithm 
)
inline
124  {
125  List<KeyWrapper> keys = new LinkedList<>();
126  for (KeyProvider p : getProviders(realm)) {
127  for (KeyWrapper key : p .getKeys()) {
128  if (key.getStatus().isEnabled() && matches(key, use, algorithm)) {
129  keys.add(key);
130  }
131  }
132  }
133  return keys;
134  }
List< KeyProvider > getProviders(RealmModel realm)
Definition: DefaultKeyManager.java:248
boolean matches(KeyWrapper key, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:244
List< KeyWrapper > getKeys(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:124

◆ getKeys() [2/2]

List<KeyWrapper> org.keycloak.keys.DefaultKeyManager.getKeys ( RealmModel  realm)
inline
137  {
138  List<KeyWrapper> keys = new LinkedList<>();
139  for (KeyProvider p : getProviders(realm)) {
140  for (KeyWrapper key : p .getKeys()) {
141  keys.add(key);
142  }
143  }
144  return keys;
145  }
List< KeyProvider > getProviders(RealmModel realm)
Definition: DefaultKeyManager.java:248
List< KeyWrapper > getKeys(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:124

◆ getProviders()

List<KeyProvider> org.keycloak.keys.DefaultKeyManager.getProviders ( RealmModel  realm)
inlineprivate
248  {
249  List<KeyProvider> providers = providersMap.get(realm.getId());
250  if (providers == null) {
251  providers = new LinkedList<>();
252 
253  List<ComponentModel> components = new LinkedList<>(realm.getComponents(realm.getId(), KeyProvider.class.getName()));
254  components.sort(new ProviderComparator());
255 
256  for (ComponentModel c : components) {
257  try {
258  ProviderFactory<KeyProvider> f = session.getKeycloakSessionFactory().getProviderFactory(KeyProvider.class, c.getProviderId());
259  KeyProviderFactory factory = (KeyProviderFactory) f;
260  KeyProvider provider = factory.create(session, c);
261  session.enlistForClose(provider);
262  providers.add(provider);
263  } catch (Throwable t) {
264  logger.errorv(t, "Failed to load provider {0}", c.getId());
265  }
266  }
267 
268  providersMap.put(realm.getId(), providers);
269  }
270  return providers;
271  }
final KeycloakSession session
Definition: DefaultKeyManager.java:47
final Map< String, List< KeyProvider > > providersMap
Definition: DefaultKeyManager.java:48
static final Logger logger
Definition: DefaultKeyManager.java:45

◆ getRsaCertificate()

Certificate org.keycloak.keys.DefaultKeyManager.getRsaCertificate ( RealmModel  realm,
String  kid 
)
inline
177  {
178  KeyWrapper key = getKey(realm, kid, KeyUse.SIG, Algorithm.RS256);
179  return key != null ? key.getCertificate() : null;
180  }
KeyWrapper getKey(RealmModel realm, String kid, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:98

◆ getRsaKeys()

List<RsaKeyMetadata> org.keycloak.keys.DefaultKeyManager.getRsaKeys ( RealmModel  realm)
inline
198  {
199  List<RsaKeyMetadata> keys = new LinkedList<>();
200  for (KeyWrapper key : getKeys(realm, KeyUse.SIG, Algorithm.RS256)) {
201  RsaKeyMetadata m = new RsaKeyMetadata();
202  m.setCertificate(key.getCertificate());
203  m.setPublicKey((PublicKey) key.getVerifyKey());
204  m.setKid(key.getKid());
205  m.setProviderId(key.getProviderId());
206  m.setProviderPriority(key.getProviderPriority());
207  m.setStatus(key.getStatus());
208 
209  keys.add(m);
210  }
211  return keys;
212  }
List< KeyWrapper > getKeys(RealmModel realm, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:124

◆ getRsaPublicKey()

PublicKey org.keycloak.keys.DefaultKeyManager.getRsaPublicKey ( RealmModel  realm,
String  kid 
)
inline
170  {
171  KeyWrapper key = getKey(realm, kid, KeyUse.SIG, Algorithm.RS256);
172  return key != null ? (PublicKey) key.getVerifyKey() : null;
173  }
KeyWrapper getKey(RealmModel realm, String kid, KeyUse use, String algorithm)
Definition: DefaultKeyManager.java:98

◆ matches()

boolean org.keycloak.keys.DefaultKeyManager.matches ( KeyWrapper  key,
KeyUse  use,
String  algorithm 
)
inlineprivate
244  {
245  return use.equals(key.getUse()) && key.getAlgorithm().equals(algorithm);
246  }

メンバ詳解

◆ logger

final Logger org.keycloak.keys.DefaultKeyManager.logger = Logger.getLogger(DefaultKeyManager.class)
staticprivate

◆ providersMap

final Map<String, List<KeyProvider> > org.keycloak.keys.DefaultKeyManager.providersMap = new HashMap<>()
private

◆ session

final KeycloakSession org.keycloak.keys.DefaultKeyManager.session
private

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