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

公開メンバ関数

KeyProvider create (KeycloakSession session, ComponentModel model)
 
boolean createFallbackKeys (KeycloakSession session, KeyUse keyUse, String algorithm)
 
String getHelpText ()
 
List< ProviderConfigProperty > getConfigProperties ()
 
String getId ()
 
void validateConfiguration (KeycloakSession session, RealmModel realm, ComponentModel model) throws ComponentValidationException
 

静的公開メンバ関数

static final ProviderConfigurationBuilder configurationBuilder ()
 
static KeyPair generateEcdsaKeyPair (String keySpecName)
 
static String convertECDomainParmNistRepToSecRep (String ecInNistRep)
 
static String convertECDomainParmNistRepToAlgorithm (String ecInNistRep)
 
static String convertAlgorithmToECDomainParmNistRep (String algorithm)
 

静的公開変数類

static final String ID = "ecdsa-generated"
 
static final String DEFAULT_ECDSA_ELLIPTIC_CURVE = "P-256"
 

静的限定公開変数類

static final String ECDSA_PRIVATE_KEY_KEY = "ecdsaPrivateKey"
 
static final String ECDSA_PUBLIC_KEY_KEY = "ecdsaPublicKey"
 
static final String ECDSA_ELLIPTIC_CURVE_KEY = "ecdsaEllipticCurveKey"
 
static ProviderConfigProperty ECDSA_ELLIPTIC_CURVE_PROPERTY
 

非公開メンバ関数

void generateKeys (ComponentModel model, String ecInNistRep)
 

静的非公開変数類

static final Logger logger = Logger.getLogger(GeneratedEcdsaKeyProviderFactory.class)
 
static final String HELP_TEXT = "Generates ECDSA keys"
 
static final List< ProviderConfigProperty > CONFIG_PROPERTIES
 

詳解

関数詳解

◆ configurationBuilder()

static final ProviderConfigurationBuilder org.keycloak.keys.AbstractEcdsaKeyProviderFactory.configurationBuilder ( )
inlinestaticinherited
46  {
47  return ProviderConfigurationBuilder.create()
48  .property(Attributes.PRIORITY_PROPERTY)
49  .property(Attributes.ENABLED_PROPERTY)
50  .property(Attributes.ACTIVE_PROPERTY);
51  }

◆ convertAlgorithmToECDomainParmNistRep()

static String org.keycloak.keys.AbstractEcdsaKeyProviderFactory.convertAlgorithmToECDomainParmNistRep ( String  algorithm)
inlinestaticinherited
105  {
106  switch(algorithm) {
107  case Algorithm.ES256 :
108  return "P-256";
109  case Algorithm.ES384 :
110  return "P-384";
111  case Algorithm.ES512 :
112  return "P-521";
113  default :
114  return null;
115  }
116  }

◆ convertECDomainParmNistRepToAlgorithm()

static String org.keycloak.keys.AbstractEcdsaKeyProviderFactory.convertECDomainParmNistRepToAlgorithm ( String  ecInNistRep)
inlinestaticinherited
92  {
93  switch(ecInNistRep) {
94  case "P-256" :
95  return Algorithm.ES256;
96  case "P-384" :
97  return Algorithm.ES384;
98  case "P-521" :
99  return Algorithm.ES512;
100  default :
101  return null;
102  }
103  }

◆ convertECDomainParmNistRepToSecRep()

static String org.keycloak.keys.AbstractEcdsaKeyProviderFactory.convertECDomainParmNistRepToSecRep ( String  ecInNistRep)
inlinestaticinherited
73  {
74  // convert Elliptic Curve Domain Parameter Name in NIST to SEC which is used to generate its EC key
75  String ecInSecRep = null;
76  switch(ecInNistRep) {
77  case "P-256" :
78  ecInSecRep = "secp256r1";
79  break;
80  case "P-384" :
81  ecInSecRep = "secp384r1";
82  break;
83  case "P-521" :
84  ecInSecRep = "secp521r1";
85  break;
86  default :
87  // return null
88  }
89  return ecInSecRep;
90  }

◆ create()

KeyProvider org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.create ( KeycloakSession  session,
ComponentModel  model 
)
inline
50  {
51  return new GeneratedEcdsaKeyProvider(session.getContext().getRealm(), model);
52  }

◆ createFallbackKeys()

boolean org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.createFallbackKeys ( KeycloakSession  session,
KeyUse  keyUse,
String  algorithm 
)
inline
55  {
56  if (keyUse.equals(KeyUse.SIG) && (algorithm.equals(Algorithm.ES256) || algorithm.equals(Algorithm.ES384) || algorithm.equals(Algorithm.ES512))) {
57  RealmModel realm = session.getContext().getRealm();
58 
59  ComponentModel generated = new ComponentModel();
60  generated.setName("fallback-" + algorithm);
61  generated.setParentId(realm.getId());
62  generated.setProviderId(ID);
63  generated.setProviderType(KeyProvider.class.getName());
64 
65  MultivaluedHashMap<String, String> config = new MultivaluedHashMap<>();
66  config.putSingle(Attributes.PRIORITY_KEY, "-100");
68  generated.setConfig(config);
69 
70  realm.addComponentModel(generated);
71 
72  return true;
73  } else {
74  return false;
75  }
76  }
static final String ECDSA_ELLIPTIC_CURVE_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:39
static String convertAlgorithmToECDomainParmNistRep(String algorithm)
Definition: AbstractEcdsaKeyProviderFactory.java:105
static final String ID
Definition: GeneratedEcdsaKeyProviderFactory.java:38

◆ generateEcdsaKeyPair()

static KeyPair org.keycloak.keys.AbstractEcdsaKeyProviderFactory.generateEcdsaKeyPair ( String  keySpecName)
inlinestaticinherited
61  {
62  try {
63  KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
64  SecureRandom randomGen = SecureRandom.getInstance("SHA1PRNG");
65  ECGenParameterSpec ecSpec = new ECGenParameterSpec(keySpecName);
66  keyGen.initialize(ecSpec, randomGen);
67  return keyGen.generateKeyPair();
68  } catch (Exception e) {
69  throw new RuntimeException(e);
70  }
71  }

◆ generateKeys()

void org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.generateKeys ( ComponentModel  model,
String  ecInNistRep 
)
inlineprivate
114  {
115  KeyPair keyPair;
116  try {
118  model.put(ECDSA_PRIVATE_KEY_KEY, Base64.encodeBytes(keyPair.getPrivate().getEncoded()));
119  model.put(ECDSA_PUBLIC_KEY_KEY, Base64.encodeBytes(keyPair.getPublic().getEncoded()));
120  model.put(ECDSA_ELLIPTIC_CURVE_KEY, ecInNistRep);
121  } catch (Throwable t) {
122  throw new ComponentValidationException("Failed to generate ECDSA keys", t);
123  }
124  }
static KeyPair generateEcdsaKeyPair(String keySpecName)
Definition: AbstractEcdsaKeyProviderFactory.java:61
static final String ECDSA_ELLIPTIC_CURVE_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:39
static String convertECDomainParmNistRepToSecRep(String ecInNistRep)
Definition: AbstractEcdsaKeyProviderFactory.java:73
static final String ECDSA_PUBLIC_KEY_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:38
static final String ECDSA_PRIVATE_KEY_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:37

◆ getConfigProperties()

List<ProviderConfigProperty> org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.getConfigProperties ( )
inline
84  {
85  return CONFIG_PROPERTIES;
86  }
static final List< ProviderConfigProperty > CONFIG_PROPERTIES
Definition: GeneratedEcdsaKeyProviderFactory.java:45

◆ getHelpText()

String org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.getHelpText ( )
inline
79  {
80  return HELP_TEXT;
81  }
static final String HELP_TEXT
Definition: GeneratedEcdsaKeyProviderFactory.java:40

◆ getId()

String org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.getId ( )
inline
89  {
90  return ID;
91  }
static final String ID
Definition: GeneratedEcdsaKeyProviderFactory.java:38

◆ validateConfiguration()

void org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.validateConfiguration ( KeycloakSession  session,
RealmModel  realm,
ComponentModel  model 
) throws ComponentValidationException
inline
94  {
95  super.validateConfiguration(session, realm, model);
96 
97  ConfigurationValidationHelper.check(model).checkList(ECDSA_ELLIPTIC_CURVE_PROPERTY, false);
98 
99  String ecInNistRep = model.get(ECDSA_ELLIPTIC_CURVE_KEY);
100  if (ecInNistRep == null) ecInNistRep = DEFAULT_ECDSA_ELLIPTIC_CURVE;
101 
102  if (!(model.contains(ECDSA_PRIVATE_KEY_KEY) && model.contains(ECDSA_PUBLIC_KEY_KEY))) {
103  generateKeys(model, ecInNistRep);
104  logger.debugv("Generated keys for {0}", realm.getName());
105  } else {
106  String currentEc = model.get(ECDSA_ELLIPTIC_CURVE_KEY);
107  if (!ecInNistRep.equals(currentEc)) {
108  generateKeys(model, ecInNistRep);
109  logger.debugv("Elliptic Curve changed, generating new keys for {0}", realm.getName());
110  }
111  }
112  }
static final String ECDSA_ELLIPTIC_CURVE_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:39
static final String DEFAULT_ECDSA_ELLIPTIC_CURVE
Definition: GeneratedEcdsaKeyProviderFactory.java:43
static final String ECDSA_PUBLIC_KEY_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:38
void generateKeys(ComponentModel model, String ecInNistRep)
Definition: GeneratedEcdsaKeyProviderFactory.java:114
static final String ECDSA_PRIVATE_KEY_KEY
Definition: AbstractEcdsaKeyProviderFactory.java:37
static ProviderConfigProperty ECDSA_ELLIPTIC_CURVE_PROPERTY
Definition: AbstractEcdsaKeyProviderFactory.java:42
static final Logger logger
Definition: GeneratedEcdsaKeyProviderFactory.java:36

メンバ詳解

◆ CONFIG_PROPERTIES

final List<ProviderConfigProperty> org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.CONFIG_PROPERTIES
staticprivate
初期値:
= AbstractEcdsaKeyProviderFactory.configurationBuilder()
.build()

◆ DEFAULT_ECDSA_ELLIPTIC_CURVE

final String org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.DEFAULT_ECDSA_ELLIPTIC_CURVE = "P-256"
static

◆ ECDSA_ELLIPTIC_CURVE_KEY

final String org.keycloak.keys.AbstractEcdsaKeyProviderFactory.ECDSA_ELLIPTIC_CURVE_KEY = "ecdsaEllipticCurveKey"
staticprotectedinherited

◆ ECDSA_ELLIPTIC_CURVE_PROPERTY

ProviderConfigProperty org.keycloak.keys.AbstractEcdsaKeyProviderFactory.ECDSA_ELLIPTIC_CURVE_PROPERTY
staticprotectedinherited
初期値:
= new ProviderConfigProperty(ECDSA_ELLIPTIC_CURVE_KEY, "Elliptic Curve", "Elliptic Curve used in ECDSA", LIST_TYPE,
String.valueOf(GeneratedEcdsaKeyProviderFactory.DEFAULT_ECDSA_ELLIPTIC_CURVE),
"P-256", "P-384", "P-521")

◆ ECDSA_PRIVATE_KEY_KEY

final String org.keycloak.keys.AbstractEcdsaKeyProviderFactory.ECDSA_PRIVATE_KEY_KEY = "ecdsaPrivateKey"
staticprotectedinherited

◆ ECDSA_PUBLIC_KEY_KEY

final String org.keycloak.keys.AbstractEcdsaKeyProviderFactory.ECDSA_PUBLIC_KEY_KEY = "ecdsaPublicKey"
staticprotectedinherited

◆ HELP_TEXT

final String org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.HELP_TEXT = "Generates ECDSA keys"
staticprivate

◆ ID

final String org.keycloak.keys.GeneratedEcdsaKeyProviderFactory.ID = "ecdsa-generated"
static

◆ logger

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

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