This is part 2 of a series of posts describing a
proof-of-concept web app that implements cryptographic authentication
using Node.js, Express, Handlebars,
MongoDB and Mongoose.
All parts are now available.
Part
1 describes the login process.
This Part
2 describes the registration process.
Part
3 describes login session maintenance.
Part 4 is concerned with random bit generation.
Update. The name of the constant securityStrength
has been changed to rbgSecurityStrength as noted in the last post of the series and reflected in the snippets below.
Part
1 of this series described the login process of a proof-of-concept
Node.js application that implements cryptographic authentication using
a MongoDB database back-end. The app, called
app-mongodb.js, can be found in a zip file downloadable
from the cryptographic
authentication page, where it is bundled together with a simpler
app that has the same functionality and the same front-end but
emulates the database using JavaScript objects, provided for comparison.
This post describes the registration process of
app-mongodb.js. The app has a registration page reachable
from a link found under a top-of-page login form in the public pages
of the app. The registration page has a form where the user enters a
username, a first name and a last name, but no password. The first
and last names are representative of any info that the user may be
asked to provide in a full-fledged application.
The registration process of app-mongodb.js has a
structure similar to that of the login process described in Part 1.
The browser sends an HTTP POST request to the
/register-username endpoint of the server, conveying the
username, first name and last name. The server creates a user record,
called a “user document” in MongoDB terminology, and
responds with a JavaScript POST redirection. The JavaScript POST
redirection consists of downloading a script that generates a key
pair, signs a server challenge with the private key, and sends the
public key and the signature to the /register-public-key
endpoint in a second HTTP POST request. The server cryptographically
validates the public key, verifies the signature, and adds the public
key to the user document.
The following code snippet shows how the server processes the
first HTTP POST request, received at the /register-username
endpoint.
Continue reading "Credential Registration for Cryptographic Authentication with Node.js and MongoDB"