diff --git a/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AssertionService.java b/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AssertionService.java index 6a5284646bc..e6ff8b10a41 100644 --- a/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AssertionService.java +++ b/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AssertionService.java @@ -211,6 +211,7 @@ public ObjectNode options(JsonNode params) { public ObjectNode verify(JsonNode params) { log.debug("authenticateResponse {}", params); + boolean superGluu = commonVerifiers.hasSuperGluu(params); boolean oneStep = commonVerifiers.isSuperGluuOneStepMode(params); boolean cancelRequest = commonVerifiers.isSuperGluuOneStepMode(params); @@ -232,7 +233,9 @@ public ObjectNode verify(JsonNode params) { // Verify client data JsonNode clientDataJSONNode = commonVerifiers.verifyClientJSON(responseNode); - commonVerifiers.verifyClientJSONTypeIsGet(clientDataJSONNode); + if (!superGluu) { + commonVerifiers.verifyClientJSONTypeIsGet(clientDataJSONNode); + } // Get challenge String challenge = commonVerifiers.getChallenge(clientDataJSONNode); diff --git a/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AttestationService.java b/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AttestationService.java index a4a17ebc26d..ccd49bdf7a6 100644 --- a/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AttestationService.java +++ b/jans-fido2/server/src/main/java/io/jans/fido2/service/operation/AttestationService.java @@ -194,6 +194,7 @@ public ObjectNode options(JsonNode params) { public ObjectNode verify(JsonNode params) { log.debug("Attestation verify {}", params); + boolean superGluu = commonVerifiers.hasSuperGluu(params); boolean oneStep = commonVerifiers.isSuperGluuOneStepMode(params); boolean cancelRequest = commonVerifiers.isSuperGluuOneStepMode(params); @@ -206,7 +207,9 @@ public ObjectNode verify(JsonNode params) { // Verify client data JsonNode clientDataJSONNode = commonVerifiers.verifyClientJSON(responseNode); - commonVerifiers.verifyClientJSONTypeIsCreate(clientDataJSONNode); + if (!superGluu) { + commonVerifiers.verifyClientJSONTypeIsCreate(clientDataJSONNode); + } // Get challenge String challenge = commonVerifiers.getChallenge(clientDataJSONNode); diff --git a/jans-fido2/server/src/main/java/io/jans/fido2/service/processor/assertion/U2FSuperGluuAssertionFormatProcessor.java b/jans-fido2/server/src/main/java/io/jans/fido2/service/processor/assertion/U2FSuperGluuAssertionFormatProcessor.java index 825233a292b..e7b1d741281 100644 --- a/jans-fido2/server/src/main/java/io/jans/fido2/service/processor/assertion/U2FSuperGluuAssertionFormatProcessor.java +++ b/jans-fido2/server/src/main/java/io/jans/fido2/service/processor/assertion/U2FSuperGluuAssertionFormatProcessor.java @@ -90,8 +90,6 @@ public void process(String base64AuthenticatorData, String signature, String cli userVerificationVerifier.verifyUserPresent(authData); String clientDataJsonString = new String(base64Service.urlDecode(clientDataJson), StandardCharsets.UTF_8); - // Update to conform Super Gluu - clientDataJsonString = clientDataJsonString.replace("type", "typ").replaceAll("webauthn.get", "navigator.id.getAssertion"); byte[] clientDataHash = DigestUtils.getSha256Digest().digest(clientDataJsonString.getBytes(StandardCharsets.UTF_8)); diff --git a/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AssertionSuperGluuController.java b/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AssertionSuperGluuController.java index 558bb9e46fe..f7ae97d054f 100644 --- a/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AssertionSuperGluuController.java +++ b/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AssertionSuperGluuController.java @@ -186,7 +186,7 @@ public JsonNode finishAuthentication(String userName, String authenticateRespons // Convert clientData node to new format ObjectNode clientData = dataMapperService.createObjectNode(); - clientData.put("type", "webauthn.get"); + clientData.put("type", authenticateResponse.getClientData().getTyp()); clientData.put("challenge", authenticateResponse.getClientData().getChallenge()); clientData.put("origin", authenticateResponse.getClientData().getOrigin()); diff --git a/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AttestationSuperGluuController.java b/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AttestationSuperGluuController.java index 5e9e46f1956..de869f5032a 100644 --- a/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AttestationSuperGluuController.java +++ b/jans-fido2/server/src/main/java/io/jans/fido2/service/sg/converter/AttestationSuperGluuController.java @@ -218,7 +218,7 @@ public JsonNode finishRegistration(String userName, String registerResponseStrin ObjectNode clientData = dataMapperService.createObjectNode(); clientData.put("challenge", registerResponse.getClientData().getChallenge()); clientData.put("origin", registerResponse.getClientData().getOrigin()); - clientData.put("type", "webauthn.create"); + clientData.put("type", registerResponse.getClientData().getTyp()); response.put("clientDataJSON", base64Service.urlEncodeToString(clientData.toString().getBytes(Charset.forName("UTF-8")))); // Store cancel type