diff options
| author | Thomas Lenz <tlenz@iaik.tugraz.at> | 2017-02-22 09:24:36 +0100 | 
|---|---|---|
| committer | Thomas Lenz <tlenz@iaik.tugraz.at> | 2017-02-22 09:24:36 +0100 | 
| commit | f6acad73155af58b75709077d8dee67dab0be47e (patch) | |
| tree | 2149264a3463f8709fa8e6d99f9bc10688e68423 /id/server/modules | |
| parent | 3a55eb69e5fa94d0bcc43a1732850a14e524f6cc (diff) | |
| download | moa-id-spss-f6acad73155af58b75709077d8dee67dab0be47e.tar.gz moa-id-spss-f6acad73155af58b75709077d8dee67dab0be47e.tar.bz2 moa-id-spss-f6acad73155af58b75709077d8dee67dab0be47e.zip | |
Refector eIDAS attribute generation do a dynamic way similar to the PVP attribute builder concept
The eIDAS attribute list in eIDAS metadata that contains currently supported attributes is also generated dynamical
Diffstat (limited to 'id/server/modules')
15 files changed, 589 insertions, 183 deletions
| diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/Constants.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/Constants.java index eb5adcce1..36323f3a5 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/Constants.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/Constants.java @@ -22,14 +22,9 @@   */  package at.gv.egovernment.moa.id.auth.modules.eidas; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -  import org.apache.xml.security.signature.XMLSignature;  import org.opensaml.xml.encryption.EncryptionConstants;  import org.opensaml.xml.signature.SignatureConstants; -//import eu.eidas.auth.engine.core.validator.eidas.EIDASAttributes;  /**   * @author tlenz @@ -93,8 +88,6 @@ public class Constants {  	//http endpoint descriptions  	public static final String eIDAS_HTTP_ENDPOINT_SP_POST = "/eidas/sp/post";  	public static final String eIDAS_HTTP_ENDPOINT_SP_REDIRECT = "/eidas/sp/redirect"; -	//public static final String eIDAS_HTTP_ENDPOINT_IDP_POST = "/eidas/idp/post"; -	//public static final String eIDAS_HTTP_ENDPOINT_IDP_REDIRECT = "/eidas/idp/redirect";  	public static final String eIDAS_HTTP_ENDPOINT_IDP_COLLEAGUEREQUEST = "/eidas/ColleagueRequest";  	public static final String eIDAS_HTTP_ENDPOINT_METADATA = "/eidas/metadata"; @@ -104,44 +97,6 @@ public class Constants {  	public static final int eIDAS_REVERSIONSLOG_IDP_AUTHREQUEST = 3401;  	public static final int eIDAS_REVERSIONSLOG_IDP_AUTHRESPONSE = 3402; -	//metadata constants -//    public final static Map<String, EidasAttributesTypes> METADATA_POSSIBLE_ATTRIBUTES = Collections.unmodifiableMap( -//            new HashMap<String, EidasAttributesTypes>(){ -//				private static final long serialVersionUID = 1L; -//				{ -//                    put(EIDASAttributes.ATTRIBUTE_GIVENNAME, EidasAttributesTypes.NATURAL_PERSON_MANDATORY); -//                    put(EIDASAttributes.ATTRIBUTE_FIRSTNAME, EidasAttributesTypes.NATURAL_PERSON_MANDATORY); -//                    put(EIDASAttributes.ATTRIBUTE_DATEOFBIRTH, EidasAttributesTypes.NATURAL_PERSON_MANDATORY); -//                    put(EIDASAttributes.ATTRIBUTE_PERSONIDENTIFIER, EidasAttributesTypes.NATURAL_PERSON_MANDATORY); -// -//                    //TODO: add additional attributes for eIDAS with mandates -//                    //put(EIDASAttributes.ATTRIBUTE_LEGALIDENTIFIER, EidasAttributesTypes.LEGAL_PERSON_MANDATORY); -//                    //put(EIDASAttributes.ATTRIBUTE_LEGALNAME, EidasAttributesTypes.LEGAL_PERSON_MANDATORY); -//                } -//            } -//    ); -    	 -	//eIDAS attributes that can be provided by MOA-ID -	public static final List<String> MOA_IDP_SUPPORTED_eIDAS_ATTRIBUTES;             -	static { -		List<String> supportAttrList = new ArrayList<String>(); -		//natural person attributes that can be provided by MOA-ID -		supportAttrList.add(eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.PERSON_IDENTIFIER.getNameUri().toString()); -		supportAttrList.add(eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.CURRENT_FAMILY_NAME.getNameUri().toString()); -		supportAttrList.add(eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.CURRENT_GIVEN_NAME.getNameUri().toString()); -		supportAttrList.add(eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.DATE_OF_BIRTH.getNameUri().toString()); -		 -		//legal person attributes that can be provided by MOA-ID -		supportAttrList.add(eu.eidas.auth.engine.core.eidas.spec.LegalPersonSpec.Definitions.LEGAL_PERSON_IDENTIFIER.getNameUri().toString()); -		supportAttrList.add(eu.eidas.auth.engine.core.eidas.spec.LegalPersonSpec.Definitions.LEGAL_NAME.getNameUri().toString()); -		 -		//additionl person attributes that can be provided by MOA-ID -		//supportAttrList.add("http://ehn/attributes/ehealth/patientidentifier"); -		 -		MOA_IDP_SUPPORTED_eIDAS_ATTRIBUTES = Collections.unmodifiableList(supportAttrList); -		 -	} -	      public static final String METADATA_ALLOWED_ALG_DIGIST =       		SignatureConstants.ALGO_ID_DIGEST_SHA256 + ";" +  diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/MOAeIDASMetadataGenerator.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/MOAeIDASMetadataGenerator.java index 1bebdebbf..9d397074b 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/MOAeIDASMetadataGenerator.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/MOAeIDASMetadataGenerator.java @@ -77,7 +77,6 @@ import org.slf4j.LoggerFactory;  import com.google.common.collect.ImmutableSortedSet;  import com.google.common.collect.Ordering; -import at.gv.egovernment.moa.id.auth.modules.eidas.Constants;  import at.gv.egovernment.moa.id.protocols.pvp2x.utils.SAML2Utils;  import eu.eidas.auth.commons.EIDASUtil;  import eu.eidas.auth.commons.EidasStringUtil; @@ -305,8 +304,8 @@ public class MOAeIDASMetadataGenerator extends MetadataGenerator {      public ImmutableSortedSet<AttributeDefinition<?>> getAllSupportedAttributes() {          ImmutableSortedSet.Builder<AttributeDefinition<?>> builder =                  new ImmutableSortedSet.Builder<>(Ordering.<AttributeDefinition<?>>natural()); -         -        for (String attr : Constants.MOA_IDP_SUPPORTED_eIDAS_ATTRIBUTES) { +                 +        for (String attr : eIDASAttributeBuilder.getAllProvideableeIDASAttributes()) {          	AttributeDefinition<?> supAttr = params.getIdpEngine().getProtocolProcessor().getAttributeDefinitionNullable(attr);          	builder.add(supAttr);          } diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/eIDASAttributeBuilder.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/eIDASAttributeBuilder.java new file mode 100644 index 000000000..1f34a912d --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/utils/eIDASAttributeBuilder.java @@ -0,0 +1,167 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.auth.modules.eidas.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.ServiceLoader; + +import com.google.common.collect.ImmutableSet; + +import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters; +import at.gv.egovernment.moa.id.data.IAuthData; +import at.gv.egovernment.moa.id.data.Pair; +import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder; +import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator; +import at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.IeIDASAttribute; +import at.gv.egovernment.moa.id.protocols.pvp2x.builder.PVPAttributeBuilder; +import at.gv.egovernment.moa.id.protocols.pvp2x.builder.attributes.exceptions.AttributeException; +import at.gv.egovernment.moa.logging.Logger; +import at.gv.egovernment.moa.util.MiscUtil; +import eu.eidas.auth.commons.attribute.AttributeDefinition; +import eu.eidas.auth.commons.attribute.AttributeDefinition.Builder; +import eu.eidas.auth.commons.attribute.AttributeValue; +import eu.eidas.auth.commons.attribute.AttributeValueMarshaller; +import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException; + +/** + * @author tlenz + * + */ +public class eIDASAttributeBuilder extends PVPAttributeBuilder {		 +	private static IAttributeGenerator<String> generator = new SimpleEidasAttributeGenerator(); +	 +	private static List<String> listOfSupportedeIDASAttributes; +	private static ServiceLoader<IeIDASAttribute> eIDASAttributLoader =  +			ServiceLoader.load(IeIDASAttribute.class); +	 +	static { +		List<String> supportAttrList = new ArrayList<String>(); +		 +		Logger.info("Select eIDAS attributes that are corrently providable:"); +		if (eIDASAttributLoader != null ) {		 +			Iterator<IeIDASAttribute> moduleLoaderInterator = eIDASAttributLoader.iterator(); +			while (moduleLoaderInterator.hasNext()) { +				try { +					IeIDASAttribute modul = moduleLoaderInterator.next(); +					Logger.info("Loading eIDAS attribut-builder Modul Information: " + modul.getName()); +					supportAttrList.add(modul.getName()); +					 +				} catch(Throwable e) { +					Logger.error("Check configuration! " + "Some attribute-builder modul" +  +							" is not a valid IAttributeBuilder", e); +				}	 +			} +		} +		 +		listOfSupportedeIDASAttributes = Collections.unmodifiableList(supportAttrList);		 +		Logger.info("Selection of providable eIDAS attributes done"); +				 +	} +	 +	public static List<String> getAllProvideableeIDASAttributes() { +		return listOfSupportedeIDASAttributes; +	} +	 +	/** +	 *  +	 * @param attr +	 * @param onlineApplicationConfiguration +	 * @param authData +	 * @return +	 */ +	public static Pair<AttributeDefinition<?>,ImmutableSet<AttributeValue<?>>> buildAttribute(AttributeDefinition<?> attr, IOAAuthParameters onlineApplicationConfiguration, +			IAuthData authData) { +		 +		String attrName = attr.getNameUri().toString(); +		Logger.trace("Build eIDAS attribute: "+ attrName); +		 +				 +		IAttributeBuilder attrBuilder = getAttributeBuilder(attrName); +		if (attrBuilder != null) { +			try { +				String attrValue = attrBuilder.build(onlineApplicationConfiguration, authData, generator); +				if (MiscUtil.isNotEmpty(attrValue)) { +					//set uniqueIdentifier attribute, because eIDAS SAMLEngine use this flag to select the +					//  Subject->NameID value from this attribute +					Builder<?> eIDASAttrBuilder = AttributeDefinition.builder(attr); +					eIDASAttrBuilder.uniqueIdentifier(evaluateUniqueID(attrName, authData.isUseMandate())); +					AttributeDefinition<?> returnAttr = eIDASAttrBuilder.build(); +					 +					//unmarshal attribute value into eIDAS attribute   +					AttributeValueMarshaller<?> attributeValueMarshaller = returnAttr.getAttributeValueMarshaller(); +		            ImmutableSet.Builder<AttributeValue<?>> builder = ImmutableSet.builder(); +						             +		            AttributeValue<?> attributeValue = null; +		            try { +	                    attributeValue = attributeValueMarshaller.unmarshal(attrValue, false); +	                    builder.add(attributeValue); +	                     +	                } catch (AttributeValueMarshallingException e) { +	                    throw new IllegalStateException(e); +	                     +	                } +					 +		            return Pair.newInstance(returnAttr, builder.build()); +										 +				}  +								 +			} catch (AttributeException e) { +				Logger.debug("Attribute can not generate requested attribute:" + attr.getNameUri().toString() + " Reason:" + e.getMessage()); +				 +			} +			 +		} else				 +			Logger.warn("NO attribute builder FOUND for eIDAS attr: " + attrName); +		 +		return null; +	} + +	/** +	 * This method use the information from authenticated session and  +	 * evaluate the uniqueID flag according to eIDAS specification +	 *  +	 * @param attrName eIDAS attribute name that is evaluated +	 * @param useMandate flag that indicates if the current authenticated session includes a mandate +	 * @return true if eIDAS attribute holds the unique ID, otherwise false +	 */ +	private static boolean evaluateUniqueID(String attrName, boolean useMandate) { +		//if no mandate is used the natural person identifier is the unique ID +		if (!useMandate &&  +				attrName.equals(eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.PERSON_IDENTIFIER.getNameUri().toString())) +			return true; +				 +		//if mandates are used the the legal person identifier or the natural person identifier of the mandator is the unique ID +		else if (useMandate &&  +				attrName.equals(eu.eidas.auth.engine.core.eidas.spec.LegalPersonSpec.Definitions.LEGAL_PERSON_IDENTIFIER.getNameUri().toString())) +			return true; +		 +		//TODO: implement flag selector for mandates and natural persons +		 +		 +		return false; +	} + +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASData.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASData.java index 7647b4cab..694efab80 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASData.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASData.java @@ -15,6 +15,8 @@ import eu.eidas.auth.commons.protocol.IAuthenticationRequest;  @Scope(value = BeanDefinition.SCOPE_PROTOTYPE)  public class EIDASData extends RequestImpl { +	public static final String REQ_PARAM_eIDAS_AUTHN_TRANSIENT_ID = "transiendIDRequested"; +	  	/** The Constant serialVersionUID. */  	private static final long serialVersionUID = 8765755670214923910L; @@ -28,7 +30,7 @@ public class EIDASData extends RequestImpl {  	private String remoteIPAddress;  	private String remoteRelayState; - + 	  	@Override  	public Collection<String> getRequestedAttributes(MetadataProvider metadataProvider) {  		// TODO Auto-generated method stub diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java index 388d65963..5d13e26e2 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java @@ -67,6 +67,7 @@ import eu.eidas.auth.commons.protocol.eidas.IEidasAuthenticationRequest;  import eu.eidas.auth.commons.protocol.eidas.impl.EidasAuthenticationRequest;  import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;  import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse.Builder; +import eu.eidas.auth.commons.protocol.impl.SamlNameIdFormat;  import eu.eidas.auth.engine.ProtocolEngineI;  import eu.eidas.auth.engine.metadata.MetadataUtil;  import eu.eidas.engine.exceptions.EIDASSAMLEngineException; @@ -307,6 +308,13 @@ public class EIDASProtocol extends AbstractAuthProtocolModulController {  			pendingReq.setGenericDataToSession(RequestImpl.eIDAS_GENERIC_REQ_DATA_LEVELOFASSURENCE,   					eIDASSamlReq.getEidasLevelOfAssurance().stringValue());			 +			//set flag if transiend identifier is requested +			if (MiscUtil.isNotEmpty(eIDASSamlReq.getNameIdFormat())  +					&& eIDASSamlReq.getNameIdFormat().equals(SamlNameIdFormat.TRANSIENT.getNameIdFormat())) +				pendingReq.setGenericDataToSession(EIDASData.REQ_PARAM_eIDAS_AUTHN_TRANSIENT_ID, true); +			else +				pendingReq.setGenericDataToSession(EIDASData.REQ_PARAM_eIDAS_AUTHN_TRANSIENT_ID, false); +			  			// - memorize requested attributes			  			pendingReq.setEidasRequestedAttributes(eIDASSamlReq.getRequestedAttributes()); diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/IeIDASAttribute.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/IeIDASAttribute.java new file mode 100644 index 000000000..15060fb52 --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/IeIDASAttribute.java @@ -0,0 +1,33 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder; + +/** + * @author tlenz + * + */ +public interface IeIDASAttribute extends IAttributeBuilder{ + +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrDateOfBirth.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrDateOfBirth.java new file mode 100644 index 000000000..64e5ae770 --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrDateOfBirth.java @@ -0,0 +1,37 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import at.gv.egovernment.moa.id.protocols.builder.attributes.BirthdateAttributeBuilder; + +/** + * @author tlenz + * + */ +public class eIDASAttrDateOfBirth extends BirthdateAttributeBuilder implements IeIDASAttribute { + +	@Override +	public String getName() { +		return eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.DATE_OF_BIRTH.getNameUri().toString(); +	}	 +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrFamilyName.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrFamilyName.java new file mode 100644 index 000000000..4195eeeef --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrFamilyName.java @@ -0,0 +1,61 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters; +import at.gv.egovernment.moa.id.data.IAuthData; +import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator; +import at.gv.egovernment.moa.id.protocols.pvp2x.builder.attributes.exceptions.AttributeException; + +/** + * @author tlenz + * + */ +public class eIDASAttrFamilyName implements IeIDASAttribute{ + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#getName() +	 */ +	@Override +	public String getName() { +		return eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.CURRENT_FAMILY_NAME.getNameUri().toString();		 +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#build(at.gv.egovernment.moa.id.commons.api.IOAAuthParameters, at.gv.egovernment.moa.id.data.IAuthData, at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator) +	 */ +	@Override +	public <ATT> ATT build(IOAAuthParameters oaParam, IAuthData authData, IAttributeGenerator<ATT> g) +			throws AttributeException { +		return g.buildStringAttribute(null, getName(), authData.getFamilyName()); +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#buildEmpty(at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator) +	 */ +	@Override +	public <ATT> ATT buildEmpty(IAttributeGenerator<ATT> g) { +		return null; +	} + +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrGivenName.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrGivenName.java new file mode 100644 index 000000000..2a654ac44 --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrGivenName.java @@ -0,0 +1,61 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters; +import at.gv.egovernment.moa.id.data.IAuthData; +import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator; +import at.gv.egovernment.moa.id.protocols.pvp2x.builder.attributes.exceptions.AttributeException; + +/** + * @author tlenz + * + */ +public class eIDASAttrGivenName implements IeIDASAttribute{ + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#getName() +	 */ +	@Override +	public String getName() { +		return eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.CURRENT_GIVEN_NAME.getNameUri().toString();		 +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#build(at.gv.egovernment.moa.id.commons.api.IOAAuthParameters, at.gv.egovernment.moa.id.data.IAuthData, at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator) +	 */ +	@Override +	public <ATT> ATT build(IOAAuthParameters oaParam, IAuthData authData, IAttributeGenerator<ATT> g) +			throws AttributeException { +		return g.buildStringAttribute(null, getName(), authData.getGivenName()); +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#buildEmpty(at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator) +	 */ +	@Override +	public <ATT> ATT buildEmpty(IAttributeGenerator<ATT> g) { +		return null; +	} + +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrLegalName.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrLegalName.java new file mode 100644 index 000000000..51a2bd69b --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrLegalName.java @@ -0,0 +1,37 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import at.gv.egovernment.moa.id.protocols.builder.attributes.MandateLegalPersonFullNameAttributeBuilder; + +/** + * @author tlenz + * + */ +public class eIDASAttrLegalName extends MandateLegalPersonFullNameAttributeBuilder implements IeIDASAttribute { + +	@Override +	public String getName() { +		return eu.eidas.auth.engine.core.eidas.spec.LegalPersonSpec.Definitions.LEGAL_NAME.getNameUri().toString(); +	}	 +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrLegalPersonIdentifier.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrLegalPersonIdentifier.java new file mode 100644 index 000000000..c008048cb --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrLegalPersonIdentifier.java @@ -0,0 +1,37 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import at.gv.egovernment.moa.id.protocols.builder.attributes.MandateLegalPersonSourcePinAttributeBuilder; + +/** + * @author tlenz + * + */ +public class eIDASAttrLegalPersonIdentifier extends MandateLegalPersonSourcePinAttributeBuilder implements IeIDASAttribute { + +	@Override +	public String getName() { +		return eu.eidas.auth.engine.core.eidas.spec.LegalPersonSpec.Definitions.LEGAL_PERSON_IDENTIFIER.getNameUri().toString(); +	}	 +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrNaturalPersonalIdentifier.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrNaturalPersonalIdentifier.java new file mode 100644 index 000000000..cb659c2b1 --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/attributes/builder/eIDASAttrNaturalPersonalIdentifier.java @@ -0,0 +1,116 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.protocols.eidas.attributes.builder; + +import java.security.MessageDigest; + +import at.gv.egovernment.moa.id.auth.modules.eidas.utils.eIDASAttributeProcessingUtils; +import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters; +import at.gv.egovernment.moa.id.data.IAuthData; +import at.gv.egovernment.moa.id.data.Trible; +import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator; +import at.gv.egovernment.moa.id.protocols.eidas.EIDASData; +import at.gv.egovernment.moa.id.protocols.pvp2x.builder.attributes.exceptions.AttributeException; +import at.gv.egovernment.moa.id.util.Random; +import at.gv.egovernment.moa.logging.Logger; +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.MiscUtil; + +/** + * @author tlenz + * + */ +public class eIDASAttrNaturalPersonalIdentifier implements IeIDASAttribute{ + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#getName() +	 */ +	@Override +	public String getName() { +		return eu.eidas.auth.engine.core.eidas.spec.NaturalPersonSpec.Definitions.PERSON_IDENTIFIER.getNameUri().toString();		 +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#build(at.gv.egovernment.moa.id.commons.api.IOAAuthParameters, at.gv.egovernment.moa.id.data.IAuthData, at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator) +	 */ +	@Override +	public <ATT> ATT build(IOAAuthParameters oaParam, IAuthData authData, IAttributeGenerator<ATT> g) +			throws AttributeException {		 +		String personalID = authData.getBPK(); +		 +		//generate eIDAS conform 'PersonalIdentifier' attribute +		if (!eIDASAttributeProcessingUtils.validateEidasPersonalIdentifier(personalID)) { +			Logger.debug("preCalculated PersonalIdentifier does not include eIDAS conform prefixes ... add prefix now"); +			if (MiscUtil.isEmpty(authData.getBPKType()) +					|| !authData.getBPKType().startsWith(at.gv.egovernment.moa.util.Constants.URN_PREFIX_EIDAS)) { +				Logger.error("BPKType is empty or does not start with eIDAS bPKType prefix! bPKType:" + authData.getBPKType()); +				throw new AttributeException("Suspect bPKType for eIDAS identifier generation"); +				 +			}  +			 +			String prefix = authData.getBPKType().substring(at.gv.egovernment.moa.util.Constants.URN_PREFIX_EIDAS.length() + 1); +			personalID = prefix.replaceAll("\\+", "/") + "/" + personalID; +										 +		} +								 +		//generate a transient unique identifier if it is requested +		Boolean isTransiendIDRequested =  +				authData.getGenericData(EIDASData.REQ_PARAM_eIDAS_AUTHN_TRANSIENT_ID, Boolean.class); +		if (isTransiendIDRequested != null && isTransiendIDRequested) +			personalID = generateTransientNameID(personalID); +								 +		return g.buildStringAttribute(null, getName(), personalID); +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder#buildEmpty(at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator) +	 */ +	@Override +	public <ATT> ATT buildEmpty(IAttributeGenerator<ATT> g) { +		return null; +	} + +	private String generateTransientNameID(String nameID) { +		//extract source-country and destination country from persistent identifier  +		Trible<String, String, String> split = eIDASAttributeProcessingUtils.parseEidasPersonalIdentifier(nameID); +		if (split == null) { +			Logger.error("eIDAS 'PersonalIdentifier' has a wrong format. There had to be a ERROR in implementation!!!!"); +			throw new IllegalStateException("eIDAS 'PersonalIdentifier' has a wrong format. There had to be a ERROR in implementation!!!!"); +			 +		}  +		 +		//build correct formated transient identifier +		String random = Random.nextLongRandom();		 +		try { +			MessageDigest md = MessageDigest.getInstance("SHA-1"); +			byte[] hash = md.digest((split.getThird() + random).getBytes("ISO-8859-1"));			 +			return split.getFirst() + "/" + split.getSecond() + "/" + Base64Utils.encode(hash); +			 +		} catch (Exception e) { +			Logger.error("Can not generate transient personal identifier!", e); +			return null; +			 +		} +		 +	} +} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/eIDASAuthenticationRequest.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/eIDASAuthenticationRequest.java index 2fe52bb4f..d0cda38c7 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/eIDASAuthenticationRequest.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/eIDASAuthenticationRequest.java @@ -23,8 +23,6 @@  package at.gv.egovernment.moa.id.protocols.eidas;  import java.io.StringWriter; -import java.security.MessageDigest; -import java.text.SimpleDateFormat;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse; @@ -43,33 +41,23 @@ import at.gv.egovernment.moa.id.auth.frontend.velocity.VelocityProvider;  import at.gv.egovernment.moa.id.auth.modules.eidas.Constants;  import at.gv.egovernment.moa.id.auth.modules.eidas.engine.MOAeIDASChainingMetadataProvider;  import at.gv.egovernment.moa.id.auth.modules.eidas.utils.SimpleEidasAttributeGenerator; -import at.gv.egovernment.moa.id.auth.modules.eidas.utils.eIDASAttributeProcessingUtils; +import at.gv.egovernment.moa.id.auth.modules.eidas.utils.eIDASAttributeBuilder;  import at.gv.egovernment.moa.id.commons.MOAIDConstants;  import at.gv.egovernment.moa.id.commons.api.IRequest;  import at.gv.egovernment.moa.id.commons.api.exceptions.MOAIDException;  import at.gv.egovernment.moa.id.data.IAuthData; +import at.gv.egovernment.moa.id.data.Pair;  import at.gv.egovernment.moa.id.data.SLOInformationImpl;  import at.gv.egovernment.moa.id.data.SLOInformationInterface; -import at.gv.egovernment.moa.id.data.Trible;  import at.gv.egovernment.moa.id.moduls.IAction;  import at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeGenerator; -import at.gv.egovernment.moa.id.protocols.builder.attributes.MandateLegalPersonFullNameAttributeBuilder; -import at.gv.egovernment.moa.id.protocols.builder.attributes.MandateLegalPersonSourcePinAttributeBuilder; -import at.gv.egovernment.moa.id.protocols.pvp2x.builder.attributes.exceptions.AttributeException; -import at.gv.egovernment.moa.id.util.Random;  import at.gv.egovernment.moa.logging.Logger; -import at.gv.egovernment.moa.util.Base64Utils; -import at.gv.egovernment.moa.util.MiscUtil;  import eu.eidas.auth.commons.EidasStringUtil;  import eu.eidas.auth.commons.attribute.AttributeDefinition; -import eu.eidas.auth.commons.attribute.AttributeDefinition.Builder;  import eu.eidas.auth.commons.attribute.AttributeValue; -import eu.eidas.auth.commons.attribute.AttributeValueMarshaller; -import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException;  import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;  import eu.eidas.auth.commons.protocol.IResponseMessage;  import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse; -import eu.eidas.auth.commons.protocol.impl.SamlNameIdFormat;  import eu.eidas.auth.engine.ProtocolEngineI;  import eu.eidas.auth.engine.xml.opensaml.SAMLEngineUtils; @@ -97,104 +85,31 @@ public class eIDASAuthenticationRequest implements IAction {  		else  			throw new MOAIDException("got wrong IRequest type. is: {}, should be: {}", new String[] {req.getClass().toString(), EIDASData.class.toString()}); -		 +				  		String subjectNameID = null; -		 +				  		//gather attributes  		ImmutableAttributeMap reqAttributeList = (ImmutableAttributeMap) eidasRequest.getEidasRequestedAttributes();		  		ImmutableAttributeMap.Builder attrMapBuilder = ImmutableAttributeMap.builder(); -				 -		//TODO: if we support more then this minimum required attributes -> redesign to a smoother attribute builder selector  + +		//generate eIDAS attributes  		for(AttributeDefinition<?> attr : reqAttributeList.getDefinitions()) { -			String newValue = ""; -			boolean isUniqueID = false; -			try { -				switch(attr.getFriendlyName()) { -					case Constants.eIDAS_ATTR_DATEOFBIRTH:  -						newValue = new SimpleDateFormat("YYYY-MM-dd").format(authData.getDateOfBirth());  -						break; -					case Constants.eIDAS_ATTR_CURRENTFAMILYNAME:  -						newValue = authData.getFamilyName(); -						break; -					case Constants.eIDAS_ATTR_CURRENTGIVENNAME:  -						newValue = authData.getGivenName(); -						break;			 -					case Constants.eIDAS_ATTR_PERSONALIDENTIFIER: 						 -						newValue = authData.getBPK(); -						isUniqueID = true; +			Pair<AttributeDefinition<?>, ImmutableSet<AttributeValue<?>>> eIDASAttr = eIDASAttributeBuilder.buildAttribute( +					attr, req.getOnlineApplicationConfiguration(), authData); -						//generate eIDAS conform 'PersonalIdentifier' attribute -						if (!eIDASAttributeProcessingUtils.validateEidasPersonalIdentifier(newValue)) { -							Logger.debug("preCalculated PersonalIdentifier does not include eIDAS conform prefixes ... add prefix now"); -							if (MiscUtil.isEmpty(authData.getBPKType()) -									|| !authData.getBPKType().startsWith(at.gv.egovernment.moa.util.Constants.URN_PREFIX_EIDAS)) { -								Logger.error("BPKType is empty or does not start with eIDAS bPKType prefix! bPKType:" + authData.getBPKType()); -								throw new MOAIDException("builder.08", new Object[]{"Suspect bPKType for eIDAS identifier generation"}); -								 -							}  -							 -							String prefix = authData.getBPKType().substring(at.gv.egovernment.moa.util.Constants.URN_PREFIX_EIDAS.length() + 1); -							newValue = prefix.replaceAll("\\+", "/") + "/" + newValue; -														 -						} -												 -						//generate a transient unique identifier if it is requested -						String reqNameIDFormat = eidasRequest.getEidasRequest().getNameIdFormat(); -						if (MiscUtil.isNotEmpty(reqNameIDFormat)  -								&& reqNameIDFormat.equals(SamlNameIdFormat.TRANSIENT.getNameIdFormat())) -							newValue = generateTransientNameID(newValue); - -												 -						subjectNameID = newValue; -						break; -					case Constants.eIDAS_ATTR_LEGALPERSONIDENTIFIER: -						newValue = new MandateLegalPersonSourcePinAttributeBuilder().build( -								req.getOnlineApplicationConfiguration(), authData, generator); -						break; -					case Constants.eIDAS_ATTR_LEGALNAME: -						newValue = new MandateLegalPersonFullNameAttributeBuilder().build( -								req.getOnlineApplicationConfiguration(), authData, generator); -						break; -									 -				} -				 -			} catch (AttributeException e) { -				Logger.debug("Attribute can not generate requested attribute:" + attr.getFriendlyName() + " Reason:" + e.getMessage()); -				 -			} -												 -			if(MiscUtil.isEmpty(newValue)) {				 +			if(eIDASAttr == null) {				  				if (attr.isRequired()) {  					Logger.info("eIDAS Attr:" + attr.getNameUri() + " is marked as 'Required' but not available.");  					throw new MOAIDException("eIDAS.15", new Object[]{attr.getFriendlyName()});  				} else  					Logger.info("eIDAS Attr:" + attr.getNameUri() + " is not available.");	 -					  			} else { -				//set uniqueIdentifier attribute, because eIDAS SAMLEngine use this flag to select the -				//  Subject->NameID value from this attribute -				Builder<?> attrBuilder = AttributeDefinition.builder(attr); -				attrBuilder.uniqueIdentifier(isUniqueID); -				AttributeDefinition<?> returnAttr = attrBuilder.build(); -				 -				//unmarshal attribute value into eIDAS attribute   -				AttributeValueMarshaller<?> attributeValueMarshaller = returnAttr.getAttributeValueMarshaller(); -	            ImmutableSet.Builder<AttributeValue<?>> builder = ImmutableSet.builder(); -					             -	            AttributeValue<?> attributeValue = null; -	            try { -                    attributeValue = attributeValueMarshaller.unmarshal(newValue, false); -                    builder.add(attributeValue); -                     -                } catch (AttributeValueMarshallingException e) { -                    throw new IllegalStateException(e); -                     -                } -	            				 -	            //add attribute to Map -				attrMapBuilder.put((AttributeDefinition)returnAttr, (ImmutableSet) builder.build()); +				//add attribute to Map +				attrMapBuilder.put( +						(AttributeDefinition)eIDASAttr.getFirst(),  +						(ImmutableSet)eIDASAttr.getSecond());  			}  		} @@ -231,19 +146,7 @@ public class eIDASAuthenticationRequest implements IAction {  			eIDASRespMsg = engine.generateResponseMessage(eidasRequest.getEidasRequest(),   					response, true, eidasRequest.getRemoteAddress()); -			 -//			if(null == eidasRequest.getEidasRequest().getAssertionConsumerServiceURL()) { -//				String assertionConsumerUrl = MetadataUtil.getAssertionUrlFromMetadata( -//						new MOAeIDASMetadataProviderDecorator(eIDASMetadataProvider),  -//						engine,  -//						eidasRequest.getEidasRequest()); -//				eidasRequest.getEidasRequest().setAssertionConsumerServiceURL(assertionConsumerUrl); -//				 -//			} -			 -//			response = engine.generateEIDASAuthnResponse(eidasRequest.getEidasRequest(), response, eidasRequest.getRemoteAddress(), true); - -			 +						  			token = EidasStringUtil.encodeToBase64(eIDASRespMsg.getMessageBytes());  		} catch(Exception e) {				 @@ -319,28 +222,6 @@ public class eIDASAuthenticationRequest implements IAction {  	} -	private String generateTransientNameID(String nameID) { -		//extract source-country and destination country from persistent identifier  -		Trible<String, String, String> split = eIDASAttributeProcessingUtils.parseEidasPersonalIdentifier(nameID); -		if (split == null) { -			Logger.error("eIDAS 'PersonalIdentifier' has a wrong format. There had to be a ERROR in implementation!!!!"); -			throw new IllegalStateException("eIDAS 'PersonalIdentifier' has a wrong format. There had to be a ERROR in implementation!!!!"); -			 -		}  -		 -		//build correct formated transient identifier -		String random = Random.nextLongRandom();		 -		try { -			MessageDigest md = MessageDigest.getInstance("SHA-1"); -			byte[] hash = md.digest((split.getThird() + random).getBytes("ISO-8859-1"));			 -			return split.getFirst() + "/" + split.getSecond() + "/" + Base64Utils.encode(hash); -			 -		} catch (Exception e) { -			Logger.error("Can not generate transient personal identifier!", e); -			return null; -			 -		} -		 -	} +	  } diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/resources/META-INF/services/at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder b/id/server/modules/moa-id-module-eIDAS/src/main/resources/META-INF/services/at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder new file mode 100644 index 000000000..62e7c20ab --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/resources/META-INF/services/at.gv.egovernment.moa.id.protocols.builder.attributes.IAttributeBuilder @@ -0,0 +1,6 @@ +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrDateOfBirth +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrFamilyName +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrGivenName +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrNaturalPersonalIdentifier +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrLegalPersonIdentifier +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrLegalName diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/resources/META-INF/services/at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.IeIDASAttribute b/id/server/modules/moa-id-module-eIDAS/src/main/resources/META-INF/services/at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.IeIDASAttribute new file mode 100644 index 000000000..62e7c20ab --- /dev/null +++ b/id/server/modules/moa-id-module-eIDAS/src/main/resources/META-INF/services/at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.IeIDASAttribute @@ -0,0 +1,6 @@ +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrDateOfBirth +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrFamilyName +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrGivenName +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrNaturalPersonalIdentifier +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrLegalPersonIdentifier +at.gv.egovernment.moa.id.protocols.eidas.attributes.builder.eIDASAttrLegalName | 
