aboutsummaryrefslogtreecommitdiff
path: root/eidas_modules/authmodule-eIDAS-v2/src
diff options
context:
space:
mode:
authorThomas <>2022-02-07 15:19:56 +0100
committerThomas <>2022-02-08 09:37:25 +0100
commit5b0a9142a0e00fa528f86f8fe432c0e44ed4ae8e (patch)
treed297360ad4fd1ec54e699779e0afcd0a7df8b836 /eidas_modules/authmodule-eIDAS-v2/src
parentb430405209fb61d7de7dec19fe9b2da780a575ac (diff)
downloadNational_eIDAS_Gateway-5b0a9142a0e00fa528f86f8fe432c0e44ed4ae8e.tar.gz
National_eIDAS_Gateway-5b0a9142a0e00fa528f86f8fe432c0e44ed4ae8e.tar.bz2
National_eIDAS_Gateway-5b0a9142a0e00fa528f86f8fe432c0e44ed4ae8e.zip
refactor(matching): change 'kitt' and 'update' steps in 'InitialSearchTask'
- Update MDS in case of changes eIDAS data and already existing ERnP entry - Add additional attributes in case of new eIDAS attributes outside of MDS
Diffstat (limited to 'eidas_modules/authmodule-eIDAS-v2/src')
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java22
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java22
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java42
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java41
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java75
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml221
6 files changed, 386 insertions, 37 deletions
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java
index 5ad92507..e76768b6 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java
@@ -23,10 +23,11 @@
package at.asitplus.eidas.specific.modules.auth.eidas.v2.dao;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+
import at.gv.e_government.reference.namespace.persondata._20020228.PostalAddressType;
import lombok.Builder;
import lombok.Data;
-import org.apache.commons.lang3.builder.EqualsBuilder;
@Data
@Builder
@@ -68,8 +69,11 @@ public class SimpleEidasData {
.append(result.getGivenName(), givenName)
.append(result.getFamilyName(), familyName)
.append(result.getDateOfBirth(), dateOfBirth)
- .isEquals()
- && result.getPseudonym().stream().anyMatch(el -> el.equals(pseudonym));
+ .appendSuper(result.getPseudonym().stream().anyMatch(el -> el.equals(pseudonym)))
+ .appendSuper(checkOptionalAttributes(result.getPlaceOfBirth(), placeOfBirth))
+ .appendSuper(checkOptionalAttributes(result.getBirthName(), birthName))
+ .isEquals();
+
}
/**
@@ -84,5 +88,17 @@ public class SimpleEidasData {
.isEquals();
}
+ /**
+ * Check if eIDAS attribute is available.
+ *
+ * @param registerData Attribute value from register
+ * @param eidasData Attribute value from eIDAS
+ * @return <code>true</code> if eidasData is <code>null</code> or eidasData does not match to register value,
+ * otherwise <code>false</code>
+ */
+ private static boolean checkOptionalAttributes(String registerData, String eidasData) {
+ return eidasData == null || eidasData.equals(registerData);
+
+ }
}
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java
index 488b571b..85ea942c 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java
@@ -7,6 +7,7 @@ import java.util.List;
import javax.annotation.Nonnull;
import org.jetbrains.annotations.Nullable;
+import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import com.google.common.collect.Streams;
@@ -186,34 +187,49 @@ public class RegisterSearchService {
* @param initialEidasData Received eidas data from initial authn
* @return
*/
+ @NonNull
public RegisterStatusResults step7aKittProcess(RegisterStatusResults registerResult,
SimpleEidasData initialEidasData) throws WorkflowException {
log.trace("Starting step7aKittProcess");
- // TODO verify with which data this method gets called
+
+ // check if only one single result was found
if (registerResult.getResultCount() != 1) {
throw new WorkflowException("step7aKittProcess", "getResultCount() != 1");
+
}
+
+ // perform updated operation in respect to register results
try {
if (registerResult.getResultsZmr().size() == 1) {
RegisterResult entryZmr = registerResult.getResultsZmr().get(0);
ZmrRegisterResult updateZmr = zmrClient
.update(registerResult.getOperationStatus().getZmrProcessId(), entryZmr, initialEidasData);
return RegisterStatusResults.fromZmr(updateZmr);
+
} else {
RegisterResult entryErnp = registerResult.getResultsErnp().get(0);
ErnpRegisterResult updateErnp = ernpClient.update(entryErnp, initialEidasData);
return RegisterStatusResults.fromErnp(registerResult.operationStatus, updateErnp);
+
}
} catch (final EidasSAuthenticationException e) {
throw new WorkflowException("kittMatchedIdentitiess", e.getMessage(),
!(e instanceof ZmrCommunicationException), e);
+
}
}
- //TODO: check this method, because it's different to 'step7aKittProcess'???
/**
* Automatic process to fix the register entries.
* Called when the alternative eIDAS authn leads to a match in a register.
+ *
+ * <p>This method perform two additional operations:
+ * <ul>
+ * <li>Use bPK to check if <i>altSearchResult</i> is part of <i>initialSearchResult</i>.</li>
+ * <li>Update register entry twice, be using information from alternative authentication <i>altEidasData</i>
+ * and from initial authentication <i>initialEidasData</i>.</li>
+ * </ul>
+ * </p>
*
* @param initialSearchResult Register results from initial authentication
* @param initialEidasData Received eIDAS data from initial authentication
@@ -273,7 +289,7 @@ public class RegisterSearchService {
// update ZMR entry by using eIDAS information from alternative authentication
ErnpRegisterResult updateAlt = ernpClient.update(entryErnp, altEidasData);
- return RegisterStatusResults.fromErnp(altSearchResult.operationStatus, updateAlt);
+ return RegisterStatusResults.fromErnp(altSearchResult.getOperationStatus(), updateAlt);
}
} catch (final EidasSAuthenticationException e) {
throw new WorkflowException("kittMatchedIdentitiess", e.getMessage(),
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
index c720cb7f..9564a8fc 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
@@ -122,8 +122,9 @@ public class InitialSearchTask extends AbstractAuthServletTask {
if (resultCount == 0) {
step6CountrySpecificSearch(executionContext, searchResult.getOperationStatus(), eidasData);
- } else if (resultCount == 1) {
- foundMatchFinalizeTask(searchResult, eidasData);
+ } else if (resultCount == 1) {
+ RegisterResult updatedResult = step3CheckRegisterUpdateNecessary(searchResult, eidasData);
+ foundMatchFinalizeTask(updatedResult, eidasData);
} else {
throw new WorkflowException("step2RegisterSearchWithPersonIdentifier",
@@ -146,10 +147,12 @@ public class InitialSearchTask extends AbstractAuthServletTask {
if (searchResult.getResultCount() == 0) {
log.trace("'step6CountrySpecificSearch' ends with no result. Forward to next matching step ... ");
step8RegisterSearchWithMds(executionContext, searchResult.getOperationStatus(), eidasData);
+
} else if (searchResult.getResultCount() == 1) {
log.trace("'step6CountrySpecificSearch' finds a person. Forward to 'step7aKittProcess' step ... ");
- registerSearchService.step7aKittProcess(searchResult, eidasData);
- foundMatchFinalizeTask(searchResult, eidasData);
+ RegisterStatusResults updatedResult = registerSearchService.step7aKittProcess(searchResult, eidasData);
+ foundMatchFinalizeTask(updatedResult.getResult(), eidasData);
+
} else {
throw new WorkflowException("step6CountrySpecificSearch",
"More than one entry with unique country-specific information", true);
@@ -172,29 +175,26 @@ public class InitialSearchTask extends AbstractAuthServletTask {
}
}
- private void foundMatchFinalizeTask(RegisterStatusResults searchResult, SimpleEidasData eidasData)
- throws WorkflowException, EaafStorageException {
- RegisterResult updatedResult = step3CheckRegisterUpdateNecessary(searchResult.getResult(), eidasData);
- MatchedPersonResult result = MatchedPersonResult.generateFormMatchingResult(
- updatedResult, eidasData.getCitizenCountryCode());
- MatchingTaskUtils.storeFinalMatchingResult(pendingReq, result);
- }
-
- private RegisterResult step3CheckRegisterUpdateNecessary(RegisterResult searchResult,
- SimpleEidasData eidasData) {
+ private RegisterResult step3CheckRegisterUpdateNecessary(
+ RegisterStatusResults searchResult, SimpleEidasData eidasData) throws WorkflowException {
log.trace("Starting step3CheckRegisterUpdateNecessary");
- if (!eidasData.equalsRegisterData(searchResult)) {
- log.info("Skipping update-register-information step, because it's not supported yet");
-
- //TODO: update of ERnP information are allowed. Add ERnP update-step. Maybe we can use regular KITT steps
-
+ if (!eidasData.equalsRegisterData(searchResult.getResult())) {
+ log.debug("PersonalIdentifier match but MDS or other information changed. Starting update process ... ");
+ return registerSearchService.step7aKittProcess(searchResult, eidasData).getResult();
- return searchResult;
} else {
log.debug("Register information match to eIDAS information. No update required");
- return searchResult;
+ return searchResult.getResult();
}
}
+
+ private void foundMatchFinalizeTask(RegisterResult updatedResult, SimpleEidasData eidasData)
+ throws WorkflowException, EaafStorageException {
+ MatchedPersonResult result =
+ MatchedPersonResult.generateFormMatchingResult(updatedResult, eidasData.getCitizenCountryCode());
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, result);
+
+ }
@NotNull
private SimpleEidasData convertEidasAttrToSimpleData()
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java
index b3ba8a9d..74ac065e 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java
@@ -48,7 +48,6 @@ import org.apache.commons.lang3.RandomStringUtils;
import org.jetbrains.annotations.NotNull;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -181,15 +180,17 @@ public class InitialSearchTaskTest {
@DirtiesContext
public void singlePersonalIdMatchUpdateNecessary_Zmr() throws Exception {
String oldGivenName = randomAlphabetic(10);
+ String placeOfBirth = randomAlphabetic(10);
+ RegisterResult firstZmrResult = randomRegisterResult(oldGivenName, randomBpk, placeOfBirth);
Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
- .thenReturn(zmrRegisterResult(randomRegisterResult(oldGivenName, randomBpk)));
+ .thenReturn(zmrRegisterResult(firstZmrResult));
Mockito.when(zmrClient.searchCountrySpecific(any(), any(), any()))
.thenThrow(new IllegalStateException("CountrySpecific search search should not be neccessary"));
Mockito.when(zmrClient.searchWithMds(any(), any(), any(), any(), any()))
.thenThrow(new IllegalStateException("MDS search should not be neccessary"));
Mockito.when(zmrClient.update(any(), any(), any()))
- .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+ .thenReturn(zmrRegisterResult(firstZmrResult));
Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
.thenReturn(emptyErnpRegisterResult());
@@ -213,17 +214,33 @@ public class InitialSearchTaskTest {
*
* @throws EidasSAuthenticationException
*/
- @Ignore
@Test
@DirtiesContext
public void singlePersonalIdMatchUpdateNecessary_Ernp() throws TaskExecutionException, EidasSAuthenticationException {
Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
.thenReturn(emptyZmrRegisterResult());
-
+ Mockito.when(zmrClient.searchCountrySpecific(any(), any(), any()))
+ .thenThrow(new IllegalStateException("CountrySpecific search search should not be neccessary"));
+ Mockito.when(zmrClient.searchWithMds(any(), any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
String oldRandomGivenName = randomAlphabetic(10);
Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
.thenReturn(ernpRegisterResult(randomRegisterResult(oldRandomGivenName, randomBpk)));
-
+ Mockito.when(ernpClient.searchCountrySpecific(any(), any()))
+ .thenThrow(new IllegalStateException("CountrySpecific search search should not be neccessary"));
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenReturn(ernpRegisterResult(RegisterResult.builder()
+ .bpk(randomBpk)
+ .dateOfBirth(randomBirthDate)
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .build()));
+
// execute test
task.execute(pendingReq, executionContext);
@@ -799,6 +816,18 @@ public class InitialSearchTaskTest {
}
@NotNull
+ private RegisterResult randomRegisterResult(String randomGivenName, String randomBpk, String placeOfBirth) {
+ return RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Collections.singletonList(randomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(placeOfBirth)
+ .build();
+ }
+
+ @NotNull
private AuthenticationResponse buildDummyAuthResponseRandomPerson() throws URISyntaxException {
return buildDummyAuthResponse(randomGivenName, randomFamilyName, DE_ST + randomPseudonym, randomBirthDate);
}
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
index 0e95f718..7f27a17c 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
@@ -190,10 +190,13 @@ public class InitialSearchTaskWithRegistersTest {
/**
* One match, but register update needed
+ * <p>
+ * <b>Check if ZMR update request is NOT executed in case of MDS change!</b>
+ * </p>
*/
@Test
@DirtiesContext
- public void singlePersonalIdMatchUpdateNecessary_Zmr() throws Exception {
+ public void singlePersonalIdMatchUpdateNecessary_ZmrNotDone() throws Exception {
String oldGivenName = "XXXClaus - Maria";
@@ -208,7 +211,12 @@ public class InitialSearchTaskWithRegistersTest {
// inject response
when(zmrMock.service(zmrReq.capture(), any()))
.thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))
- .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ //perform prepair-update request
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))
+
+ //do not make an update because, MDS update is not allowed and no other data has been changed
+ .thenThrow(new RuntimeException("This request is not needed any more"));
// execute test
@@ -220,13 +228,72 @@ public class InitialSearchTaskWithRegistersTest {
oldGivenName, "1994-12-31", DE);
// validate request
- assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size());
assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
- checkBasicRequestParameters(zmrReq.getValue(), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+ checkBasicRequestParameters(zmrReq.getValue(), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
}
+ /**
+ * One match, but register update needed
+ * <p>
+ * <b>Check if ZMR update request is executed in case of other data than MDS change!</b>
+ * </p>
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchUpdateNecessary_ZmrDone() throws Exception {
+
+ String oldGivenName = "XXXClaus - Maria";
+ String placeOfBirth = RandomStringUtils.randomAlphabetic(5);
+
+ //inject eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE,
+ buildDummyAuthResponse(oldGivenName, "XXXvon Brandenburg",
+ "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31", null, placeOfBirth, null));
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml"))
+
+ //perform prepair-update request
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml"))
+
+ //do make an update because, MDS DOES NOT change, but additional attribute was available
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-6_kitt_update_resp.xml"));
+
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ //INFO: has to be the old givenName because ZMR allows no update of MDS information
+ checkMatchingSuccessState(pendingReq, "UgeknNsc26lVuB7U/uYGVmWtnnA=", "XXXvon Brandenburg",
+ oldGivenName, "1994-12-31", DE);
+
+ // validate request
+ assertEquals("wrong number of req.", 3, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+ assertNotNull("Personenupdate req.", zmrReq.getAllValues().get(2).getPersonAendernRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_UPDATE,
+ new BigInteger("367100000000079"), "jUnit123456");
+ assertEquals("eIDAS attribute to add", 1,
+ zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage().size());
+ assertEquals("eIDAS attribute to add - Type", "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage().get(0).getEidasArt());
+ assertEquals("eIDAS attribute to add - Value", placeOfBirth,
+ zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage().get(0).getEidasWert());
+ assertNull("ZMR update MDS", zmrReq.getAllValues().get(2).getPersonAendernRequest().getPersonAenderung());
+
+ }
+
+
/**
* Two matches by PersonalId found in ZMR
*
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml
new file mode 100644
index 00000000..6551cdd3
--- /dev/null
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:smi="http://bmi.gv.at/namespace/zmr-su/smi/20060901#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns10="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns11="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns12="http://egov.gv.at/pvp1.xsd" xmlns:ns13="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns8="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#" xmlns:ns9="http://www.w3.org/2000/09/xmldsig#">
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_EIDAS</base:ProzessName>
+ <base:ProzessInstanzID>367100000000079</base:ProzessInstanzID>
+ <base:SequenzID>0</base:SequenzID>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR-Server Version: 5.9.0.0-SNAPSHOT</base:GeneriertVon>
+ <base:GeneriertAm>2021-11-12T08:24:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonensucheInfo>
+ <NatuerlichePerson/>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person gefunden.</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>1</base:GefundeneSaetze>
+ <zmr:GefundeneSaetzeERnP>0</zmr:GefundeneSaetzeERnP>
+ <base:SaetzeVon>0</base:SaetzeVon>
+ <base:SaetzeBis>1</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <zmr:Personendaten>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453600000000697</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:07:06.311</base:Von>
+ <base:BeginnCode>SONSTIGES</base:BeginnCode>
+ <base:BeginnText>Sonstiges</base:BeginnText>
+ <base:BeginnFreitext>Testerperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000430320173</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <Identification>
+ <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <zmr:PersonenName>
+ <Vorname>XXXClaus - Maria</Vorname>
+ <Familienname>XXXvon Brandenburg</Familienname>
+ </zmr:PersonenName>
+ <Familienstand>unbekannt</Familienstand>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>1994-12-31</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453600000000727</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:07:06.311</base:Von>
+ <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Staatsangehörigkeit anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testerperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453500000005242</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:07:06.311</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>0088</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09988</Gemeindekennziffer>
+ <Ortschaft>Testort A</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Testgasse</Strassenname>
+ <Orientierungsnummer>1a-2b</Orientierungsnummer>
+ <Gebaeude>Stg. 3c-4d</Gebaeude>
+ <Nutzungseinheit>5</Nutzungseinheit>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <Abgabestelle>false</Abgabestelle>
+ <Nutzungseinheitlaufnummer>0001</Nutzungseinheitlaufnummer>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>T800001</Adresscode>
+ <Subcode>001</Subcode>
+ <Objektnummer>T800001</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>HST111WWW</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>T8001</base:OKZ>
+ <base:SKZ>T80001</base:SKZ>
+ <base:ADRRefkey>T80000000001</base:ADRRefkey>
+ <base:GBRRefkey>T80000000002</base:GBRRefkey>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:Postleitzahlgebiet>Testpostort</base:Postleitzahlgebiet>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2020-02-05T13:07:06.311</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ <zmr:Auskunftssperre>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453500000005262</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:07:06.311</base:Von>
+ <base:BeginnCode>AUSK_SPERRE_SETZ</base:BeginnCode>
+ <base:BeginnText>Auskunftssperre setzen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:SperreVon>2020-02-05T13:07:06.311</zmr:SperreVon>
+ <zmr:SperreBis>9999-12-31T23:59:59.000</zmr:SperreBis>
+ <zmr:SperrCode>ASMG</zmr:SperrCode>
+ <zmr:SperrText>Auskunftssperre nach § 18 / 2ff MeldeG</zmr:SperrText>
+ <zmr:SperrFreitext>automatische Auskunftssperre</zmr:SperrFreitext>
+ </zmr:Auskunftssperre>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:Personensuchergebnis>
+ </zmr:PersonSuchenResponse>
+ </base:Response>