keycloak-service
公開メンバ関数 | 限定公開メンバ関数 | 全メンバ一覧
org.keycloak.broker.saml.SAMLEndpoint.PostBinding クラス
org.keycloak.broker.saml.SAMLEndpoint.PostBinding の継承関係図
Inheritance graph
org.keycloak.broker.saml.SAMLEndpoint.PostBinding 連携図
Collaboration graph

公開メンバ関数

Response execute (String samlRequest, String samlResponse, String relayState, String clientId)
 
Response handleSamlResponse (String samlResponse, String relayState, String clientId)
 

限定公開メンバ関数

void verifySignature (String key, SAMLDocumentHolder documentHolder) throws VerificationException
 
SAMLDocumentHolder extractRequestDocument (String samlRequest)
 
SAMLDocumentHolder extractResponseDocument (String response)
 
String getBindingType ()
 
Response basicChecks (String samlRequest, String samlResponse)
 
KeyLocator getIDPKeyLocator ()
 
Response handleSamlRequest (String samlRequest, String relayState)
 
Response logoutRequest (LogoutRequestType request, String relayState)
 
Response handleLoginResponse (String samlResponse, SAMLDocumentHolder holder, ResponseType responseType, String relayState, String clientId)
 
Response handleLogoutResponse (SAMLDocumentHolder holder, StatusResponseType responseType, String relayState)
 

詳解

関数詳解

◆ basicChecks()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.basicChecks ( String  samlRequest,
String  samlResponse 
)
inlineprotectedinherited
193  {
194  if (!checkSsl()) {
195  event.event(EventType.LOGIN);
196  event.error(Errors.SSL_REQUIRED);
197  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.HTTPS_REQUIRED);
198  }
199  if (!realm.isEnabled()) {
200  event.event(EventType.LOGIN_ERROR);
201  event.error(Errors.REALM_DISABLED);
202  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.REALM_NOT_ENABLED);
203  }
204 
205  if (samlRequest == null && samlResponse == null) {
206  event.event(EventType.LOGIN);
207  event.error(Errors.INVALID_REQUEST);
208  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REQUEST);
209 
210  }
211  return null;
212  }
RealmModel realm
Definition: SAMLEndpoint.java:112
boolean checkSsl()
Definition: SAMLEndpoint.java:185
KeycloakSession session
Definition: SAMLEndpoint.java:120

◆ execute()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.execute ( String  samlRequest,
String  samlResponse,
String  relayState,
String  clientId 
)
inlineinherited
238  {
239  event = new EventBuilder(realm, session, clientConnection);
240  Response response = basicChecks(samlRequest, samlResponse);
241  if (response != null) return response;
242  if (samlRequest != null) return handleSamlRequest(samlRequest, relayState);
243  else return handleSamlResponse(samlResponse, relayState, clientId);
244  }
Response basicChecks(String samlRequest, String samlResponse)
Definition: SAMLEndpoint.java:193
RealmModel realm
Definition: SAMLEndpoint.java:112
Response handleSamlRequest(String samlRequest, String relayState)
Definition: SAMLEndpoint.java:246
Response handleSamlResponse(String samlResponse, String relayState, String clientId)
Definition: SAMLEndpoint.java:464
ClientConnection clientConnection
Definition: SAMLEndpoint.java:123
KeycloakSession session
Definition: SAMLEndpoint.java:120

◆ extractRequestDocument()

SAMLDocumentHolder org.keycloak.broker.saml.SAMLEndpoint.PostBinding.extractRequestDocument ( String  samlRequest)
inlineprotected
542  {
543  return SAMLRequestParser.parseRequestPostBinding(samlRequest);
544  }

◆ extractResponseDocument()

SAMLDocumentHolder org.keycloak.broker.saml.SAMLEndpoint.PostBinding.extractResponseDocument ( String  response)
inlineprotected
546  {
547  byte[] samlBytes = PostBindingUtil.base64Decode(response);
548  return SAMLRequestParser.parseResponseDocument(samlBytes);
549  }

◆ getBindingType()

String org.keycloak.broker.saml.SAMLEndpoint.PostBinding.getBindingType ( )
inlineprotected
552  {
553  return SamlProtocol.SAML_POST_BINDING;
554  }

◆ getIDPKeyLocator()

KeyLocator org.keycloak.broker.saml.SAMLEndpoint.Binding.getIDPKeyLocator ( )
inlineprotectedinherited
219  {
220  List<Key> keys = new LinkedList<>();
221 
222  for (String signingCertificate : config.getSigningCertificates()) {
223  X509Certificate cert = null;
224  try {
225  cert = XMLSignatureUtil.getX509CertificateFromKeyInfoString(signingCertificate.replaceAll("\\s", ""));
226  cert.checkValidity();
227  keys.add(cert.getPublicKey());
228  } catch (CertificateException e) {
229  logger.warnf("Ignoring invalid certificate: %s", cert);
230  } catch (ProcessingException e) {
231  throw new RuntimeException(e);
232  }
233  }
234 
235  return new HardcodedKeyLocator(keys);
236  }
static final Logger logger
Definition: SAMLEndpoint.java:104
String [] getSigningCertificates()
Definition: SAMLIdentityProviderConfig.java:114
SAMLIdentityProviderConfig config
Definition: SAMLEndpoint.java:114

◆ handleLoginResponse()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.handleLoginResponse ( String  samlResponse,
SAMLDocumentHolder  holder,
ResponseType  responseType,
String  relayState,
String  clientId 
)
inlineprotectedinherited
350  {
351 
352  try {
353  KeyManager.ActiveRsaKey keys = session.keys().getActiveRsaKey(realm);
354  if (! isSuccessfulSamlResponse(responseType)) {
355  String statusMessage = responseType.getStatus() == null ? Messages.IDENTITY_PROVIDER_UNEXPECTED_ERROR : responseType.getStatus().getStatusMessage();
356  return callback.error(relayState, statusMessage);
357  }
358  if (responseType.getAssertions() == null || responseType.getAssertions().isEmpty()) {
359  return callback.error(relayState, Messages.IDENTITY_PROVIDER_UNEXPECTED_ERROR);
360  }
361 
362  boolean assertionIsEncrypted = AssertionUtil.isAssertionEncrypted(responseType);
363 
364  if (config.isWantAssertionsEncrypted() && !assertionIsEncrypted) {
365  logger.error("The assertion is not encrypted, which is required.");
366  event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
367  event.error(Errors.INVALID_SAML_RESPONSE);
368  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REQUESTER);
369  }
370 
371  Element assertionElement;
372 
373  if (assertionIsEncrypted) {
374  // This methods writes the parsed and decrypted assertion back on the responseType parameter:
375  assertionElement = AssertionUtil.decryptAssertion(holder, responseType, keys.getPrivateKey());
376  } else {
377  /* We verify the assertion using original document to handle cases where the IdP
378  includes whitespace and/or newlines inside tags. */
379  assertionElement = DocumentUtil.getElement(holder.getSamlDocument(), new QName(JBossSAMLConstants.ASSERTION.get()));
380  }
381 
382  boolean signed = AssertionUtil.isSignedElement(assertionElement);
383  if ((config.isWantAssertionsSigned() && !signed)
384  || (signed && config.isValidateSignature() && !AssertionUtil.isSignatureValid(assertionElement, getIDPKeyLocator()))) {
385  logger.error("validation failed");
386  event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
387  event.error(Errors.INVALID_SIGNATURE);
388  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REQUESTER);
389  }
390 
391  AssertionType assertion = responseType.getAssertions().get(0).getAssertion();
392 
393  SubjectType subject = assertion.getSubject();
394  SubjectType.STSubType subType = subject.getSubType();
395  NameIDType subjectNameID = (NameIDType) subType.getBaseID();
396  //Map<String, String> notes = new HashMap<>();
397  BrokeredIdentityContext identity = new BrokeredIdentityContext(subjectNameID.getValue());
398  identity.getContextData().put(SAML_LOGIN_RESPONSE, responseType);
399  identity.getContextData().put(SAML_ASSERTION, assertion);
400  if (clientId != null && ! clientId.trim().isEmpty()) {
401  identity.getContextData().put(SAML_IDP_INITIATED_CLIENT_ID, clientId);
402  }
403 
404  identity.setUsername(subjectNameID.getValue());
405 
406  //SAML Spec 2.2.2 Format is optional
407  if (subjectNameID.getFormat() != null && subjectNameID.getFormat().toString().equals(JBossSAMLURIConstants.NAMEID_FORMAT_EMAIL.get())) {
408  identity.setEmail(subjectNameID.getValue());
409  }
410 
411  if (config.isStoreToken()) {
412  identity.setToken(samlResponse);
413  }
414 
415  AuthnStatementType authn = null;
416  for (Object statement : assertion.getStatements()) {
417  if (statement instanceof AuthnStatementType) {
418  authn = (AuthnStatementType)statement;
419  identity.getContextData().put(SAML_AUTHN_STATEMENT, authn);
420  break;
421  }
422  }
423  if (assertion.getAttributeStatements() != null ) {
424  for (AttributeStatementType attrStatement : assertion.getAttributeStatements()) {
425  for (AttributeStatementType.ASTChoiceType choice : attrStatement.getAttributes()) {
426  AttributeType attribute = choice.getAttribute();
427  if (X500SAMLProfileConstants.EMAIL.getFriendlyName().equals(attribute.getFriendlyName())
428  || X500SAMLProfileConstants.EMAIL.get().equals(attribute.getName())) {
429  if (!attribute.getAttributeValue().isEmpty()) identity.setEmail(attribute.getAttributeValue().get(0).toString());
430  }
431  }
432 
433  }
434 
435  }
436  String brokerUserId = config.getAlias() + "." + subjectNameID.getValue();
437  identity.setBrokerUserId(brokerUserId);
438  identity.setIdpConfig(config);
439  identity.setIdp(provider);
440  if (authn != null && authn.getSessionIndex() != null) {
441  identity.setBrokerSessionId(identity.getBrokerUserId() + "." + authn.getSessionIndex());
442  }
443  identity.setCode(relayState);
444 
445 
446  return callback.authenticated(identity);
447  } catch (WebApplicationException e) {
448  return e.getResponse();
449  } catch (Exception e) {
450  throw new IdentityBrokerException("Could not process response from SAML identity provider.", e);
451  }
452  }
static final String SAML_ASSERTION
Definition: SAMLEndpoint.java:109
static final Logger logger
Definition: SAMLEndpoint.java:104
RealmModel realm
Definition: SAMLEndpoint.java:112
KeyLocator getIDPKeyLocator()
Definition: SAMLEndpoint.java:219
static final String SAML_AUTHN_STATEMENT
Definition: SAMLEndpoint.java:111
static final String SAML_LOGIN_RESPONSE
Definition: SAMLEndpoint.java:108
boolean isWantAssertionsEncrypted()
Definition: SAMLIdentityProviderConfig.java:148
IdentityProvider.AuthenticationCallback callback
Definition: SAMLEndpoint.java:115
boolean isWantAssertionsSigned()
Definition: SAMLIdentityProviderConfig.java:140
boolean isValidateSignature()
Definition: SAMLIdentityProviderConfig.java:71
SAMLIdentityProvider provider
Definition: SAMLEndpoint.java:116
static final String SAML_IDP_INITIATED_CLIENT_ID
Definition: SAMLEndpoint.java:110
boolean isSuccessfulSamlResponse(ResponseType responseType)
Definition: SAMLEndpoint.java:455
SAMLIdentityProviderConfig config
Definition: SAMLEndpoint.java:114
KeycloakSession session
Definition: SAMLEndpoint.java:120

◆ handleLogoutResponse()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.handleLogoutResponse ( SAMLDocumentHolder  holder,
StatusResponseType  responseType,
String  relayState 
)
inlineprotectedinherited
495  {
496  if (relayState == null) {
497  logger.error("no valid user session");
498  event.event(EventType.LOGOUT);
499  event.error(Errors.USER_SESSION_NOT_FOUND);
500  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.IDENTITY_PROVIDER_UNEXPECTED_ERROR);
501  }
502  UserSessionModel userSession = session.sessions().getUserSession(realm, relayState);
503  if (userSession == null) {
504  logger.error("no valid user session");
505  event.event(EventType.LOGOUT);
506  event.error(Errors.USER_SESSION_NOT_FOUND);
507  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.IDENTITY_PROVIDER_UNEXPECTED_ERROR);
508  }
509  if (userSession.getState() != UserSessionModel.State.LOGGING_OUT) {
510  logger.error("usersession in different state");
511  event.event(EventType.LOGOUT);
512  event.error(Errors.USER_SESSION_NOT_FOUND);
513  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.SESSION_NOT_ACTIVE);
514  }
515  return AuthenticationManager.finishBrowserLogout(session, realm, userSession, session.getContext().getUri(), clientConnection, headers);
516  }
static final Logger logger
Definition: SAMLEndpoint.java:104
RealmModel realm
Definition: SAMLEndpoint.java:112
ClientConnection clientConnection
Definition: SAMLEndpoint.java:123
HttpHeaders headers
Definition: SAMLEndpoint.java:126
KeycloakSession session
Definition: SAMLEndpoint.java:120

◆ handleSamlRequest()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.handleSamlRequest ( String  samlRequest,
String  relayState 
)
inlineprotectedinherited
246  {
247  SAMLDocumentHolder holder = extractRequestDocument(samlRequest);
248  RequestAbstractType requestAbstractType = (RequestAbstractType) holder.getSamlObject();
249  // validate destination
250  if (! destinationValidator.validate(session.getContext().getUri().getAbsolutePath(), requestAbstractType.getDestination())) {
251  event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
252  event.detail(Details.REASON, "invalid_destination");
253  event.error(Errors.INVALID_SAML_RESPONSE);
254  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REQUEST);
255  }
256  if (config.isValidateSignature()) {
257  try {
258  verifySignature(GeneralConstants.SAML_REQUEST_KEY, holder);
259  } catch (VerificationException e) {
260  logger.error("validation failed", e);
261  event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
262  event.error(Errors.INVALID_SIGNATURE);
263  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REQUESTER);
264  }
265  }
266 
267  if (requestAbstractType instanceof LogoutRequestType) {
268  logger.debug("** logout request");
269  event.event(EventType.LOGOUT);
270  LogoutRequestType logout = (LogoutRequestType) requestAbstractType;
271  return logoutRequest(logout, relayState);
272 
273  } else {
274  event.event(EventType.LOGIN);
275  event.error(Errors.INVALID_TOKEN);
276  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REQUEST);
277  }
278  }
abstract SAMLDocumentHolder extractRequestDocument(String samlRequest)
abstract void verifySignature(String key, SAMLDocumentHolder documentHolder)
static final Logger logger
Definition: SAMLEndpoint.java:104
Response logoutRequest(LogoutRequestType request, String relayState)
Definition: SAMLEndpoint.java:280
final DestinationValidator destinationValidator
Definition: SAMLEndpoint.java:117
boolean isValidateSignature()
Definition: SAMLIdentityProviderConfig.java:71
SAMLIdentityProviderConfig config
Definition: SAMLEndpoint.java:114
KeycloakSession session
Definition: SAMLEndpoint.java:120

◆ handleSamlResponse()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.handleSamlResponse ( String  samlResponse,
String  relayState,
String  clientId 
)
inlineinherited
464  {
465  SAMLDocumentHolder holder = extractResponseDocument(samlResponse);
466  StatusResponseType statusResponse = (StatusResponseType)holder.getSamlObject();
467  // validate destination
468  if (! destinationValidator.validate(session.getContext().getUri().getAbsolutePath(), statusResponse.getDestination())) {
469  event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
470  event.detail(Details.REASON, "invalid_destination");
471  event.error(Errors.INVALID_SAML_RESPONSE);
472  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_FEDERATED_IDENTITY_ACTION);
473  }
474  if (config.isValidateSignature()) {
475  try {
476  verifySignature(GeneralConstants.SAML_RESPONSE_KEY, holder);
477  } catch (VerificationException e) {
478  logger.error("validation failed", e);
479  event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
480  event.error(Errors.INVALID_SIGNATURE);
481  return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.INVALID_FEDERATED_IDENTITY_ACTION);
482  }
483  }
484  if (statusResponse instanceof ResponseType) {
485  return handleLoginResponse(samlResponse, holder, (ResponseType)statusResponse, relayState, clientId);
486 
487  } else {
488  // todo need to check that it is actually a LogoutResponse
489  return handleLogoutResponse(holder, statusResponse, relayState);
490  }
491  //throw new RuntimeException("Unknown response type");
492 
493  }
Response handleLoginResponse(String samlResponse, SAMLDocumentHolder holder, ResponseType responseType, String relayState, String clientId)
Definition: SAMLEndpoint.java:350
abstract void verifySignature(String key, SAMLDocumentHolder documentHolder)
static final Logger logger
Definition: SAMLEndpoint.java:104
abstract SAMLDocumentHolder extractResponseDocument(String response)
final DestinationValidator destinationValidator
Definition: SAMLEndpoint.java:117
boolean isValidateSignature()
Definition: SAMLIdentityProviderConfig.java:71
Response handleLogoutResponse(SAMLDocumentHolder holder, StatusResponseType responseType, String relayState)
Definition: SAMLEndpoint.java:495
SAMLIdentityProviderConfig config
Definition: SAMLEndpoint.java:114
KeycloakSession session
Definition: SAMLEndpoint.java:120

◆ logoutRequest()

Response org.keycloak.broker.saml.SAMLEndpoint.Binding.logoutRequest ( LogoutRequestType  request,
String  relayState 
)
inlineprotectedinherited
280  {
281  String brokerUserId = config.getAlias() + "." + request.getNameID().getValue();
282  if (request.getSessionIndex() == null || request.getSessionIndex().isEmpty()) {
283  List<UserSessionModel> userSessions = session.sessions().getUserSessionByBrokerUserId(realm, brokerUserId);
284  for (UserSessionModel userSession : userSessions) {
285  if (userSession.getState() == UserSessionModel.State.LOGGING_OUT || userSession.getState() == UserSessionModel.State.LOGGED_OUT) {
286  continue;
287  }
288  try {
289  AuthenticationManager.backchannelLogout(session, realm, userSession, session.getContext().getUri(), clientConnection, headers, false);
290  } catch (Exception e) {
291  logger.warn("failed to do backchannel logout for userSession", e);
292  }
293  }
294 
295  } else {
296  for (String sessionIndex : request.getSessionIndex()) {
297  String brokerSessionId = brokerUserId + "." + sessionIndex;
298  UserSessionModel userSession = session.sessions().getUserSessionByBrokerSessionId(realm, brokerSessionId);
299  if (userSession != null) {
300  if (userSession.getState() == UserSessionModel.State.LOGGING_OUT || userSession.getState() == UserSessionModel.State.LOGGED_OUT) {
301  continue;
302  }
303  try {
304  AuthenticationManager.backchannelLogout(session, realm, userSession, session.getContext().getUri(), clientConnection, headers, false);
305  } catch (Exception e) {
306  logger.warn("failed to do backchannel logout for userSession", e);
307  }
308  }
309  }
310  }
311 
312  String issuerURL = getEntityId(session.getContext().getUri(), realm);
313  SAML2LogoutResponseBuilder builder = new SAML2LogoutResponseBuilder();
314  builder.logoutRequestID(request.getID());
315  builder.destination(config.getSingleLogoutServiceUrl());
316  builder.issuer(issuerURL);
317  JaxrsSAML2BindingBuilder binding = new JaxrsSAML2BindingBuilder()
318  .relayState(relayState);
321  KeyManager.ActiveRsaKey keys = session.keys().getActiveRsaKey(realm);
322  String keyName = config.getXmlSigKeyInfoKeyNameTransformer().getKeyName(keys.getKid(), keys.getCertificate());
323  binding.signWith(keyName, keys.getPrivateKey(), keys.getPublicKey(), keys.getCertificate())
324  .signatureAlgorithm(provider.getSignatureAlgorithm())
325  .signDocument();
326  if (! postBinding && config.isAddExtensionsElementWithKeyInfo()) { // Only include extension if REDIRECT binding and signing whole SAML protocol message
327  builder.addExtension(new KeycloakKeySamlExtensionGenerator(keyName));
328  }
329  }
330  try {
331  if (postBinding) {
332  return binding.postBinding(builder.buildDocument()).response(config.getSingleLogoutServiceUrl());
333  } else {
334  return binding.redirectBinding(builder.buildDocument()).response(config.getSingleLogoutServiceUrl());
335  }
336  } catch (ConfigurationException e) {
337  throw new RuntimeException(e);
338  } catch (ProcessingException e) {
339  throw new RuntimeException(e);
340  } catch (IOException e) {
341  throw new RuntimeException(e);
342  }
343 
344  }
boolean isPostBindingLogout()
Definition: SAMLIdentityProviderConfig.java:196
String getEntityId(UriInfo uriInfo, RealmModel realm)
Definition: SAMLEndpoint.java:346
static final Logger logger
Definition: SAMLEndpoint.java:104
RealmModel realm
Definition: SAMLEndpoint.java:112
Response postBinding(@FormParam(GeneralConstants.SAML_REQUEST_KEY) String samlRequest, @FormParam(GeneralConstants.SAML_RESPONSE_KEY) String samlResponse, @FormParam(GeneralConstants.RELAY_STATE) String relayState)
Definition: SAMLEndpoint.java:156
String getSingleLogoutServiceUrl()
Definition: SAMLIdentityProviderConfig.java:63
SAMLIdentityProvider provider
Definition: SAMLEndpoint.java:116
ClientConnection clientConnection
Definition: SAMLEndpoint.java:123
boolean isAddExtensionsElementWithKeyInfo()
Definition: SAMLIdentityProviderConfig.java:156
boolean isWantAuthnRequestsSigned()
Definition: SAMLIdentityProviderConfig.java:132
HttpHeaders headers
Definition: SAMLEndpoint.java:126
XmlKeyInfoKeyNameTransformer getXmlSigKeyInfoKeyNameTransformer()
Definition: SAMLIdentityProviderConfig.java:222
SAMLIdentityProviderConfig config
Definition: SAMLEndpoint.java:114
KeycloakSession session
Definition: SAMLEndpoint.java:120
SignatureAlgorithm getSignatureAlgorithm()
Definition: SAMLIdentityProvider.java:263

◆ verifySignature()

void org.keycloak.broker.saml.SAMLEndpoint.PostBinding.verifySignature ( String  key,
SAMLDocumentHolder  documentHolder 
) throws VerificationException
inlineprotected
526  {
527  NodeList nl = documentHolder.getSamlDocument().getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
528  boolean anyElementSigned = (nl != null && nl.getLength() > 0);
529  if ((! anyElementSigned) && (documentHolder.getSamlObject() instanceof ResponseType)) {
530  ResponseType responseType = (ResponseType) documentHolder.getSamlObject();
531  List<ResponseType.RTChoiceType> assertions = responseType.getAssertions();
532  if (! assertions.isEmpty() ) {
533  // Only relax verification if the response is an authnresponse and contains (encrypted/plaintext) assertion.
534  // In that case, signature is validated on assertion element
535  return;
536  }
537  }
538  SamlProtocolUtils.verifyDocumentSignature(documentHolder.getSamlDocument(), getIDPKeyLocator());
539  }
KeyLocator getIDPKeyLocator()
Definition: SAMLEndpoint.java:219

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