@Override public ExtendedMetadata generateExtendedMetadata() { ExtendedMetadata metadata = super.generateExtendedMetadata(); metadata.setAlias(UaaUrlUtils.getSubdomain()+metadata.getAlias()); return metadata; }
@Override protected String getPassiveIDP(HttpServletRequest request) { String paramName = request.getParameter(RETURN_ID_PARAM); //we have received the alias in our request //so we need to translate that into an entityID String idpAlias = request.getParameter(paramName==null?"idp":paramName); if ( idpAlias!=null ) { Set<String> idps = metadata.getIDPEntityNames(); for (String idp : idps) { try { ExtendedMetadata emd = metadata.getExtendedMetadata(idp); if (emd!=null && idpAlias.equals(emd.getAlias())) { return idp; } } catch (MetadataProviderException e) { String message = "Unable to read extended metadata for alias["+idpAlias+"] IDP["+idp+"]"; throw new UnableToFindSamlIDPException(message, e); } } } throw new UnableToFindSamlIDPException("Unable to locate IDP provider for alias:"+idpAlias); //return super.getPassiveIDP(request); }
@Override public String getEntityIdForAlias(String entityAlias) throws MetadataProviderException { if (entityAlias == null) { return null; } String entityId = null; for (String sp : getSPEntityNames()) { ExtendedMetadata extendedMetadata = getExtendedMetadata(sp); if (entityAlias.equals(extendedMetadata.getAlias())) { if (entityId != null && !entityId.equals(sp)) { throw new MetadataProviderException("Alias " + entityAlias + " is used both for entity " + entityId + " and " + sp); } else { entityId = sp; } } } for (String idp : getIDPEntityNames()) { ExtendedMetadata extendedMetadata = getExtendedMetadata(idp); if (entityAlias.equals(extendedMetadata.getAlias())) { if (entityId != null && !entityId.equals(idp)) { throw new MetadataProviderException("Alias " + entityAlias + " is used both for entity " + entityId + " and " + idp); } else { entityId = idp; } } } return entityId; }
protected String getProviderAlias(ExtendedMetadataDelegate provider) throws MetadataProviderException { List<String> stringSet = parseProvider(provider); for (String key : stringSet) { // Verify extended metadata ExtendedMetadata extendedMetadata = getExtendedMetadata(key, provider); if (extendedMetadata != null) { if (extendedMetadata.isLocal()) { // Parse alias String alias = extendedMetadata.getAlias(); if (alias != null) { // Verify alias is valid SAMLUtil.verifyAlias(alias, key); return alias; } else { log.debug("Local entity {} doesn't have an alias", key); } } else { log.debug("Remote entity {} available", key); } } else { log.debug("No extended metadata available for entity {}", key); } } return null; } /**
protected SAMLAuthenticationToken mockSamlAuthentication(String originKey) { ExtendedMetadata metadata = mock(ExtendedMetadata.class); when(metadata.getAlias()).thenReturn(originKey); SAMLMessageContext contxt = mock(SAMLMessageContext.class); when(contxt.getPeerExtendedMetadata()).thenReturn(metadata); when(contxt.getCommunicationProfileId()).thenReturn(SAMLConstants.SAML2_WEBSSO_PROFILE_URI); return new SAMLAuthenticationToken(contxt); }
@Override public String getEntityIdForAlias(String entityAlias) throws MetadataProviderException { if (entityAlias == null) { return null; } String entityId = null; for (String idp : getIDPEntityNames()) { ExtendedMetadata extendedMetadata = getExtendedMetadata(idp); if (extendedMetadata.isLocal() && entityAlias.equals(extendedMetadata.getAlias())) { if (entityId != null && !entityId.equals(idp)) { throw new MetadataProviderException("Alias " + entityAlias + " is used both for entity " + entityId + " and " + idp); } else { entityId = idp; } } } for (String sp : getSPEntityNames()) { ExtendedMetadata extendedMetadata = getExtendedMetadata(sp); if (extendedMetadata.isLocal() && entityAlias.equals(extendedMetadata.getAlias())) { if (entityId != null && !entityId.equals(sp)) { throw new MetadataProviderException("Alias " + entityAlias + " is used both for entity " + entityId + " and " + sp); } else { entityId = sp; } } } return entityId; }
SAMLAuthenticationToken token = (SAMLAuthenticationToken) authentication; SAMLMessageContext context = token.getCredentials(); String alias = context.getPeerExtendedMetadata().getAlias(); String relayState = context.getRelayState(); boolean addNew;
@Override protected WebSSOProfileOptions getProfileOptions(SAMLMessageContext context, AuthenticationException exception) throws MetadataProviderException { WebSSOProfileOptions options = super.getProfileOptions(context, exception); String idpEntityId = context.getPeerEntityId(); if (idpEntityId!=null) { ExtendedMetadata extendedMetadata = this.metadata.getExtendedMetadata(idpEntityId); if (extendedMetadata!=null) { String alias = extendedMetadata.getAlias(); SamlIdentityProviderDefinition def = getIDPDefinition(alias); if (def.getNameID()!=null) { options.setNameID(def.getNameID()); } if (def.getAssertionConsumerIndex()>=0) { options.setAssertionConsumerIndex(def.getAssertionConsumerIndex()); } if (def.getAuthnContext() != null) { options.setAuthnContexts(def.getAuthnContext()); } } } return options; }
/** * Provides entity alias from extended metadata, or null when metadata isn't specified or contains null. * * @return entity alias */ protected String getEntityAlias() { if (extendedMetadata != null) { return extendedMetadata.getAlias(); } else { return null; } }
@SneakyThrows private String getAlias(String entityId) { return metadataManager.getExtendedMetadata(entityId).getAlias(); }
if (extendedMetadata.isLocal() && entityAlias.equals(extendedMetadata.getAlias())) { if (entityId != null && !entityId.equals(idp)) { throw new MetadataProviderException("Alias " + entityAlias + " is used both for entity " + entityId + " and " + idp); if (extendedMetadata.isLocal() && entityAlias.equals(extendedMetadata.getAlias())) { if (entityId != null && !entityId.equals(sp)) { throw new MetadataProviderException("Alias " + entityAlias + " is used both for entity " + entityId + " and " + sp);
String alias = extendedMetadata.getAlias(); if (alias != null) {