diff options
| author | Thomas Lenz <tlenz@iaik.tugraz.at> | 2017-10-13 13:18:11 +0200 | 
|---|---|---|
| committer | Thomas Lenz <tlenz@iaik.tugraz.at> | 2017-10-13 13:18:11 +0200 | 
| commit | d703b4201def4ea55bc865da87010972d13a434e (patch) | |
| tree | d9be30af066c7cf6281a15954318d40bf37131b5 /id/server/modules | |
| parent | 1a80e310ed77110a8757b78b750a6a000495b16f (diff) | |
| download | moa-id-spss-d703b4201def4ea55bc865da87010972d13a434e.tar.gz moa-id-spss-d703b4201def4ea55bc865da87010972d13a434e.tar.bz2 moa-id-spss-d703b4201def4ea55bc865da87010972d13a434e.zip | |
enable mandates for eIDAS nodes
Diffstat (limited to 'id/server/modules')
16 files changed, 607 insertions, 728 deletions
| diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java index 9294f3658..0a2371575 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java @@ -65,6 +65,7 @@ import at.gv.egovernment.moa.id.commons.api.data.IMISMandate;  import at.gv.egovernment.moa.id.commons.api.data.IVerifiyXMLSignatureResponse;  import at.gv.egovernment.moa.id.commons.api.exceptions.ConfigurationException;  import at.gv.egovernment.moa.id.commons.api.exceptions.MOAIDException; +import at.gv.egovernment.moa.id.data.Pair;  import at.gv.egovernment.moa.id.protocols.pvp2x.PVPConstants;  import at.gv.egovernment.moa.id.util.XMLUtil;  import at.gv.egovernment.moa.logging.Logger; @@ -192,8 +193,8 @@ public class AuthenticationServer extends BaseAuthenticationServer {  			Logger.debug("Non-SSO Login requested or SSO not allowed/possible");  			//build ReadInfobox request  			infoboxReadRequest = new InfoboxReadRequestBuilder().build( -					oaParam.getBusinessService(), oaParam -					.getIdentityLinkDomainIdentifier()); +					oaParam.hasBaseIdInternalProcessingRestriction(), oaParam +					.getAreaSpecificTargetIdentifier());  		} @@ -401,9 +402,9 @@ public class AuthenticationServer extends BaseAuthenticationServer {  		try {  			// sets the extended SAML attributes for OID (Organwalter)  			setExtendedSAMLAttributeForMandatesOID(session, mandate, oaParam -					.getBusinessService()); +					.hasBaseIdTransferRestriction()); -			validateExtendedSAMLAttributeForMandates(session, mandate, oaParam.getBusinessService()); +			validateExtendedSAMLAttributeForMandates(session, mandate, oaParam.hasBaseIdTransferRestriction());  		} catch (SAXException e) { @@ -523,9 +524,10 @@ public class AuthenticationServer extends BaseAuthenticationServer {  	 * @return <code><saml:Assertion></code> as a String  	 * @throws BuildException If an error occurs on serializing an extended SAML attribute  	 *                        to be appended to the AUTH-Block. +	 * @throws ConfigurationException   	 */  	private String buildAuthenticationBlock(IAuthenticationSession session, -			IOAAuthParameters oaParam, IRequest pendingReq) throws BuildException { +			IOAAuthParameters oaParam, IRequest pendingReq) throws BuildException, ConfigurationException {  		IIdentityLink identityLink = session.getIdentityLink();  		String issuer = identityLink.getName(); @@ -533,12 +535,16 @@ public class AuthenticationServer extends BaseAuthenticationServer {  		String identificationValue = null;  		String identificationType = null; +		String identificationTypeFriendlyName = null;  		//get processing data from pending-request  		String authURL = pendingReq.getAuthURL(); -		String requestedTarget = pendingReq.getGenericData( -				MOAIDAuthConstants.AUTHPROCESS_DATA_TARGET, String.class);		 -		String targetFriendlyName = pendingReq.getGenericData( +		 +		@Deprecated +		String saml1RequestedTarget = pendingReq.getGenericData( +				MOAIDAuthConstants.AUTHPROCESS_DATA_TARGET, String.class); +		@Deprecated +		String saml1RequestedFriendlyName = pendingReq.getGenericData(  				MOAIDAuthConstants.AUTHPROCESS_DATA_TARGETFRIENDLYNAME, String.class); @@ -546,45 +552,45 @@ public class AuthenticationServer extends BaseAuthenticationServer {  		if (session.isOW() || pendingReq.needSingleSignOnFunctionality() || oaParam.isRemovePBKFromAuthBlock()) {  			identificationType = "";  			identificationValue = ""; - +				  		} else if (identityLink.getIdentificationType().equals(Constants.URN_PREFIX_BASEID)) { -			if (oaParam.getBusinessService()) { - -				String bpkBase64 = new BPKBuilder().buildWBPK(identityLink -						.getIdentificationValue(), oaParam.getIdentityLinkDomainIdentifier()); -				identificationValue = bpkBase64; - -				if (oaParam.getIdentityLinkDomainIdentifier().startsWith(Constants.URN_PREFIX_WBPK + "+")) -					identificationType = oaParam.getIdentityLinkDomainIdentifier(); -				else -					identificationType = Constants.URN_PREFIX_WBPK + "+" + oaParam.getIdentityLinkDomainIdentifier(); - -			} else {				 -				String bpkBase64 = new BPKBuilder().buildBPK(identityLink -						.getIdentificationValue(), requestedTarget); -				identificationValue = bpkBase64; -				identificationType = Constants.URN_PREFIX_CDID + "+" + requestedTarget; +			if (MiscUtil.isNotEmpty(saml1RequestedTarget)) { +				Logger.debug("Build AuthBlock bPK from SAML1 requested target"); +				Pair<String, String> calcId = new BPKBuilder().generateAreaSpecificPersonIdentifier( +						identityLink.getIdentificationValue(), identityLink.getIdentificationType(), +						saml1RequestedTarget); +				identificationValue = calcId.getFirst(); +				identificationType = calcId.getSecond(); +				identificationTypeFriendlyName = saml1RequestedFriendlyName; +				 +			} else { +				Pair<String, String> calcId = new BPKBuilder().generateAreaSpecificPersonIdentifier( +						identityLink.getIdentificationValue(), identityLink.getIdentificationType(), +						oaParam.getAreaSpecificTargetIdentifier()); +				identificationValue = calcId.getFirst(); +				identificationType = calcId.getSecond(); +				identificationTypeFriendlyName = oaParam.getAreaSpecificTargetIdentifierFriendlyName();  			} -  		} else {  			identificationValue = identityLink.getIdentificationValue();  			identificationType = identityLink.getIdentificationType(); +			identificationTypeFriendlyName = oaParam.getAreaSpecificTargetIdentifierFriendlyName();  		}  		//set AuthBlock generation time to session -		String issueInstant = DateTimeUtils.buildDateTimeUTC(Calendar -				.getInstance()); +		String issueInstant = DateTimeUtils.buildDateTimeUTC(Calendar.getInstance());  		session.setIssueInstant(issueInstant); -		// Bug #485 -		// (https://egovlabs.gv.at/tracker/index.php?func=detail&aid=485&group_id=6&atid=105) -		// String oaURL = session.getPublicOAURLPrefix(); - +		//load extend attributes  		List<ExtendedSAMLAttribute> extendedSAMLAttributes = session.getExtendedSAMLAttributesAUTH(); +		//load special authblock text patterns for replacement +		Map<String, String> authBlockTextPatterns = AuthenticationBlockAssertionBuilder. +				generateSpezialAuthBlockPatternMap(pendingReq, issuer, gebDat, issueInstant); +		  		String authBlock = null;  		if (pendingReq.needSingleSignOnFunctionality()) {  			String oaURL = pendingReq.getAuthURL(); @@ -592,19 +598,20 @@ public class AuthenticationServer extends BaseAuthenticationServer {  				oaURL = oaURL.replaceAll("&", "&");  			authBlock = new AuthenticationBlockAssertionBuilder() -					.buildAuthBlockSSO(issuer, issueInstant, authURL, requestedTarget, -							targetFriendlyName, identificationValue, -							identificationType, oaURL, gebDat, -							extendedSAMLAttributes, session, oaParam); - +					.buildAuthBlockSSO(issuer, issueInstant, authURL,  +							oaURL, gebDat, +							extendedSAMLAttributes, session, oaParam, authBlockTextPatterns);  		} else {			  			String oaURL = oaParam.getPublicURLPrefix().replaceAll("&", "&");  			authBlock = new AuthenticationBlockAssertionBuilder() -					.buildAuthBlock(issuer, issueInstant, authURL, requestedTarget, -							targetFriendlyName, identificationValue, -							identificationType, oaURL, gebDat, -							extendedSAMLAttributes, session, oaParam); +					.buildAuthBlock(issuer, issueInstant, authURL,  +							identificationValue, +							identificationType, +							gebDat, +							oaURL, 							 +							identificationTypeFriendlyName, 							  +							extendedSAMLAttributes, session, oaParam, authBlockTextPatterns);  		} @@ -1062,9 +1069,10 @@ public class AuthenticationServer extends BaseAuthenticationServer {  		Element valueBpK = mandatePerson.getOwnerDocument().createElementNS(  				Constants.PD_NS_URI, "Value"); -		String bpkBase64 = new BPKBuilder().buildBPK(baseid, target); +		Pair<String, String> targedId  = new BPKBuilder().generateAreaSpecificPersonIdentifier(baseid, target); +		  		valueBpK.appendChild(mandatePerson.getOwnerDocument().createTextNode( -				bpkBase64)); +				targedId.getFirst()));  		Element typeBpK = mandatePerson.getOwnerDocument().createElementNS(  				Constants.PD_NS_URI, "Type");  		typeBpK.appendChild(mandatePerson.getOwnerDocument().createTextNode( diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationBlockAssertionBuilder.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationBlockAssertionBuilder.java index ecc91991e..80702795b 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationBlockAssertionBuilder.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationBlockAssertionBuilder.java @@ -28,7 +28,11 @@ import java.io.StringWriter;  import java.text.MessageFormat;  import java.text.SimpleDateFormat;  import java.util.Calendar; +import java.util.HashMap; +import java.util.Iterator;  import java.util.List; +import java.util.Map; +import java.util.Map.Entry;  import javax.xml.bind.DatatypeConverter;  import javax.xml.transform.Result; @@ -46,7 +50,9 @@ import org.w3c.dom.Node;  import at.gv.egovernment.moa.id.auth.data.ExtendedSAMLAttributeImpl;  import at.gv.egovernment.moa.id.auth.exception.BuildException;  import at.gv.egovernment.moa.id.auth.exception.ParseException; +import at.gv.egovernment.moa.id.commons.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters; +import at.gv.egovernment.moa.id.commons.api.IRequest;  import at.gv.egovernment.moa.id.commons.api.data.ExtendedSAMLAttribute;  import at.gv.egovernment.moa.id.commons.api.data.IAuthenticationSession;  import at.gv.egovernment.moa.id.commons.api.exceptions.ConfigurationException; @@ -126,6 +132,15 @@ public class AuthenticationBlockAssertionBuilder extends AuthenticationAssertion    public static final int NUM_OF_SAML_ATTRIBUTES = 5;    public static final int NUM_OF_SAML_ATTRIBUTES_SSO = 4; +  public static final String bPKwbPKNSDECLARATION = " xmlns:pr=\"" + PD_NS_URI + "\""; +   +  public static final String AUTHBLOCK_TEXT_PATTERN_NAME = "#NAME#"; +  public static final String AUTHBLOCK_TEXT_PATTERN_BIRTHDAY = "#BIRTHDAY#"; +  public static final String AUTHBLOCK_TEXT_PATTERN_DATE = "#DATE#"; +  public static final String AUTHBLOCK_TEXT_PATTERN_TIME = "#TIME#"; +   +  public static final String PENDING_REQ_AUTHBLOCK_TEXT_KEY = "specialAuthBlockTextKeyValueMap"; +      /**     * Constructor for AuthenticationBlockAssertionBuilder.     */ @@ -133,322 +148,210 @@ public class AuthenticationBlockAssertionBuilder extends AuthenticationAssertion      super();    } +  public static Map<String, String> generateSpezialAuthBlockPatternMap(IRequest pendingReq, String issuer, String gebDat, String issueInstant) { +	  Map<String, String> result = new HashMap<String, String>(); +	   +	  //convert issueInstant +	  Calendar datetime = DatatypeConverter.parseDateTime(issueInstant); +	  SimpleDateFormat dateformat = new SimpleDateFormat("dd.MM.yyyy"); +	  SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss"); +	   +	  //set default values +	  result.put(AUTHBLOCK_TEXT_PATTERN_NAME, issuer); +	  result.put(AUTHBLOCK_TEXT_PATTERN_BIRTHDAY, gebDat); +	  result.put(AUTHBLOCK_TEXT_PATTERN_DATE, dateformat.format(datetime.getTime())); +	  result.put(AUTHBLOCK_TEXT_PATTERN_TIME, timeformat.format(datetime.getTime())); +	  	   +	  //set other values from pendingReq if exists +	  Map<?,?> processSpecificElements = pendingReq.getGenericData(PENDING_REQ_AUTHBLOCK_TEXT_KEY, Map.class); +	  if (processSpecificElements != null && !processSpecificElements.isEmpty()) { +		  Logger.debug("Find process-specific patterns for 'special AuthBlock-Text'. Start processing ..."); +		  Iterator<?> mapIterator = processSpecificElements.entrySet().iterator(); +		  while (mapIterator.hasNext()) { +			  Object objEl = mapIterator.next(); +			  if (objEl instanceof Entry<?, ?>) { +				  try { +					  @SuppressWarnings("unchecked") +					  Entry<String, String> el = (Entry<String, String>) objEl; +					  Logger.trace("  Add pattern-> Key: " + el.getKey() + " Value:" + el.getValue()); +					  if (result.containsKey(el.getKey())) +						  Logger.warn("  Can not add pattern: " + el.getKey() + " , because it already exists."); +					  else +						  result.put(el.getKey(), el.getValue()); +					   +				  } catch (Exception e) { +					  Logger.warn("A pendingReq. specific 'special AuthBlock-Text' element has a suspect type. Ignore it!", e); +					   +				  } +			  } +		  }			  			  +	  }		   +	  	   +	  return result; +  } +   +      /** -   * Builds the authentication block <code><saml:Assertion></code>  -   *  -   * @param issuer authentication block issuer; <code>"GivenName FamilyName"</code> -   * @param issueInstant current timestamp -   * @param authURL URL of MOA-ID authentication component -   * @param target "Geschäftsbereich"; maybe <code>null</code> if the application -   *               is a business application -   * @param identityLinkValue the content of the <code><pr:Value></code> -   *                          child element of the <code><pr:Identification></code> -   *                          element derived from the Identitylink; this is the -   *                          value of the <code>wbPK</code>; -   *                          maybe <code>null</code> if the application is a public service -   * @param identityLinkType  the content of the <code><pr:Type></code> -   *                          child element of the <code><pr:Identification></code> -   *                          element derived from the Identitylink; this includes the -   *                          URN prefix and the identification number of the business -   *                          application used as input for wbPK computation; -   *                          maybe <code>null</code> if the application is a public service -   * @param oaURL public URL of online application requested -   * @param gebDat The date of birth from the identity link. -   * @param extendedSAMLAttributes The SAML attributes to be appended to the AUTHBlock.     *  -   * @return String representation of authentication block  -   *          <code><saml:Assertion></code> built -   *           -   * @throws BuildException If an error occurs on serializing an extended SAML attribute  -   *                        to be appended to the AUTH-Block. +   * @param issuer +   * @param issueInstant +   * @param authURL +   * @param sectorSpecificUniqueId +   * @param sectorSpecificUniqueIdType +   * @param gebDat +   * @param oaURL +   * @param spTargetAreaFriendlyName +   * @param extendedSAMLAttributes +   * @param session +   * @param oaParam +   * @return +   * @throws BuildException + * @throws ConfigurationException      */    public String buildAuthBlock(      String issuer,       String issueInstant,  -    String authURL,  -    String target, -    String targetFriendlyName, -    String identityLinkValue,  -    String identityLinkType, -    String oaURL,  -    String gebDat, +    String authURL,      +    String sectorSpecificUniqueId,  +    String sectorSpecificUniqueIdType, +    String gebDat,         +    String oaURL, +    String spTargetAreaFriendlyName,      List<ExtendedSAMLAttribute> extendedSAMLAttributes,      IAuthenticationSession session, -    IOAAuthParameters oaParam) -  throws BuildException -   -  { -    session.setSAMLAttributeGebeORwbpk(true); -    String gebeORwbpk = ""; -    String wbpkNSDeclaration = ""; -            -    if (target == null) { -    	 -      // OA is a business application -      if (!Constants.URN_PREFIX_HPI.equals(identityLinkType)) { -        // Only add wbPKs to AUTH-Block. HPIs can be added to the AUTH-Block by the corresponding Validator -         gebeORwbpk = MessageFormat.format(WBPK_ATTRIBUTE, new Object[] { identityLinkValue, identityLinkType }); -         wbpkNSDeclaration = " xmlns:pr=\"" + PD_NS_URI + "\""; +    IOAAuthParameters oaParam, +    Map<String, String> specialAuthBlockTextPatterns) +  throws BuildException, ConfigurationException { +	   +	  //initialize state +	  session.setSAMLAttributeGebeORwbpk(true); +      String usedwbPKbPKNamespaceDeclaration = org.apache.commons.lang3.StringUtils.EMPTY; +	  String publicSectorIdOrwbPK = org.apache.commons.lang3.StringUtils.EMPTY; + +	 	   +	  if (!sectorSpecificUniqueIdType.startsWith(MOAIDAuthConstants.PREFIX_CDID)) { +		  //service provider has not an sector Id from Austrian public-domain --> build AuthBlock like a wbPK +		  +		  if (!Constants.URN_PREFIX_HPI.equals(sectorSpecificUniqueIdType)) { +			  //Only add wbPKs to AUTH-Block. HPIs can be added to the AUTH-Block by the corresponding Validator +			  publicSectorIdOrwbPK = MessageFormat.format(WBPK_ATTRIBUTE, new Object[] {sectorSpecificUniqueId, sectorSpecificUniqueIdType}); +			  usedwbPKbPKNamespaceDeclaration = bPKwbPKNSDECLARATION; -         //adding type of wbPK domain identifier         -        ExtendedSAMLAttribute idLinkDomainIdentifierTypeAttribute =  -             new ExtendedSAMLAttributeImpl("IdentityLinkDomainIdentifierType", oaParam.getIdentityLinkDomainIdentifierType(), Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); +			  //adding type of wbPK domain identifier         +			  ExtendedSAMLAttribute idLinkDomainIdentifierTypeAttribute =  +					  new ExtendedSAMLAttributeImpl("IdentityLinkDomainIdentifierType", spTargetAreaFriendlyName, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -        extendedSAMLAttributes.add(idLinkDomainIdentifierTypeAttribute); +			  extendedSAMLAttributes.add(idLinkDomainIdentifierTypeAttribute); -      } else { -        // We do not have a wbPK, therefore no SAML-Attribute is provided -        session.setSAMLAttributeGebeORwbpk(false); -      } +		  } else { +			  // We do not have a wbPK, therefore no SAML-Attribute is provided +			  session.setSAMLAttributeGebeORwbpk(false); +			   +		  }       +	  } else {		   +		  // OA is a govermental application +		   +		  //convert sector identifier into friendly name and add it to AuthBlock +		  String sectorName = TargetToSectorNameMapper.getSectorNameViaTarget(sectorSpecificUniqueIdType);		   +		  if (StringUtils.isEmpty(sectorName)) { +			  if (spTargetAreaFriendlyName != null) +				  sectorName = spTargetAreaFriendlyName; +			   +		  }              +		  publicSectorIdOrwbPK = MessageFormat.format(GESCHAEFTS_BEREICH_ATTRIBUTE,  +				  new Object[] {sectorSpecificUniqueIdType.substring(MOAIDAuthConstants.PREFIX_CDID.length()) + " (" + sectorName + ")" }); -    } else { -      // OA is a govermental application -      String sectorName = TargetToSectorNameMapper.getSectorNameViaTarget(target); -      if (StringUtils.isEmpty(sectorName)) { -    	  if (targetFriendlyName != null) -    		  sectorName = targetFriendlyName;  -      } -       -         -      //gebeORwbpk = MessageFormat.format(GESCHAEFTS_BEREICH_ATTRIBUTE, new Object[] { target }); -      gebeORwbpk = MessageFormat.format(GESCHAEFTS_BEREICH_ATTRIBUTE, new Object[] { target + " (" + sectorName + ")" }); -       -      //no business service, adding bPK -      if (identityLinkValue != null) { -    	  Element bpkSamlValueElement; -    	  try { -    		  bpkSamlValueElement = DOMUtils.parseDocument(MessageFormat.format(PR_IDENTIFICATION_ATTRIBUTE, new Object[] { identityLinkValue, Constants.URN_PREFIX_BPK }), false, null, null).getDocumentElement(); -    	  } catch (Exception e) { -    		  Logger.error("Error on building AUTH-Block: " + e.getMessage()); -    		  throw new BuildException("builder.00", new Object[] { "AUTH-Block", e.toString()}); -    	  }  -	       -	//      String s = xmlToString(bpkSamlValueElement); -	//      System.out.println("bpkSamlValueElement: " + s); -	       -    	  ExtendedSAMLAttribute bpkAttribute =  -    		  new ExtendedSAMLAttributeImpl("bPK", bpkSamlValueElement, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -    	  extendedSAMLAttributes.add(bpkAttribute); -      } -       -      boolean useMandate = session.isMandateUsed(); -      if (useMandate) { -    	  //String mandateReferenceValue = Random.nextRandom(); -    	  String mandateReferenceValue = Random.nextProcessReferenceValue(); -    	  // remove leading "-" -    	  if (mandateReferenceValue.startsWith("-")) -    		  mandateReferenceValue = mandateReferenceValue.substring(1); -    		  -    	  session.setMandateReferenceValue(mandateReferenceValue); -    		  -    	  ExtendedSAMLAttribute mandateReferenceValueAttribute =  -    		  new ExtendedSAMLAttributeImpl("mandateReferenceValue", mandateReferenceValue, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK); -    	             -    	  extendedSAMLAttributes.add(mandateReferenceValueAttribute); -      } -    	 -       - -     //gebeORwbpk = gebeORwbpk  + MessageFormat.format(BPK_ATTRIBUTE, new Object[] { identityLinkValue, identityLinkType }); -     wbpkNSDeclaration = " xmlns:pr=\"" + PD_NS_URI + "\""; -    } -     -    //adding friendly name of OA     -    String oaFriendlyName = StringUtils.isEmpty(oaParam.getFriendlyName()) ? "" : oaParam.getFriendlyName();  -     -    ExtendedSAMLAttribute oaFriendlyNameAttribute =  -         new ExtendedSAMLAttributeImpl("oaFriendlyName", oaFriendlyName, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -     -    extendedSAMLAttributes.add(oaFriendlyNameAttribute); +		  //add bPK to AuthBlock if it is not empty +		  if (MiscUtil.isNotEmpty(sectorSpecificUniqueId)) { +			  Element bpkSamlValueElement; +			  try { +				  bpkSamlValueElement = DOMUtils.parseDocument(MessageFormat.format(PR_IDENTIFICATION_ATTRIBUTE, new Object[] { sectorSpecificUniqueId, Constants.URN_PREFIX_BPK }), false, null, null).getDocumentElement(); +				   +			  } catch (Exception e) { +				  Logger.error("Error on building AUTH-Block: " + e.getMessage()); +				  throw new BuildException("builder.00", new Object[] { "AUTH-Block", e.toString()}); +				   +			  }  +	      	       +			  ExtendedSAMLAttribute bpkAttribute =  +					  new ExtendedSAMLAttributeImpl("bPK", bpkSamlValueElement, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); +			  extendedSAMLAttributes.add(bpkAttribute); +		  } +          	 +		  usedwbPKbPKNamespaceDeclaration = bPKwbPKNSDECLARATION; +	  } +	  //check if mandates should be used +	  if (session.isMandateUsed()) { +		   +		  //generate mandate reference value +		  String mandateReferenceValue = Random.nextProcessReferenceValue();    		  +		  session.setMandateReferenceValue(mandateReferenceValue); +		  +		  ExtendedSAMLAttribute mandateReferenceValueAttribute =  +				  new ExtendedSAMLAttributeImpl("mandateReferenceValue", mandateReferenceValue, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK); +	             +		  extendedSAMLAttributes.add(mandateReferenceValueAttribute); +	  } +	   +	  //adding friendly name of OA     +	  String oaFriendlyName = StringUtils.isEmpty(oaParam.getFriendlyName()) ? "" : oaParam.getFriendlyName();      +	  ExtendedSAMLAttribute oaFriendlyNameAttribute =  +			  new ExtendedSAMLAttributeImpl("oaFriendlyName", oaFriendlyName, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY);     +	  extendedSAMLAttributes.add(oaFriendlyNameAttribute); -    String text = ""; -    if (MiscUtil.isNotEmpty(oaParam.getAditionalAuthBlockText())) { -		Logger.debug("Use addional AuthBlock Text from OA=" + oaParam.getPublicURLPrefix()); -		text = oaParam.getAditionalAuthBlockText(); -	} -   	String specialText =  MessageFormat.format(SPECIAL_TEXT_ATTRIBUTE,  -   			new Object[] { generateSpecialText(text, issuer, gebDat, issueInstant) }); +	  //generate special AuthBlock text +	  String text = ""; +	  if (MiscUtil.isNotEmpty(oaParam.getAditionalAuthBlockText())) { +		  Logger.debug("Use addional AuthBlock Text from OA=" + oaParam.getPublicURLPrefix()); +		  text = oaParam.getAditionalAuthBlockText(); +	  }     +	  String specialText =  MessageFormat.format(SPECIAL_TEXT_ATTRIBUTE,  +			  new Object[] { generateSpecialText(text, specialAuthBlockTextPatterns) }); -   	//generate unique AuthBlock tokken -   	String uniquetokken = Random.nextRandom(); -   	session.setAuthBlockTokken(uniquetokken); +	   +	  //generate unique AuthBlock tokken +	  String uniquetokken = Random.nextProcessReferenceValue(); +	  session.setAuthBlockTokken(uniquetokken);      String assertion;      try {    	        assertion = MessageFormat.format(          AUTH_BLOCK, new Object[] {  -          wbpkNSDeclaration,  +          usedwbPKbPKNamespaceDeclaration,             issuer,             issueInstant,             authURL,  -          gebeORwbpk,  +          publicSectorIdOrwbPK,             oaURL,             gebDat,            specialText, -          MessageFormat.format(AUTHBLOCKTOKKEN_ATTRIBUTE,  -         			new Object[] { uniquetokken }), +          MessageFormat.format(AUTHBLOCKTOKKEN_ATTRIBUTE, new Object[] {uniquetokken}),            buildExtendedSAMLAttributes(extendedSAMLAttributes)}); -    } catch (ParseException e) { -      Logger.error("Error on building AUTH-Block: " + e.getMessage()); -      throw new BuildException("builder.00", new Object[] { "AUTH-Block", e.toString()}); -    } -     -    return assertion; -     -  } -   -  /** -   * Builds the authentication block <code><saml:Assertion></code>  -   *  -   * @param issuer authentication block issuer; <code>"GivenName FamilyName"</code> -   * @param issueInstant current timestamp -   * @param authURL URL of MOA-ID authentication component -   * @param target "Geschäftsbereich"; maybe <code>null</code> if the application -   *               is a business application -   * @param identityLinkValue the content of the <code><pr:Value></code> -   *                          child element of the <code><pr:Identification></code> -   *                          element derived from the Identitylink; this is the -   *                          value of the <code>wbPK</code>; -   *                          maybe <code>null</code> if the application is a public service -   * @param identityLinkType  the content of the <code><pr:Type></code> -   *                          child element of the <code><pr:Identification></code> -   *                          element derived from the Identitylink; this includes the -   *                          URN prefix and the identification number of the business -   *                          application used as input for wbPK computation; -   *                          maybe <code>null</code> if the application is a public service -   * @param oaURL public URL of online application requested -   * @param gebDat The date of birth from the identity link. -   * @param extendedSAMLAttributes The SAML attributes to be appended to the AUTHBlock. -   *  -   * @return String representation of authentication block  -   *          <code><saml:Assertion></code> built -   *           -   * @throws BuildException If an error occurs on serializing an extended SAML attribute  -   *                        to be appended to the AUTH-Block. -   */ -  public String buildAuthBlockForeignID( -    String issuer,  -    String issueInstant,  -    String authURL,  -    String target, -    String identityLinkValue,  -    String identityLinkType, -    String oaURL,  -    String gebDat, -    List<ExtendedSAMLAttribute> extendedSAMLAttributes, -    IAuthenticationSession session, -    IOAAuthParameters oaParam) -  throws BuildException -  { -    session.setSAMLAttributeGebeORwbpk(true); -    String gebeORwbpk = ""; -    String wbpkNSDeclaration = ""; -         -    if (target == null) { -      // OA is a business application -      if (!Constants.URN_PREFIX_HPI.equals(identityLinkType)) { -        // Only add wbPKs to AUTH-Block. HPIs can be added to the AUTH-Block by the corresponding Validator -         gebeORwbpk = MessageFormat.format(WBPK_ATTRIBUTE, new Object[] { identityLinkValue, identityLinkType }); -         wbpkNSDeclaration = " xmlns:pr=\"" + PD_NS_URI + "\""; -          -         //BZ.., adding type of wbPK domain identifier         -        ExtendedSAMLAttribute idLinkDomainIdentifierTypeAttribute =  -             new ExtendedSAMLAttributeImpl("IdentityLinkDomainIdentifierType", oaParam.getIdentityLinkDomainIdentifierType(), Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -             -        extendedSAMLAttributes.add(idLinkDomainIdentifierTypeAttribute); -        //..BZ -          -      } else { -        // We do not have a wbPK, therefore no SAML-Attribute is provided -        session.setSAMLAttributeGebeORwbpk(false); -      } -    } else { -      // OA is a govermental application -      //BZ.. -      String sectorName = TargetToSectorNameMapper.getSectorNameViaTarget(target);       -      //gebeORwbpk = MessageFormat.format(GESCHAEFTS_BEREICH_ATTRIBUTE, new Object[] { target }); -      gebeORwbpk = MessageFormat.format(GESCHAEFTS_BEREICH_ATTRIBUTE, new Object[] { target + " (" + sectorName + ")" }); -      //..BZ -       -      //BZ.., no business service, adding bPK -      Element bpkSamlValueElement; -      try { -         bpkSamlValueElement = DOMUtils.parseDocument(MessageFormat.format(PR_IDENTIFICATION_ATTRIBUTE, new Object[] { identityLinkValue, Constants.URN_PREFIX_BPK }), false, null, null).getDocumentElement(); -      } catch (Exception e) { -         Logger.error("Error on building AUTH-Block: " + e.getMessage()); -          throw new BuildException("builder.00", new Object[] { "AUTH-Block", e.toString()}); -      }  -             -      ExtendedSAMLAttribute bpkAttribute =  -          new ExtendedSAMLAttributeImpl("bPK", bpkSamlValueElement, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -          -     extendedSAMLAttributes.add(bpkAttribute); -      //gebeORwbpk = gebeORwbpk  + MessageFormat.format(BPK_ATTRIBUTE, new Object[] { identityLinkValue, identityLinkType }); -     wbpkNSDeclaration = " xmlns:pr=\"" + PD_NS_URI + "\""; -     //..BZ      -    } -     -    //BZ.., adding friendly name of OA     -    String oaFriendlyName = StringUtils.isEmpty(oaParam.getFriendlyName()) ? "" : oaParam.getFriendlyName();  -     -    ExtendedSAMLAttribute oaFriendlyNameAttribute =  -         new ExtendedSAMLAttributeImpl("oaFriendlyName", oaFriendlyName, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -     -    extendedSAMLAttributes.add(oaFriendlyNameAttribute); -    //..BZ -     -    String text = ""; -    if (MiscUtil.isNotEmpty(oaParam.getAditionalAuthBlockText())) { -		Logger.debug("Use addional AuthBlock Text from OA=" + oaParam.getPublicURLPrefix()); -		text = oaParam.getAditionalAuthBlockText(); -	} -     -   	String specialText =  MessageFormat.format(SPECIAL_TEXT_ATTRIBUTE,  -   			new Object[] { generateSpecialText(text, issuer, gebDat, issueInstant) }); -     -   	//generate unique AuthBlock tokken -   	String uniquetokken = Random.nextRandom(); -   	session.setAuthBlockTokken(uniquetokken); -   	 -    String assertion; -    try { -      assertion = MessageFormat.format( -        AUTH_BLOCK, new Object[] {  -          wbpkNSDeclaration,  -          issuer,  -          issueInstant,  -          authURL,  -          gebeORwbpk,  -          oaURL,  -          gebDat, -          specialText, -          MessageFormat.format(AUTHBLOCKTOKKEN_ATTRIBUTE,  -       			new Object[] { uniquetokken }), -          buildExtendedSAMLAttributes(extendedSAMLAttributes)});      } catch (ParseException e) {        Logger.error("Error on building AUTH-Block: " + e.getMessage());        throw new BuildException("builder.00", new Object[] { "AUTH-Block", e.toString()}); +            }      return assertion;    } -  public static String generateSpecialText(String inputtext, String issuer, String gebDat, String issueInstant) { -	   	Calendar datetime = DatatypeConverter.parseDateTime(issueInstant); -	   	SimpleDateFormat dateformat = new SimpleDateFormat("dd.MM.yyyy"); -	   	SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss"); -	  -	   	String text = inputtext.replaceAll("#NAME#", issuer); -	    text = text.replaceAll("#BIRTHDAY#", gebDat); -	   	text = text.replaceAll("#DATE#", dateformat.format(datetime.getTime())); -	   	text = text.replaceAll("#TIME#", timeformat.format(datetime.getTime())); -	   	 -	   	return text; +  public static String generateSpecialText(String inputtext, Map<String, String> specialAuthBlockTextPatterns) {	   	 +	  Iterator<Entry<String, String>> it = specialAuthBlockTextPatterns.entrySet().iterator(); +	  String text = inputtext; +	  while (it.hasNext()) { +		  Entry<String, String> el = it.next(); +		  text = text.replaceAll(el.getKey(), el.getValue()); +		   +	  } +	   +	  return text; +	    }    public static String xmlToString(Node node) { @@ -472,65 +375,52 @@ public class AuthenticationBlockAssertionBuilder extends AuthenticationAssertion  		    String issuer,   		    String issueInstant,   		    String authURL,  -		    String target, -		    String targetFriendlyName, -		    String identityLinkValue,  -		    String identityLinkType,  		    String oaURL,   		    String gebDat,  		    List<ExtendedSAMLAttribute> extendedSAMLAttributes,  		    IAuthenticationSession session, -		    IOAAuthParameters oaParam) +		    IOAAuthParameters oaParam, +		    Map<String, String> specialAuthBlockTextPatterns)  		  throws BuildException  		  {  		    session.setSAMLAttributeGebeORwbpk(true);  		    String gebeORwbpk = "";  		    String wbpkNSDeclaration = ""; -		            -		    if (target != null) { -		       -		      boolean useMandate = session.isMandateUsed(); -		      if (useMandate) { -		    	  //String mandateReferenceValue = Random.nextRandom(); -		    	  String mandateReferenceValue = Random.nextProcessReferenceValue(); -		    	  // remove leading "-" -		    	  if (mandateReferenceValue.startsWith("-")) -		    		  mandateReferenceValue = mandateReferenceValue.substring(1); -		    		  -		    	  session.setMandateReferenceValue(mandateReferenceValue); + +		    //add mandate reference-value if mandates are used +		    if (session.isMandateUsed()) { +		    	String mandateReferenceValue = Random.nextProcessReferenceValue();		    		  +		    	session.setMandateReferenceValue(mandateReferenceValue); -		    	  ExtendedSAMLAttribute mandateReferenceValueAttribute =  -		    		  new ExtendedSAMLAttributeImpl("mandateReferenceValue", mandateReferenceValue, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK); +		    	ExtendedSAMLAttribute mandateReferenceValueAttribute =  +	    			  new ExtendedSAMLAttributeImpl("mandateReferenceValue", mandateReferenceValue, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK); -		    	  extendedSAMLAttributes.add(mandateReferenceValueAttribute); -		      } +		    	extendedSAMLAttributes.add(mandateReferenceValueAttribute);  		    } +  		    //adding friendly name of OA  		    String friendlyname;  			try { -				friendlyname = AuthConfigurationProviderFactory.getInstance().getSSOFriendlyName(); -	 -		    ExtendedSAMLAttribute oaFriendlyNameAttribute =  -		         new ExtendedSAMLAttributeImpl("oaFriendlyName", friendlyname, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); -		     -		    extendedSAMLAttributes.add(oaFriendlyNameAttribute); -		     -		     -		    String text = AuthConfigurationProviderFactory.getInstance().getSSOSpecialText(); +				friendlyname = AuthConfigurationProviderFactory.getInstance().getSSOFriendlyName();	 +				ExtendedSAMLAttribute oaFriendlyNameAttribute =  +						new ExtendedSAMLAttributeImpl("oaFriendlyName", friendlyname, Constants.MOA_NS_URI, ExtendedSAMLAttribute.ADD_TO_AUTHBLOCK_ONLY); +				extendedSAMLAttributes.add(oaFriendlyNameAttribute); +				 +		    //generate special AuthBlock text +		    String text = AuthConfigurationProviderFactory.getInstance().getSSOSpecialText();		      		    if (MiscUtil.isEmpty(text))  		    	text="";  		   	String specialText =  MessageFormat.format(SPECIAL_TEXT_ATTRIBUTE,  -		   			new Object[] { generateSpecialText(text, issuer, gebDat, issueInstant) }); +		   			new Object[] { generateSpecialText(text, specialAuthBlockTextPatterns) }); +		   	  		   	//generate unique AuthBlock tokken -		   	String uniquetokken = Random.nextRandom(); +		   	String uniquetokken = Random.nextProcessReferenceValue();  		   	session.setAuthBlockTokken(uniquetokken); -		    String assertion; -    	 -		      assertion = MessageFormat.format( +		    String assertion = MessageFormat.format(  		        AUTH_BLOCK, new Object[] {   		          wbpkNSDeclaration,   		          issuer,  diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java index 608f50200..88a235978 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java @@ -120,12 +120,11 @@ public class InitializeBKUAuthenticationTask extends AbstractAuthServletTask {  		    	//get Target from config or from request in case of SAML 1				  				String target = null; -				if (MiscUtil.isNotEmpty(pendingReq.getGenericData("target", String.class)) &&  +				if (MiscUtil.isNotEmpty(pendingReq.getGenericData("saml1_target", String.class)) &&   						pendingReq.requestedModule().equals("at.gv.egovernment.moa.id.protocols.saml1.SAML1Protocol")) -					target = pendingReq.getGenericData("target", String.class); -				else -					target = oaParam.getTarget(); -								 +					target = pendingReq.getGenericData("saml1_target", String.class); + +				  		    	String bkuURL = oaParam.getBKUURL(bkuid);  		    	if (MiscUtil.isEmpty(bkuURL)) {  		    		Logger.info("No OA specific BKU defined. Use BKU from default configuration"); diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java index 975dec429..d2fd4d1de 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java @@ -35,7 +35,6 @@ import org.w3c.dom.Element;  import at.gv.egovernment.moa.id.advancedlogging.MOAIDEventConstants;  import at.gv.egovernment.moa.id.auth.builder.DataURLBuilder; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.AuthenticationException;  import at.gv.egovernment.moa.id.auth.exception.MISSimpleClientException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask; @@ -100,14 +99,7 @@ public class PrepareGetMISMandateTask extends AbstractAuthServletTask {  	        byte[] authBlock = moasession.getAuthBlock().getBytes("UTF-8");  	        //TODO: check in case of SSO!!! -	        String targetType = null;   -	        if(oaParam.getBusinessService()){ -	        	targetType = oaParam.getIdentityLinkDomainIdentifier(); -	        	 -	        } else { -	        	targetType = AuthenticationSession.TARGET_PREFIX_ + oaParam.getTarget(); -	        	 -	        } +	        String targetType = oaParam.getAreaSpecificTargetIdentifier();    	        revisionsLogger.logEvent(pendingReq.getOnlineApplicationConfiguration(),   					pendingReq, MOAIDEventConstants.AUTHPROCESS_MANDATE_SERVICE_REQUESTED, mandateReferenceValue); diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/CreateXMLSignatureResponseValidator.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/CreateXMLSignatureResponseValidator.java index a227ab5be..da96bfe54 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/CreateXMLSignatureResponseValidator.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/CreateXMLSignatureResponseValidator.java @@ -57,8 +57,10 @@ import org.jaxen.SimpleNamespaceContext;  import org.w3c.dom.Element;  import at.gv.egovernment.moa.id.auth.builder.AuthenticationBlockAssertionBuilder; +import at.gv.egovernment.moa.id.auth.builder.BPKBuilder;  import at.gv.egovernment.moa.id.auth.data.CreateXMLSignatureResponse;  import at.gv.egovernment.moa.id.auth.data.SAMLAttribute; +import at.gv.egovernment.moa.id.auth.exception.BuildException;  import at.gv.egovernment.moa.id.auth.exception.ValidateException;  import at.gv.egovernment.moa.id.commons.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters; @@ -69,6 +71,7 @@ import at.gv.egovernment.moa.id.commons.api.data.IIdentityLink;  import at.gv.egovernment.moa.id.commons.api.exceptions.ConfigurationException;  import at.gv.egovernment.moa.id.config.TargetToSectorNameMapper;  import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProviderFactory; +import at.gv.egovernment.moa.id.data.Pair;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.Constants;  import at.gv.egovernment.moa.util.MiscUtil; @@ -128,42 +131,46 @@ public class CreateXMLSignatureResponseValidator {     * @param session   * @param pendingReq      * @throws ValidateException + * @throws BuildException  + * @throws ConfigurationException      */    public void validate(CreateXMLSignatureResponse createXMLSignatureResponse, IAuthenticationSession session, IRequest pendingReq) -   throws ValidateException { +   throws ValidateException, BuildException, ConfigurationException {        // A3.056: more then one /saml:Assertion/saml:AttributeStatement/saml:Subject/saml:NameIdentifier      IOAAuthParameters oaParam = pendingReq.getOnlineApplicationConfiguration(); -	   -    String gbTarget = pendingReq.getGenericData( -    		MOAIDAuthConstants.AUTHPROCESS_DATA_TARGET, String.class); -    String targetFriendlyName = pendingReq.getGenericData( -    		MOAIDAuthConstants.AUTHPROCESS_DATA_TARGETFRIENDLYNAME, String.class);      String oaURL = oaParam.getPublicURLPrefix();  -    boolean businessService = oaParam.getBusinessService(); -          IIdentityLink identityLink = session.getIdentityLink(); +    @Deprecated +	String saml1RequestedTarget = pendingReq.getGenericData( +			MOAIDAuthConstants.AUTHPROCESS_DATA_TARGET, String.class); +	@Deprecated +	String saml1RequestedFriendlyName = pendingReq.getGenericData( +			MOAIDAuthConstants.AUTHPROCESS_DATA_TARGETFRIENDLYNAME, String.class); +     +                      Element samlAssertion = createXMLSignatureResponse.getSamlAssertion();  +         +    //validate issuer      String issuer = samlAssertion.getAttribute("Issuer");      if (issuer == null) {        // should not happen, because parser would dedect this        throw new ValidateException("validator.32", null);      }      // replace ' in name with ' -    issuer = issuer.replaceAll("'", "'"); +    issuer = issuer.replaceAll("'", "'");     +    if (!issuer.equals(identityLink.getName())) +        throw new ValidateException("validator.33", new Object[] {issuer, identityLink.getName()}); +         +    //validate issuerInstant      String issueInstant = samlAssertion.getAttribute("IssueInstant"); -    if (!issueInstant.equals(session.getIssueInstant())) { -      throw new ValidateException("validator.39", new Object[] {issueInstant, session.getIssueInstant()}); -    } +    if (!issueInstant.equals(session.getIssueInstant())) +    	throw new ValidateException("validator.39", new Object[] {issueInstant, session.getIssueInstant()}); -    String name = identityLink.getName(); -    if (!issuer.equals(name)) { -      throw new ValidateException("validator.33", new Object[] {issuer, name}); -    }      -        +    //validate extended attributes                  SAMLAttribute[] samlAttributes = createXMLSignatureResponse.getSamlAttributes();      boolean foundOA = false; @@ -171,241 +178,253 @@ public class CreateXMLSignatureResponseValidator {      boolean foundWBPK = false;      int offset = 0; -    // check number of SAML aatributes +    // check number of SAML attributes      List<ExtendedSAMLAttribute> extendedSAMLAttributes = session.getExtendedSAMLAttributesAUTH();      int extendedSAMLAttributesNum = 0;      if (extendedSAMLAttributes != null) { -      extendedSAMLAttributesNum = extendedSAMLAttributes.size(); +    	extendedSAMLAttributesNum = extendedSAMLAttributes.size();      } -    int expectedSAMLAttributeNumber =  -      AuthenticationBlockAssertionBuilder.NUM_OF_SAML_ATTRIBUTES + extendedSAMLAttributesNum; +    int expectedSAMLAttributeNumber = AuthenticationBlockAssertionBuilder.NUM_OF_SAML_ATTRIBUTES + extendedSAMLAttributesNum; +     +    //remove one attribute from expected attributes if public SP target or wbPK is not part of AuthBlock      if (!session.getSAMLAttributeGebeORwbpk()) expectedSAMLAttributeNumber--; +     +    //check number of attributes in AuthBlock response against expected number of attributes       int actualSAMLAttributeNumber = samlAttributes.length;      if (actualSAMLAttributeNumber != expectedSAMLAttributeNumber) { -      Logger.error("Wrong number of SAML attributes in CreateXMLSignatureResponse: expected " +  -        expectedSAMLAttributeNumber + ", but was " + actualSAMLAttributeNumber); -      throw new ValidateException( -        "validator.36",  -        new Object[] {String.valueOf(actualSAMLAttributeNumber), String.valueOf(expectedSAMLAttributeNumber)}); +    	Logger.error("Wrong number of SAML attributes in CreateXMLSignatureResponse: expected " +  +    			expectedSAMLAttributeNumber + ", but was " + actualSAMLAttributeNumber); +    	throw new ValidateException("validator.36",  +    		  new Object[] {String.valueOf(actualSAMLAttributeNumber), String.valueOf(expectedSAMLAttributeNumber)}); +    	      } -    SAMLAttribute samlAttribute; -    if (session.getSAMLAttributeGebeORwbpk()) { -      // check the first attribute ("Geschaeftsbereich" or "wbPK") -      samlAttribute = samlAttributes[0]; -      if (businessService) { -        if (!samlAttribute.getName().equals("wbPK")) { -          if (samlAttribute.getName().equals("Geschaeftsbereich")) { -            throw new ValidateException("validator.26", null); -          } else { -            throw new ValidateException( -            "validator.37",  -            new Object[] {samlAttribute.getName(), "wbPK", String.valueOf(1)}); -          } -        }           -        if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) {           -          foundWBPK = true; -          try { -            Element attrValue = (Element)samlAttribute.getValue(); -            String value = ((Element)attrValue.getElementsByTagNameNS(Constants.PD_NS_URI, "Value").item(0)).getFirstChild().getNodeValue(); -            String type =  ((Element)attrValue.getElementsByTagNameNS(Constants.PD_NS_URI, "Type").item(0)).getFirstChild().getNodeValue(); -            if (!value.equals(identityLink.getIdentificationValue())) { -              throw new ValidateException("validator.28", null);  -            } -            if (!type.equals(identityLink.getIdentificationType())) { -              throw new ValidateException("validator.28", null);  -            } -          } catch (Exception ex) { -            throw new ValidateException("validator.29", null); -          } -        } else { -          throw new ValidateException("validator.30", null); -        }     -      } else { -        if (!samlAttribute.getName().equals("Geschaeftsbereich")) { -          if (samlAttribute.getName().equals("wbPK")) { -            throw new ValidateException("validator.26", null); -          } else { -            throw new ValidateException( -            "validator.37",  -            new Object[] {samlAttribute.getName(), "Geschaeftsbereich", String.valueOf(1)}); -          } -        } -        if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) {           -          foundGB = true;           -          String sectorName = TargetToSectorNameMapper.getSectorNameViaTarget(gbTarget); -          if (StringUtils.isEmpty(sectorName)) { -        	  if (targetFriendlyName != null) -        		  sectorName = targetFriendlyName;  -          } -          gbTarget = gbTarget + " (" + sectorName + ")"; -          //gbTarget = gbTarget + " (" + TargetToSectorNameMapper.getSectorNameViaTarget(gbTarget) + ")"; +    //now check every single attribute +    SAMLAttribute samlAttribute = null; +    Pair<String, String> userSectorId = null; +    if (session.getSAMLAttributeGebeORwbpk()) {       +    	//check the first attribute ("Geschaeftsbereich" or "wbPK") +    	samlAttribute = samlAttributes[0]; +    	 +    	//calculate bPK or wbPK as reference value for validation    	 +    	if (MiscUtil.isNotEmpty(saml1RequestedTarget)) +    		userSectorId = new BPKBuilder().generateAreaSpecificPersonIdentifier( +    				identityLink.getIdentificationValue(), identityLink.getIdentificationType(),  +    				saml1RequestedTarget); +    	else +    		userSectorId = new BPKBuilder().generateAreaSpecificPersonIdentifier( +    				identityLink.getIdentificationValue(), identityLink.getIdentificationType(),  +    				oaParam.getAreaSpecificTargetIdentifier()); +    	 +    	//every sector specific identifier that has not 'urn:publicid:gv.at:cdid+' as prefix +    	// is internally handled as an AuthBlock with wbPK  +    	if (!userSectorId.getSecond().startsWith(MOAIDAuthConstants.PREFIX_CDID)) { +    		if (!samlAttribute.getName().equals("wbPK")) { +    			if (samlAttribute.getName().equals("Geschaeftsbereich")) { +    				throw new ValidateException("validator.26", null); +    				 +    			} else { +    				throw new ValidateException("validator.37",  +    						new Object[] {samlAttribute.getName(), "wbPK", String.valueOf(1)}); +    			} +    		} +    		 +    		if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) {           +    			foundWBPK = true; +    			try { +    				Element attrValue = (Element)samlAttribute.getValue(); +    				String value = ((Element)attrValue.getElementsByTagNameNS(Constants.PD_NS_URI, "Value").item(0)).getFirstChild().getNodeValue(); +    				String type =  ((Element)attrValue.getElementsByTagNameNS(Constants.PD_NS_URI, "Type").item(0)).getFirstChild().getNodeValue(); +    				if (!value.equals(userSectorId.getFirst())) +    					throw new ValidateException("validator.28", null);  -          if (!gbTarget.equals((String)samlAttribute.getValue())) { -            throw new ValidateException("validator.13", null);  -          }              -        } else { -          throw new ValidateException("validator.12", null); -        } -      } -    } else { -      offset--; -    } +    				if (!type.equals(userSectorId.getSecond())) +    					throw new ValidateException("validator.28", null);  +    				 +    			} catch (Exception ex) { +    				throw new ValidateException("validator.29", null); +    			} +    			 +    		} else +    			throw new ValidateException("validator.30", null); +    		 +    	} else { +    		if (!samlAttribute.getName().equals("Geschaeftsbereich")) { +    			if (samlAttribute.getName().equals("wbPK")) +    				throw new ValidateException("validator.26", null); +           +    			else +    				throw new ValidateException("validator.37",  +    						new Object[] {samlAttribute.getName(), "Geschaeftsbereich", String.valueOf(1)}); +    		} +    	   +    		if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) {           +    			foundGB = true; +           +    			String sectorName = TargetToSectorNameMapper.getSectorNameViaTarget(userSectorId.getSecond()); +    			if (StringUtils.isEmpty(sectorName)) { +    				if (saml1RequestedFriendlyName != null) +    					sectorName = saml1RequestedFriendlyName; +    				else  +    					sectorName = oaParam.getAreaSpecificTargetIdentifierFriendlyName(); +    			} +    			 +    			String refValueSector = userSectorId.getSecond().substring(MOAIDAuthConstants.PREFIX_CDID.length()) + " (" + sectorName + ")"; +    			if (!refValueSector.equals((String)samlAttribute.getValue())) +    				throw new ValidateException("validator.13", null);              +    	   +    		} else +    			throw new ValidateException("validator.12", null); +    	   +      		} +    	 +    	} else +    		//check nothing if wbPK or public SP target is not part of AuthBlock +    		offset--; + +    	// check the second attribute (must be "OA") +    	samlAttribute = samlAttributes[1 + offset]; +    	if (!samlAttribute.getName().equals("OA")) +    		throw new ValidateException("validator.37",  +    				new Object[] {samlAttribute.getName(), "OA", String.valueOf(2)}); + +    	if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { +    		foundOA = true;             +    		if (!oaURL.equals((String)samlAttribute.getValue()))              +    			throw new ValidateException("validator.16", new Object[] {":gefunden wurde '" + oaURL + "', erwartet wurde '" + samlAttribute.getValue()}); +    		 +    	} else +    		throw new ValidateException("validator.15", null); -    // check the second attribute (must be "OA") -    samlAttribute = samlAttributes[1 + offset]; -    if (!samlAttribute.getName().equals("OA")) { -      throw new ValidateException( -          "validator.37",  -          new Object[] {samlAttribute.getName(), "OA", String.valueOf(2)}); -    } -    if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { -      foundOA = true;             -      if (!oaURL.equals((String)samlAttribute.getValue())) {  // CHECKS für die AttributeVALUES fehlen noch              -        throw new ValidateException("validator.16", new Object[] {":gefunden wurde '" + oaURL + "', erwartet wurde '" + samlAttribute.getValue()});  -      }              -    } else { -      throw new ValidateException("validator.15", null); -    } -    // check the third attribute (must be "Geburtsdatum") -    samlAttribute = samlAttributes[2 + offset]; -    if (!samlAttribute.getName().equals("Geburtsdatum")) { -      throw new ValidateException( -          "validator.37",  -          new Object[] {samlAttribute.getName(), "Geburtsdatum", String.valueOf(3)}); -    } -    if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { -      String samlDateOfBirth = (String)samlAttribute.getValue(); -      String dateOfBirth = identityLink.getDateOfBirth(); -      if (!samlDateOfBirth.equals(dateOfBirth)) { -        throw new ValidateException("validator.34", new Object[] {samlDateOfBirth, dateOfBirth}); -      } -    } else { -      throw new ValidateException("validator.35", null); -    } +    	// check the third attribute (must be "Geburtsdatum") +    	samlAttribute = samlAttributes[2 + offset]; +    	if (!samlAttribute.getName().equals("Geburtsdatum")) +    		throw new ValidateException("validator.37",  +    				new Object[] {samlAttribute.getName(), "Geburtsdatum", String.valueOf(3)}); +    	 +    	if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { +    		String samlDateOfBirth = (String)samlAttribute.getValue(); +    		String dateOfBirth = identityLink.getDateOfBirth(); +    		if (!samlDateOfBirth.equals(dateOfBirth)) +    			throw new ValidateException("validator.34", new Object[] {samlDateOfBirth, dateOfBirth}); +    		 +    	} else +    		throw new ValidateException("validator.35", null); -    // check four attribute could be a special text -    samlAttribute = samlAttributes[3 + offset]; -    if (!samlAttribute.getName().equals("SpecialText")) { -      throw new ValidateException( -          "validator.37",  -          new Object[] {samlAttribute.getName(), "SpecialText", String.valueOf(4)}); -    } -    if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { -      String samlSpecialText = (String)samlAttribute.getValue(); -      samlSpecialText = samlSpecialText.replaceAll("'", "'"); +    	// check four attribute could be a special text +    	samlAttribute = samlAttributes[3 + offset]; +    	if (!samlAttribute.getName().equals("SpecialText")) +    		throw new ValidateException("validator.37",  +    				new Object[] {samlAttribute.getName(), "SpecialText", String.valueOf(4)}); +    +    	if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { +    		String samlSpecialText = (String)samlAttribute.getValue(); +    		samlSpecialText = samlSpecialText.replaceAll("'", "'"); -      String text = ""; -      if (MiscUtil.isNotEmpty(oaParam.getAditionalAuthBlockText())) { -		Logger.info("Use addional AuthBlock Text from OA=" + oaParam.getPublicURLPrefix()); -		text = oaParam.getAditionalAuthBlockText(); -      } +    		String text = ""; +    		if (MiscUtil.isNotEmpty(oaParam.getAditionalAuthBlockText())) { +    			Logger.debug("Use addional AuthBlock Text from OA=" + oaParam.getPublicURLPrefix()); +    			text = oaParam.getAditionalAuthBlockText(); +    			 +    		} -      String specialText = AuthenticationBlockAssertionBuilder.generateSpecialText(text, issuer, identityLink.getDateOfBirth(), issueInstant); -      if (!samlSpecialText.equals(specialText)) { -    	  throw new ValidateException("validator.67", new Object[] {samlSpecialText, specialText}); -      } -    } else { -      throw new ValidateException("validator.35", null); +    		String specialText = AuthenticationBlockAssertionBuilder.generateSpecialText(text,  +    				AuthenticationBlockAssertionBuilder.generateSpezialAuthBlockPatternMap( +    						pendingReq, issuer, identityLink.getDateOfBirth(), issueInstant)); +    		if (!samlSpecialText.equals(specialText)) +    			throw new ValidateException("validator.67", new Object[] {samlSpecialText, specialText}); +    		 +    	} else +    		throw new ValidateException("validator.35", null); -    } -     -     -    //check unique AuthBlock tokken -    samlAttribute = samlAttributes[4 + offset]; -    if (!samlAttribute.getName().equals("UniqueTokken")) { -      throw new ValidateException( -          "validator.37",  -          new Object[] {samlAttribute.getName(), "UniqueTokken", String.valueOf(5)}); -    } -    if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { -      String uniquetokken = (String)samlAttribute.getValue(); +         +    	//check unique AuthBlock tokken +    	samlAttribute = samlAttributes[4 + offset]; +    	if (!samlAttribute.getName().equals("UniqueTokken")) +    		throw new ValidateException("validator.37",  +    				new Object[] {samlAttribute.getName(), "UniqueTokken", String.valueOf(5)}); +    	 +    	if (samlAttribute.getNamespace().equals("http://reference.e-government.gv.at/namespace/moa/20020822#")) { +    		String uniquetokken = (String)samlAttribute.getValue(); -      if (!uniquetokken.equals(session.getAuthBlockTokken())) { -        throw new ValidateException("validator.70", new Object[] {uniquetokken, session.getAuthBlockTokken()}); -      } -    } else { -      throw new ValidateException("validator.35", null); -    } -     -     -    // now check the extended SAML attributes -    int i = AuthenticationBlockAssertionBuilder.NUM_OF_SAML_ATTRIBUTES + offset; -    if (extendedSAMLAttributes != null) { -      Iterator<ExtendedSAMLAttribute> it = extendedSAMLAttributes.iterator(); -      while (it.hasNext()) { -        ExtendedSAMLAttribute extendedSAMLAttribute = (ExtendedSAMLAttribute)it.next(); -        samlAttribute = samlAttributes[i]; -        String actualName = samlAttribute.getName(); -        String expectedName = extendedSAMLAttribute.getName(); -        if (!actualName.equals(expectedName)) { -          throw new ValidateException( -            "validator.38",  -            new Object[] {"Name", String.valueOf((i+1)), actualName, actualName, expectedName }); -        } -        String actualNamespace = samlAttribute.getNamespace(); -        String expectedNamespace = extendedSAMLAttribute.getNameSpace(); -        if (!actualNamespace.equals(expectedNamespace)) { -          throw new ValidateException( -            "validator.38",  -            new Object[] {"Namespace", String.valueOf((i+1)), actualName, actualNamespace, expectedNamespace, }); -        } -        Object expectedValue = extendedSAMLAttribute.getValue(); -        Object actualValue = samlAttribute.getValue(); -        try { -          if (expectedValue instanceof String) { -            // replace \r\n because text might be base64-encoded -            String expValue = StringUtils.replaceAll((String)expectedValue,"\r",""); -            expValue = StringUtils.replaceAll(expValue,"\n",""); -            String actValue = StringUtils.replaceAll((String)actualValue,"\r",""); -            actValue = StringUtils.replaceAll(actValue,"\n",""); -            if (!expValue.equals(actValue)) { -              throw new ValidateException( -              "validator.38",  -              new Object[] {"Wert", String.valueOf((i+1)), actualName, actualValue, expectedValue });           -            } -          } else if (expectedValue instanceof Element) { -            // only check the name of the element -            String actualElementName = ((Element)actualValue).getNodeName(); -            String expectedElementName = ((Element)expectedValue).getNodeName(); -            if (!(expectedElementName.equals(actualElementName))){ -              throw new ValidateException( -              "validator.38",  -              new Object[] {"Wert", String.valueOf((i+1)), actualName, actualElementName, expectedElementName});           -            } -          } else { -            // should not happen -            throw new ValidateException( -              "validator.38",  -              new Object[] {"Typ", String.valueOf((i+1)), expectedName, "java.lang.String oder org.wrc.dom.Element", expectedValue.getClass().getName()}); -          } -        } catch (ClassCastException e) { -          throw new ValidateException( -              "validator.38",  -              new Object[] {"Typ", String.valueOf((i+1)), expectedName, expectedValue.getClass().getName(), actualValue.getClass().getName()}); -        } -        i++; -      } -    } -     +    		if (!uniquetokken.equals(session.getAuthBlockTokken())) +    			throw new ValidateException("validator.70", new Object[] {uniquetokken, session.getAuthBlockTokken()}); +    	} else +    		throw new ValidateException("validator.35", null); -    if (!foundOA) throw new ValidateException("validator.14", null);  -    if (businessService) { -      if (session.getSAMLAttributeGebeORwbpk() && !foundWBPK) throw new ValidateException("validator.31", null); -    } else { -      if (!foundGB) throw new ValidateException("validator.11", null); -    } +    	 +    	// now check the extended SAML attributes +    	int i = AuthenticationBlockAssertionBuilder.NUM_OF_SAML_ATTRIBUTES + offset; +    	if (extendedSAMLAttributes != null) { +    		Iterator<ExtendedSAMLAttribute> it = extendedSAMLAttributes.iterator(); +    		while (it.hasNext()) { +    			ExtendedSAMLAttribute extendedSAMLAttribute = (ExtendedSAMLAttribute)it.next(); +    			samlAttribute = samlAttributes[i]; +    			String actualName = samlAttribute.getName(); +    			String expectedName = extendedSAMLAttribute.getName(); +    			if (!actualName.equals(expectedName)) +    				throw new ValidateException("validator.38",  +    						new Object[] {"Name", String.valueOf((i+1)), actualName, actualName, expectedName }); + +    			String actualNamespace = samlAttribute.getNamespace(); +    			String expectedNamespace = extendedSAMLAttribute.getNameSpace(); +    			if (!actualNamespace.equals(expectedNamespace)) +    				throw new ValidateException("validator.38",  +    						new Object[] {"Namespace", String.valueOf((i+1)), actualName, actualNamespace, expectedNamespace, }); + +    			Object expectedValue = extendedSAMLAttribute.getValue(); +    			Object actualValue = samlAttribute.getValue(); +    			try { +    				if (expectedValue instanceof String) { +    					// replace \r\n because text might be base64-encoded +    					String expValue = StringUtils.replaceAll((String)expectedValue,"\r",""); +    					expValue = StringUtils.replaceAll(expValue,"\n",""); +    					String actValue = StringUtils.replaceAll((String)actualValue,"\r",""); +    					actValue = StringUtils.replaceAll(actValue,"\n",""); +    					if (!expValue.equals(actValue)) +    						throw new ValidateException("validator.38",  +    								new Object[] {"Wert", String.valueOf((i+1)), actualName, actualValue, expectedValue }); +    					 +    				} else if (expectedValue instanceof Element) { +    					// only check the name of the element +    					String actualElementName = ((Element)actualValue).getNodeName(); +    					String expectedElementName = ((Element)expectedValue).getNodeName(); +    					if (!(expectedElementName.equals(actualElementName)))  +    						throw new ValidateException("validator.38",  +    								new Object[] {"Wert", String.valueOf((i+1)), actualName, actualElementName, expectedElementName}); +    					 +    				} else +    					// should not happen +    					throw new ValidateException("validator.38",  +    							new Object[] {"Typ", String.valueOf((i+1)), expectedName, "java.lang.String oder org.wrc.dom.Element", expectedValue.getClass().getName()}); +         +    			} catch (ClassCastException e) { +    				throw new ValidateException("validator.38",  +    						new Object[] {"Typ", String.valueOf((i+1)), expectedName, expectedValue.getClass().getName(), actualValue.getClass().getName()}); +    			} +    			 +    			i++; +    		} +    	} +         +    	if (!foundOA)  +    		throw new ValidateException("validator.14", null); +    	 +    	if (userSectorId != null && !userSectorId.getSecond().startsWith(MOAIDAuthConstants.PREFIX_CDID)) { +    		if (session.getSAMLAttributeGebeORwbpk() && !foundWBPK)  +    			throw new ValidateException("validator.31", null); +    	 +    	} else { +    		if (!foundGB)  +    			throw new ValidateException("validator.11", null); +    	} -     //Check if dsig:Signature exists -//    NodeList nl = createXMLSignatureResponse.getSamlAssertion().getElementsByTagNameNS(Constants.DSIG_NS_URI, "Signature"); -//    if (nl.getLength() != 1) { -//      throw new ValidateException("validator.05", null); -//    } -    Element dsigSignature = (Element) XPathUtils.selectSingleNode(samlAssertion, SIGNATURE_XPATH); -    if (dsigSignature == null) {     -      throw new ValidateException("validator.05", new Object[] {"im AUTHBlock"}) ; -    } +    	//Check if dsig:Signature exists +    	Element dsigSignature = (Element) XPathUtils.selectSingleNode(samlAssertion, SIGNATURE_XPATH); +    	if (dsigSignature == null)     +    		throw new ValidateException("validator.05", new Object[] {"im AUTHBlock"}) ; +    	    }    /** @@ -521,7 +540,7 @@ public class CreateXMLSignatureResponseValidator {        try {      	 if (MiscUtil.isNotEmpty(AuthConfigurationProviderFactory.getInstance().getSSOSpecialText())) {      		text = AuthConfigurationProviderFactory.getInstance().getSSOSpecialText(); -			Logger.info("Use addional AuthBlock Text from SSO=" +text); +			Logger.debug("Use addional AuthBlock Text from SSO=" +text);      	 }  		else @@ -531,7 +550,9 @@ public class CreateXMLSignatureResponseValidator {        } -      	String specialText = AuthenticationBlockAssertionBuilder.generateSpecialText(text, issuer, identityLink.getDateOfBirth(), issueInstant); +      	String specialText = AuthenticationBlockAssertionBuilder.generateSpecialText(text,  +      			AuthenticationBlockAssertionBuilder.generateSpezialAuthBlockPatternMap( +						pendingReq, issuer, identityLink.getDateOfBirth(), issueInstant));        	if (!samlSpecialText.equals(specialText)) {        		throw new ValidateException("validator.67", new Object[] {samlSpecialText, specialText});        	} diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java index 4953dad02..c4ea80df9 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java @@ -183,7 +183,7 @@ public class VerifyXMLSignatureResponseValidator {      // to be ignored      boolean ignoreManifestValidationResult = false;      if (whatToCheck.equals(CHECK_IDENTITY_LINK))    	 -    	ignoreManifestValidationResult = (oaParam.getBusinessService()) ? true +    	ignoreManifestValidationResult = (oaParam.hasBaseIdInternalProcessingRestriction()) ? true              : false;      if (ignoreManifestValidationResult) { diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/parep/ParepUtils.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/parep/ParepUtils.java index 55562176d..09c64c267 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/parep/ParepUtils.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/validator/parep/ParepUtils.java @@ -66,10 +66,10 @@ import org.w3c.dom.NodeList;  import at.gv.egovernment.moa.id.auth.builder.BPKBuilder;  import at.gv.egovernment.moa.id.auth.exception.BuildException;  import at.gv.egovernment.moa.id.auth.exception.ParseException; -import at.gv.egovernment.moa.id.auth.exception.ValidateException;  import at.gv.egovernment.moa.id.auth.validator.parep.client.szrgw.SZRGWClientException;  import at.gv.egovernment.moa.id.auth.validator.parep.client.szrgw.SZRGWConstants;  import at.gv.egovernment.moa.id.commons.api.exceptions.ConfigurationException; +import at.gv.egovernment.moa.id.data.Pair;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.BoolUtils;  import at.gv.egovernment.moa.util.Constants; @@ -688,7 +688,7 @@ public class ParepUtils {     *          <code>false</code> calculates (w)bPKs and changes also the <code>pr:Identifivation/pr:Type</code> elements.     * @return The element where Stammzahlen are hidden.     */ -  public static Element HideStammZahlen(Element hideElement, boolean businessApplication, String target, String registerID, boolean blank)  +  public static Element HideStammZahlen(Element hideElement, boolean businessApplication, String oaTargetAreaId, boolean blank)       throws BuildException {      try {        if (hideElement != null) { @@ -706,20 +706,11 @@ public class ParepUtils {              }              if (blank) {                idValueNode.setNodeValue(""); -            } else { -              String idValue = idValueNode.getNodeValue(); -              if (businessApplication) { -                // wbPK berechnen -                idTypeNode.setNodeValue(Constants.URN_PREFIX_WBPK + "+" + registerID); -                String bpkBase64 = new BPKBuilder().buildWBPK(idValueNode.getNodeValue(), registerID); -                idValueNode.setNodeValue(bpkBase64); - -              } else { -                // bPK berechnen -                idTypeNode.setNodeValue(Constants.URN_PREFIX_BPK); -                String bpkBase64 = new BPKBuilder().buildBPK(idValueNode.getNodeValue(), target); -                idValueNode.setNodeValue(bpkBase64); -              } +               +            } else {               +              Pair<String, String> calcId = new BPKBuilder().generateAreaSpecificPersonIdentifier(idValueNode.getNodeValue(), oaTargetAreaId); +              idValueNode.setNodeValue(calcId.getFirst()); +                            }            }          } diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java index c55b5a749..154006ed8 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java @@ -227,7 +227,7 @@ public class GenerateAuthnRequestTask extends AbstractAuthServletTask {  			authnRequestBuilder.levelOfAssuranceComparison(LevelOfAssuranceComparison.MINIMUM);  			//set correct SPType for this online application -			if (oaConfig.getBusinessService()) +			if (oaConfig.hasBaseIdTransferRestriction())  				authnRequestBuilder.spType(SpType.PRIVATE.getValue());  			else  				authnRequestBuilder.spType(SpType.PUBLIC.getValue()); 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 4b67370d6..1ce900ebb 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 @@ -270,7 +270,7 @@ public class EIDASProtocol extends AbstractAuthProtocolModulController {  			//validate request country-code against eIDAS node config  			String reqCC = samlReq.getOriginCountryCode(); -			String eIDASTarget = oaConfig.getIdentityLinkDomainIdentifier(); +			String eIDASTarget = oaConfig.getAreaSpecificTargetIdentifier();  			//validate eIDAS target  			Pattern pattern = Pattern.compile("^" + at.gv.egovernment.moa.util.Constants.URN_PREFIX_EIDAS  diff --git a/id/server/modules/moa-id-module-elga_mandate_service/src/main/java/at/gv/egovernment/moa/id/auth/modules/elgamandates/tasks/RequestELGAMandateTask.java b/id/server/modules/moa-id-module-elga_mandate_service/src/main/java/at/gv/egovernment/moa/id/auth/modules/elgamandates/tasks/RequestELGAMandateTask.java index d65d74c3f..299eb442e 100644 --- a/id/server/modules/moa-id-module-elga_mandate_service/src/main/java/at/gv/egovernment/moa/id/auth/modules/elgamandates/tasks/RequestELGAMandateTask.java +++ b/id/server/modules/moa-id-module-elga_mandate_service/src/main/java/at/gv/egovernment/moa/id/auth/modules/elgamandates/tasks/RequestELGAMandateTask.java @@ -48,6 +48,7 @@ import at.gv.egovernment.moa.id.commons.api.AuthConfiguration;  import at.gv.egovernment.moa.id.commons.api.exceptions.MOAIDException;  import at.gv.egovernment.moa.id.commons.config.MOAIDConfigurationConstants;  import at.gv.egovernment.moa.id.commons.utils.KeyValueUtils; +import at.gv.egovernment.moa.id.data.Pair;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.id.protocols.pvp2x.PVPTargetConfiguration;  import at.gv.egovernment.moa.id.protocols.pvp2x.builder.PVPAuthnRequestBuilder; @@ -150,7 +151,8 @@ public class RequestELGAMandateTask extends AbstractAuthServletTask {  			String sourcePinType = moasession.getIdentityLink().getIdentificationType();  			String sourcePinValue = moasession.getIdentityLink().getIdentificationValue();			  			if (sourcePinType.startsWith(Constants.URN_PREFIX_BASEID)) { -				representativeBPK = new BPKBuilder().buildBPK(sourcePinValue, configTarget); +				Pair<String, String> userId = new BPKBuilder().generateAreaSpecificPersonIdentifier(sourcePinValue, configTarget); +				representativeBPK = userId.getFirst();  			} else {  				Logger.debug("No 'SourcePin' found for representative. " diff --git a/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferAuthenticationData.java b/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferAuthenticationData.java index 2f6a54027..4ce77d861 100644 --- a/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferAuthenticationData.java +++ b/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferAuthenticationData.java @@ -75,14 +75,6 @@ public class SSOTransferAuthenticationData implements IAuthData {  	}  	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.data.IAuthData#isBusinessService() -	 */ -	@Override -	public boolean isBusinessService() { -		return this.isIDPPrivateService; -	} - -	/* (non-Javadoc)  	 * @see at.gv.egovernment.moa.id.data.IAuthData#isSsoSession()  	 */  	@Override @@ -362,4 +354,13 @@ public class SSOTransferAuthenticationData implements IAuthData {  		return this.authSession.getGenericDataFromSession(key, clazz);  	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.data.IAuthData#isBaseIDTransferRestrication() +	 */ +	@Override +	public boolean isBaseIDTransferRestrication() { +		return this.isIDPPrivateService; +	} +  } diff --git a/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferOnlineApplication.java b/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferOnlineApplication.java index 3affa17b3..c2132c1f9 100644 --- a/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferOnlineApplication.java +++ b/id/server/modules/moa-id-module-ssoTransfer/src/main/java/at/gv/egovernment/moa/id/auth/modules/ssotransfer/data/SSOTransferOnlineApplication.java @@ -32,6 +32,7 @@ import at.gv.egovernment.moa.id.commons.api.data.CPEPS;  import at.gv.egovernment.moa.id.commons.api.data.SAML1ConfigurationParameters;  import at.gv.egovernment.moa.id.commons.api.data.StorkAttribute;  import at.gv.egovernment.moa.id.commons.api.data.StorkAttributeProviderPlugin; +import at.gv.egovernment.moa.id.commons.api.exceptions.ConfigurationException;  /**   * @author tlenz @@ -42,15 +43,7 @@ public class SSOTransferOnlineApplication implements IOAAuthParameters {  	public SSOTransferOnlineApplication() {  	} -	 -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getBusinessService() -	 */ -	@Override -	public boolean getBusinessService() { -		return false; -	} -	 +  	/* (non-Javadoc)  	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#useSSO()  	 */ @@ -107,33 +100,6 @@ public class SSOTransferOnlineApplication implements IOAAuthParameters {  	}  	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getOaType() -	 */ -	@Override -	public String getOaType() { -		// TODO Auto-generated method stub -		return null; -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getTarget() -	 */ -	@Override -	public String getTarget() { -		// TODO Auto-generated method stub -		return null; -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getTargetFriendlyName() -	 */ -	@Override -	public String getTargetFriendlyName() { -		// TODO Auto-generated method stub -		return null; -	} - -	/* (non-Javadoc)  	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#isInderfederationIDP()  	 */  	@Override @@ -151,14 +117,6 @@ public class SSOTransferOnlineApplication implements IOAAuthParameters {  		return false;  	} -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getIdentityLinkDomainIdentifier() -	 */ -	@Override -	public String getIdentityLinkDomainIdentifier() { -		// TODO Auto-generated method stub -		return null; -	}  	/* (non-Javadoc)  	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getKeyBoxIdentifier() @@ -226,15 +184,6 @@ public class SSOTransferOnlineApplication implements IOAAuthParameters {  	}  	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#getIdentityLinkDomainIdentifierType() -	 */ -	@Override -	public String getIdentityLinkDomainIdentifierType() { -		// TODO Auto-generated method stub -		return null; -	} - -	/* (non-Javadoc)  	 * @see at.gv.egovernment.moa.id.config.auth.IOAAuthParameters#isShowMandateCheckBox()  	 */  	@Override @@ -441,4 +390,38 @@ public class SSOTransferOnlineApplication implements IOAAuthParameters {  		return false;  	} +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.commons.api.IOAAuthParameters#hasBaseIdInternalProcessingRestriction() +	 */ +	@Override +	public boolean hasBaseIdInternalProcessingRestriction() throws ConfigurationException { +		return false; +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.commons.api.IOAAuthParameters#hasBaseIdTransferRestriction() +	 */ +	@Override +	public boolean hasBaseIdTransferRestriction() throws ConfigurationException { +		return false; +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.commons.api.IOAAuthParameters#getAreaSpecificTargetIdentifier() +	 */ +	@Override +	public String getAreaSpecificTargetIdentifier() throws ConfigurationException { +		// TODO Auto-generated method stub +		return null; +	} + +	/* (non-Javadoc) +	 * @see at.gv.egovernment.moa.id.commons.api.IOAAuthParameters#getAreaSpecificTargetIdentifierFriendlyName() +	 */ +	@Override +	public String getAreaSpecificTargetIdentifierFriendlyName() throws ConfigurationException { +		// TODO Auto-generated method stub +		return null; +	} +  } diff --git a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/GetArtifactAction.java b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/GetArtifactAction.java index d3ebffdfd..9981e8156 100644 --- a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/GetArtifactAction.java +++ b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/GetArtifactAction.java @@ -38,6 +38,7 @@ import at.gv.egovernment.moa.id.data.SLOInformationImpl;  import at.gv.egovernment.moa.id.data.SLOInformationInterface;  import at.gv.egovernment.moa.id.moduls.IAction;  import at.gv.egovernment.moa.logging.Logger; +import at.gv.egovernment.moa.util.MiscUtil;  import at.gv.egovernment.moa.util.URLEncoder;  @Service("SAML1_GetArtifactAction") @@ -84,10 +85,12 @@ public class GetArtifactAction implements IAction {  			String samlArtifactBase64 = saml1server.BuildSAMLArtifact(oaParam, authData, sourceID); +			String oaTargetArea = req.getGenericData(SAML1Protocol.REQ_DATA_TARGET, String.class); +			  			if (authData.isSsoSession()) {  				String url = req.getAuthURL() + "/RedirectServlet";  				url = addURLParameter(url, RedirectServlet.REDIRCT_PARAM_URL, URLEncoder.encode(oaURL, "UTF-8")); -				if (!oaParam.getBusinessService()) +				if (MiscUtil.isNotEmpty(oaTargetArea))  					url = addURLParameter(url, MOAIDAuthConstants.PARAM_TARGET,   							URLEncoder.encode(req.getGenericData(SAML1Protocol.REQ_DATA_TARGET, String.class), "UTF-8"));  				url = addURLParameter(url, MOAIDAuthConstants.PARAM_SAMLARTIFACT, URLEncoder.encode(samlArtifactBase64, "UTF-8")); @@ -99,7 +102,7 @@ public class GetArtifactAction implements IAction {  			} else {  				String redirectURL = oaURL;		 -				if (!oaParam.getBusinessService()) { +				if (MiscUtil.isNotEmpty(oaTargetArea)) {  					redirectURL = addURLParameter(redirectURL, MOAIDAuthConstants.PARAM_TARGET,  					URLEncoder.encode(req.getGenericData(SAML1Protocol.REQ_DATA_TARGET, String.class), "UTF-8")); diff --git a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1AuthenticationServer.java b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1AuthenticationServer.java index df8f13544..bf4a55e46 100644 --- a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1AuthenticationServer.java +++ b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1AuthenticationServer.java @@ -48,7 +48,6 @@ import at.gv.egovernment.moa.id.auth.builder.AuthenticationDataAssertionBuilder;  import at.gv.egovernment.moa.id.auth.builder.BPKBuilder;  import at.gv.egovernment.moa.id.auth.builder.PersonDataBuilder;  import at.gv.egovernment.moa.id.auth.builder.SAMLArtifactBuilder; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.AuthenticationException;  import at.gv.egovernment.moa.id.auth.exception.BuildException;  import at.gv.egovernment.moa.id.auth.exception.ParseException; @@ -65,6 +64,7 @@ import at.gv.egovernment.moa.id.commons.api.exceptions.ConfigurationException;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException;  import at.gv.egovernment.moa.id.data.AuthenticationData;  import at.gv.egovernment.moa.id.data.IAuthData; +import at.gv.egovernment.moa.id.data.Pair;  import at.gv.egovernment.moa.id.protocols.pvp2x.PVPConstants;  import at.gv.egovernment.moa.id.storage.ITransactionStorage;  import at.gv.egovernment.moa.id.util.Random; @@ -239,7 +239,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  			//set prPersion  			boolean provideStammzahl = saml1parameter.isProvideStammzahl()  -					|| oaParam.getBusinessService(); +					|| oaParam.hasBaseIdTransferRestriction();  			String prPerson = "";  			String ilAssertion = ""; @@ -268,7 +268,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  				id.setValue(value  );  				if ( MiscUtil.isNotEmpty(authData.getIdentificationValue()) &&   -						saml1parameter.isProvideIdentityLink() && !authData.isBusinessService()) {					 +						saml1parameter.isProvideIdentityLink() && !authData.isBaseIDTransferRestrication()) {					  					//add baseID if it is requested and available and SP is publicService   					value.setValue(authData.getIdentificationValue());  					id.setType(authData.getIdentificationType()); @@ -332,7 +332,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  					try {  						ExtendedSAMLAttribute[] extendedSAMLAttributes = addExtendedSamlAttributes( -								authData.getMISMandate(), oaParam.getBusinessService(),  +								authData.getMISMandate(), oaParam.hasBaseIdTransferRestriction(),   								saml1parameter.isProvideStammzahl());  						if (extendedSAMLAttributes != null) { @@ -406,7 +406,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  						ilAssertion,   						authData.getBkuURL(),   						signerCertificateBase64,  -						oaParam.getBusinessService(),   +						oaParam.hasBaseIdTransferRestriction(),    						oaAttributes,   						useCondition,   						conditionLength); @@ -419,7 +419,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  					ilAssertion,   					authData.getBkuURL(),  					signerCertificateBase64, -					oaParam.getBusinessService(), +					oaParam.hasBaseIdTransferRestriction(),  					authData.getExtendedSAMLAttributesOA(),   					useCondition,  					conditionLength); @@ -486,27 +486,20 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  				prPerson = ParepUtils.extractPrPersonOfMandate(mandate);  				if (physical -						&& oaParam.getBusinessService() +						&& oaParam.hasBaseIdTransferRestriction()  						&& identificationType != null  						&& Constants.URN_PREFIX_BASEID  								.equals(identificationType)) {  					// now we calculate the wbPK and do so if we got it from the  					// BKU - -					//load IdentityLinkDomainType from OAParam  -					String type = oaParam.getIdentityLinkDomainIdentifier();	 -					if (type.startsWith(Constants.URN_PREFIX_WBPK + "+")) -						identificationType = type; -					else -						identificationType = Constants.URN_PREFIX_WBPK + "+" -								+ type; -					 -					 -					identificationValue = new BPKBuilder().buildWBPK( -							identificationValue, identificationType); -					ParepUtils -							.HideStammZahlen(prPerson, true, null, null, true); +					//load IdentityLinkDomainType from OAParam 					 +					Pair<String, String> targedId = new BPKBuilder().generateAreaSpecificPersonIdentifier( +							identificationValue, oaParam.getAreaSpecificTargetIdentifier());					 +					identificationValue = targedId.getFirst(); +					identificationType = targedId.getSecond(); +					 																	 +					ParepUtils.HideStammZahlen(prPerson, true, null, true);  				}  			} @@ -520,18 +513,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  		try {						  			boolean provideStammzahl = oaParam.getSAML1Parameter().isProvideStammzahl(); -			String oatargetType;			 -	        if(oaParam.getBusinessService()) { -	        	if (oaParam.getIdentityLinkDomainIdentifier().startsWith(AuthenticationSession.REGISTERANDORDNR_PREFIX_)) -	        		oatargetType = oaParam.getIdentityLinkDomainIdentifier(); -	        	else -	        		oatargetType = AuthenticationSession.REGISTERANDORDNR_PREFIX_+oaParam.getIdentityLinkDomainIdentifier(); -	        	 -	        } else { -	        	oatargetType = AuthenticationSession.TARGET_PREFIX_ + oaParam.getTarget(); -	        	 -	        } -			 +			String oatargetType = oaParam.getAreaSpecificTargetIdentifier();			  			Element prIdentification = (Element) prPerson.  					getElementsByTagNameNS(Constants.PD_NS_URI,"Identification").item(0); @@ -544,7 +526,7 @@ public class SAML1AuthenticationServer extends AuthenticationServer {  						String baseid = getBaseId(prPerson);  						Element identificationBpK;  						if (MiscUtil.isNotEmpty(baseid)) { -							identificationBpK = createIdentificationBPK(prPerson, baseid, oaParam.getTarget()); +							identificationBpK = createIdentificationBPK(prPerson, baseid, oatargetType);  							if (!provideStammzahl) {  								prIdentification.getFirstChild().setTextContent(""); diff --git a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java index 37d66d29b..19fadb318 100644 --- a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java +++ b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java @@ -40,6 +40,7 @@ import at.gv.egovernment.moa.id.auth.exception.InvalidProtocolRequestException;  import at.gv.egovernment.moa.id.auth.exception.ProtocolNotActiveException;  import at.gv.egovernment.moa.id.auth.exception.WrongParametersException;  import at.gv.egovernment.moa.id.auth.servlet.RedirectServlet; +import at.gv.egovernment.moa.id.commons.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.commons.api.IOAAuthParameters;  import at.gv.egovernment.moa.id.commons.api.IRequest;  import at.gv.egovernment.moa.id.commons.api.data.SAML1ConfigurationParameters; @@ -118,7 +119,7 @@ public class SAML1Protocol extends AbstractAuthProtocolModulController {  		//preProcess SAML1 Request  		preProcess(req, resp, pendingReq); -			 +		  		performAuthentication(req, resp, pendingReq);  		return; @@ -190,14 +191,19 @@ public class SAML1Protocol extends AbstractAuthProtocolModulController {  			if (MiscUtil.isNotEmpty(target)) {  				pendingRequest.setGenericDataToSession(REQ_DATA_TARGET, target); -				pendingRequest.setTarget(target); +				pendingRequest.setTarget(MOAIDAuthConstants.PREFIX_CDID + target); +			 +			} else { +				String targetArea = oaParam.getAreaSpecificTargetIdentifier(); +				pendingRequest.setTarget(targetArea); +				 +				if (targetArea.startsWith(MOAIDAuthConstants.PREFIX_CDID)) +					pendingRequest.setGenericDataToSession(REQ_DATA_TARGET,  +							targetArea.substring(MOAIDAuthConstants.PREFIX_CDID.length())); -			} -			else { -				pendingRequest.setGenericDataToSession(REQ_DATA_TARGET, oaParam.getTarget()); -				pendingRequest.setTarget(oaParam.getTarget());  			} +				  			//AuthnRequest needs authentication  			pendingRequest.setNeedAuthentication(true); diff --git a/id/server/modules/module-monitoring/src/main/java/at/gv/egovernment/moa/id/monitoring/IdentityLinkTestModule.java b/id/server/modules/module-monitoring/src/main/java/at/gv/egovernment/moa/id/monitoring/IdentityLinkTestModule.java index 6372fefa8..a56be1f46 100644 --- a/id/server/modules/module-monitoring/src/main/java/at/gv/egovernment/moa/id/monitoring/IdentityLinkTestModule.java +++ b/id/server/modules/module-monitoring/src/main/java/at/gv/egovernment/moa/id/monitoring/IdentityLinkTestModule.java @@ -78,7 +78,8 @@ public class IdentityLinkTestModule implements TestModuleInterface {  					domVerifyXMLSignatureResponse).parseData();  			DynamicOAAuthParameters oaParam = new DynamicOAAuthParameters(); -			oaParam.setBusinessService(true); +			oaParam.setHasBaseIdProcessingRestriction(true); +			oaParam.setHasBaseIdTransfergRestriction(true);  			VerifyXMLSignatureResponseValidator.getInstance().validate(  					verifyXMLSignatureResponse, | 
