mitreid-connect
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService クラス
org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService の継承関係図
Inheritance graph
org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService 連携図
Collaboration graph

公開メンバ関数

 DefaultJWTSigningAndValidationService (Map< String, JWK > keys) throws NoSuchAlgorithmException, InvalidKeySpecException
 
 DefaultJWTSigningAndValidationService (JWKSetKeyStore keyStore) throws NoSuchAlgorithmException, InvalidKeySpecException
 
String getDefaultSignerKeyId ()
 
void setDefaultSignerKeyId (String defaultSignerId)
 
JWSAlgorithm getDefaultSigningAlgorithm ()
 
void setDefaultSigningAlgorithmName (String algName)
 
String getDefaultSigningAlgorithmName ()
 
void signJwt (SignedJWT jwt)
 
void signJwt (SignedJWT jwt, JWSAlgorithm alg)
 
boolean validateSignature (SignedJWT jwt)
 
Map< String, JWK > getAllPublicKeys ()
 
Collection< JWSAlgorithm > getAllSigningAlgsSupported ()
 

非公開メンバ関数

void buildSignersAndVerifiers () throws NoSuchAlgorithmException, InvalidKeySpecException
 

非公開変数類

Map< String, JWSSigner > signers = new HashMap<>()
 
Map< String, JWSVerifier > verifiers = new HashMap<>()
 
String defaultSignerKeyId
 
JWSAlgorithm defaultAlgorithm
 
Map< String, JWK > keys = new HashMap<>()
 

静的非公開変数類

static final Logger logger = LoggerFactory.getLogger(DefaultJWTSigningAndValidationService.class)
 

詳解

構築子と解体子

◆ DefaultJWTSigningAndValidationService() [1/2]

org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.DefaultJWTSigningAndValidationService ( Map< String, JWK >  keys) throws NoSuchAlgorithmException, InvalidKeySpecException
inline

Build this service based on the keys given. All public keys will be used to make verifiers, all private keys will be used to make signers.

引数
keysA map of key identifier to key
例外
InvalidKeySpecExceptionIf the keys in the JWKs are not valid
NoSuchAlgorithmExceptionIf there is no appropriate algorithm to tie the keys to.
83  {
84  this.keys = keys;
86  }
Map< String, JWK > keys
Definition: DefaultJWTSigningAndValidationService.java:69
void buildSignersAndVerifiers()
Definition: DefaultJWTSigningAndValidationService.java:158

◆ DefaultJWTSigningAndValidationService() [2/2]

org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.DefaultJWTSigningAndValidationService ( JWKSetKeyStore  keyStore) throws NoSuchAlgorithmException, InvalidKeySpecException
inline

Build this service based on the given keystore. All keys must have a key id (

kid

) field in order to be used.

引数
keyStorethe keystore to load all keys from
例外
InvalidKeySpecExceptionIf the keys in the JWKs are not valid
NoSuchAlgorithmExceptionIf there is no appropriate algorithm to tie the keys to.
100  {
101  // convert all keys in the keystore to a map based on key id
102  if (keyStore!= null && keyStore.getJwkSet() != null) {
103  for (JWK key : keyStore.getKeys()) {
104  if (!Strings.isNullOrEmpty(key.getKeyID())) {
105  // use the key ID that's built into the key itself
106  this.keys.put(key.getKeyID(), key);
107  } else {
108  // create a random key id
109  String fakeKid = UUID.randomUUID().toString();
110  this.keys.put(fakeKid, key);
111  }
112  }
113  }
115  }
Map< String, JWK > keys
Definition: DefaultJWTSigningAndValidationService.java:69
void buildSignersAndVerifiers()
Definition: DefaultJWTSigningAndValidationService.java:158

関数詳解

◆ buildSignersAndVerifiers()

void org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.buildSignersAndVerifiers ( ) throws NoSuchAlgorithmException, InvalidKeySpecException
inlineprivate

Build all of the signers and verifiers for this based on the key map.

例外
InvalidKeySpecExceptionIf the keys in the JWKs are not valid
NoSuchAlgorithmExceptionIf there is no appropriate algorithm to tie the keys to.
158  {
159  for (Map.Entry<String, JWK> jwkEntry : keys.entrySet()) {
160 
161  String id = jwkEntry.getKey();
162  JWK jwk = jwkEntry.getValue();
163 
164  try {
165  if (jwk instanceof RSAKey) {
166  // build RSA signers & verifiers
167 
168  if (jwk.isPrivate()) { // only add the signer if there's a private key
169  RSASSASigner signer = new RSASSASigner((RSAKey) jwk);
170  signers.put(id, signer);
171  }
172 
173  RSASSAVerifier verifier = new RSASSAVerifier((RSAKey) jwk);
174  verifiers.put(id, verifier);
175 
176  } else if (jwk instanceof ECKey) {
177  // build EC signers & verifiers
178 
179  if (jwk.isPrivate()) {
180  ECDSASigner signer = new ECDSASigner((ECKey) jwk);
181  signers.put(id, signer);
182  }
183 
184  ECDSAVerifier verifier = new ECDSAVerifier((ECKey) jwk);
185  verifiers.put(id, verifier);
186 
187  } else if (jwk instanceof OctetSequenceKey) {
188  // build HMAC signers & verifiers
189 
190  if (jwk.isPrivate()) { // technically redundant check because all HMAC keys are private
191  MACSigner signer = new MACSigner((OctetSequenceKey) jwk);
192  signers.put(id, signer);
193  }
194 
195  MACVerifier verifier = new MACVerifier((OctetSequenceKey) jwk);
196  verifiers.put(id, verifier);
197 
198  } else {
199  logger.warn("Unknown key type: " + jwk);
200  }
201  } catch (JOSEException e) {
202  logger.warn("Exception loading signer/verifier", e);
203  }
204  }
205 
206  if (defaultSignerKeyId == null && keys.size() == 1) {
207  // if there's only one key, it's the default
208  setDefaultSignerKeyId(keys.keySet().iterator().next());
209  }
210  }
Map< String, JWSVerifier > verifiers
Definition: DefaultJWTSigningAndValidationService.java:57
Map< String, JWK > keys
Definition: DefaultJWTSigningAndValidationService.java:69
void setDefaultSignerKeyId(String defaultSignerId)
Definition: DefaultJWTSigningAndValidationService.java:129
String defaultSignerKeyId
Definition: DefaultJWTSigningAndValidationService.java:64
Map< String, JWSSigner > signers
Definition: DefaultJWTSigningAndValidationService.java:54
static final Logger logger
Definition: DefaultJWTSigningAndValidationService.java:62

◆ getAllPublicKeys()

Map<String, JWK> org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.getAllPublicKeys ( )
inline

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

276  {
277  Map<String, JWK> pubKeys = new HashMap<>();
278 
279  // pull all keys out of the verifiers if we know how
280  for (String keyId : keys.keySet()) {
281  JWK key = keys.get(keyId);
282  JWK pub = key.toPublicJWK();
283  if (pub != null) {
284  pubKeys.put(keyId, pub);
285  }
286  }
287 
288  return pubKeys;
289  }
Map< String, JWK > keys
Definition: DefaultJWTSigningAndValidationService.java:69

◆ getAllSigningAlgsSupported()

Collection<JWSAlgorithm> org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.getAllSigningAlgsSupported ( )
inline

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

295  {
296 
297  Set<JWSAlgorithm> algs = new HashSet<>();
298 
299  for (JWSSigner signer : signers.values()) {
300  algs.addAll(signer.supportedJWSAlgorithms());
301  }
302 
303  for (JWSVerifier verifier : verifiers.values()) {
304  algs.addAll(verifier.supportedJWSAlgorithms());
305  }
306 
307  return algs;
308 
309  }
Map< String, JWSVerifier > verifiers
Definition: DefaultJWTSigningAndValidationService.java:57
Map< String, JWSSigner > signers
Definition: DefaultJWTSigningAndValidationService.java:54

◆ getDefaultSignerKeyId()

String org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.getDefaultSignerKeyId ( )
inline
戻り値
the defaultSignerKeyId

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

122  {
123  return defaultSignerKeyId;
124  }
String defaultSignerKeyId
Definition: DefaultJWTSigningAndValidationService.java:64

◆ getDefaultSigningAlgorithm()

JWSAlgorithm org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.getDefaultSigningAlgorithm ( )
inline
戻り値

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

137  {
138  return defaultAlgorithm;
139  }
JWSAlgorithm defaultAlgorithm
Definition: DefaultJWTSigningAndValidationService.java:66

◆ getDefaultSigningAlgorithmName()

String org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.getDefaultSigningAlgorithmName ( )
inline
145  {
146  if (defaultAlgorithm != null) {
147  return defaultAlgorithm.getName();
148  } else {
149  return null;
150  }
151  }
JWSAlgorithm defaultAlgorithm
Definition: DefaultJWTSigningAndValidationService.java:66

◆ setDefaultSignerKeyId()

void org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.setDefaultSignerKeyId ( String  defaultSignerId)
inline
引数
defaultSignerKeyIdthe defaultSignerKeyId to set
129  {
130  this.defaultSignerKeyId = defaultSignerId;
131  }
String defaultSignerKeyId
Definition: DefaultJWTSigningAndValidationService.java:64

◆ setDefaultSigningAlgorithmName()

void org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.setDefaultSigningAlgorithmName ( String  algName)
inline
141  {
142  defaultAlgorithm = JWSAlgorithm.parse(algName);
143  }
JWSAlgorithm defaultAlgorithm
Definition: DefaultJWTSigningAndValidationService.java:66

◆ signJwt() [1/2]

void org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.signJwt ( SignedJWT  jwt)
inline

Sign a jwt in place using the configured default signer.

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

216  {
217  if (getDefaultSignerKeyId() == null) {
218  throw new IllegalStateException("Tried to call default signing with no default signer ID set");
219  }
220 
221  JWSSigner signer = signers.get(getDefaultSignerKeyId());
222 
223  try {
224  jwt.sign(signer);
225  } catch (JOSEException e) {
226 
227  logger.error("Failed to sign JWT, error was: ", e);
228  }
229 
230  }
String getDefaultSignerKeyId()
Definition: DefaultJWTSigningAndValidationService.java:122
Map< String, JWSSigner > signers
Definition: DefaultJWTSigningAndValidationService.java:54
static final Logger logger
Definition: DefaultJWTSigningAndValidationService.java:62

◆ signJwt() [2/2]

void org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.signJwt ( SignedJWT  jwt,
JWSAlgorithm  alg 
)
inline

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

233  {
234 
235  JWSSigner signer = null;
236 
237  for (JWSSigner s : signers.values()) {
238  if (s.supportedJWSAlgorithms().contains(alg)) {
239  signer = s;
240  break;
241  }
242  }
243 
244  if (signer == null) {
245  //If we can't find an algorithm that matches, we can't sign
246  logger.error("No matching algirthm found for alg=" + alg);
247 
248  }
249 
250  try {
251  jwt.sign(signer);
252  } catch (JOSEException e) {
253 
254  logger.error("Failed to sign JWT, error was: ", e);
255  }
256 
257  }
Map< String, JWSSigner > signers
Definition: DefaultJWTSigningAndValidationService.java:54
static final Logger logger
Definition: DefaultJWTSigningAndValidationService.java:62

◆ validateSignature()

boolean org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.validateSignature ( SignedJWT  jwt)
inline

org.mitre.jwt.signer.service.JWTSigningAndValidationServiceを実装しています。

260  {
261 
262  for (JWSVerifier verifier : verifiers.values()) {
263  try {
264  if (jwt.verify(verifier)) {
265  return true;
266  }
267  } catch (JOSEException e) {
268 
269  logger.error("Failed to validate signature with " + verifier + " error message: " + e.getMessage());
270  }
271  }
272  return false;
273  }
Map< String, JWSVerifier > verifiers
Definition: DefaultJWTSigningAndValidationService.java:57
static final Logger logger
Definition: DefaultJWTSigningAndValidationService.java:62

メンバ詳解

◆ defaultAlgorithm

JWSAlgorithm org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.defaultAlgorithm
private

◆ defaultSignerKeyId

String org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.defaultSignerKeyId
private

◆ keys

Map<String, JWK> org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.keys = new HashMap<>()
private

◆ logger

final Logger org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.logger = LoggerFactory.getLogger(DefaultJWTSigningAndValidationService.class)
staticprivate

Logger for this class

◆ signers

Map<String, JWSSigner> org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.signers = new HashMap<>()
private

◆ verifiers

Map<String, JWSVerifier> org.mitre.jwt.signer.service.impl.DefaultJWTSigningAndValidationService.verifiers = new HashMap<>()
private

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