summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--example/fido-conformance.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/example/fido-conformance.js b/example/fido-conformance.js
index 50f135d..d4a3a23 100644
--- a/example/fido-conformance.js
+++ b/example/fido-conformance.js
@@ -6,6 +6,7 @@ const {
generateAttestationOptions,
verifyAttestationResponse,
generateAssertionOptions,
+ verifyAssertionResponse,
} = require('@simplewebauthn/server');
const inMemoryUserDeviceDB = {
@@ -158,6 +159,46 @@ fidoComplianceRouter.post('/assertion/options', (req, res) => {
});
});
+fidoComplianceRouter.post('/assertion/result', (req, res) => {
+ const { body } = req;
+ const { id } = body;
+
+ const user = inMemoryUserDeviceDB[loggedInUsername];
+ const expectedChallenge = user.currentChallenge;
+ const existingDevice = user.devices.find(device => device.credentialID === id);
+
+ if (!existingDevice) {
+ throw new Error('Assertion device is not registered to user');
+ }
+
+ let verification;
+ try {
+ verification = verifyAssertionResponse({
+ credential: body,
+ expectedChallenge: Buffer.from(expectedChallenge, 'base64'),
+ expectedOrigin: origin,
+ expectedRPID: rpID,
+ authenticator: existingDevice,
+ });
+ } catch (error) {
+ console.error(error.message);
+ return res.status(400).send({ errorMessage: error.message });
+ }
+
+ const { verified, authenticatorInfo } = verification;
+
+ if (verified) {
+ const { base64CredentialID, counter } = authenticatorInfo;
+ const existingDevice = user.devices.find(device => device.credentialID === base64CredentialID);
+ existingDevice.counter = counter;
+ }
+
+ return res.send({
+ status: verified ? 'ok' : '',
+ errorMessage: '',
+ });
+});
+
fidoComplianceRouter.all('*', (req, res, next) => {
console.log(req.url);
console.log(req.method);