Skip to content

sathninduk/ethauth-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

37 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ™Œ Introduction

Ethereum user authentication tokens

npm version Build status Known Vulnerabilities install size npm downloads gitter chat code helpers npm bundle size

Overview

eth-auth is a secure npm library for password-less user authentication on node.js decentralized applications (dApps) by signing an outwardly unpredictable dynamic JWT token with the user's Ethereum private key.

Architecture

eth-auth architecture

Highlights

  • Decentralised (Web3)
  • Anonymous - User identity covered to dApp governors and the rest of the world.
  • Password-less - Your Ethereum private key is your password, and it won't reveal to anyone.
  • Breach-less - According to the eth-auth authentication architecture, no need to store meaningful user data in a database.

βœ… Installation

Add eth-auth as a dependency to your project.

npm install ethauth-server
yarn add ethauth-server

😎 Setup

Generate JWT Token (Ethereum Signing Key)

As the step one, the Frontend should fetch the Ethereum singing key (JWT) from the backend.

Function

const ethAuth = require('ethauth-server');
let key = ethAuth.generate("ETHEREUM_ADDRESS", "ETH_AUTH_SECRET");

Code sample (Express.js)

const express = require('express')
const app = express()
const ethAuth = require('ethauth-server');

app.get('/get/:address', (req, res) => {
    let address = req.params.address;
    let key = ethAuth.generate(address, "ETH_AUTH_SECRET");
    res.status(200).json(key: key);
})

Sample output

{
    "key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiZXRoLWF1dGggdG9rZW4iLCJhZGRyZXNzIjoiMHg5ZUMyODVFZUMxODhGMEViRmE5Zjg4RGE0ODA3YkU1YjA0OWZjMDQ5IiwicmFuZG9tVG9rZW4iOiJaTFRuMk1URkJnWndCNWJGQ3l3MnZMWHdPTFFIejBCQiIsImlhdCI6MTY2MjE3OTkwOH0.uQIG0MnYdJ2jcXQQdxtBy78DtjBZSArqFfsZ3uP6H4Ijson"
}

use ether.js library to sign the fetched signing key in your frontend.

Validate Ethereum Signature

As the second step, We have to verify the Ethrerum signature from the backend.

Function

const ethAuth = require('ethauth-server');
ethAuth.validate(key, signature, "ETH_AUTH_SECRET")

Code sample (Express.js)

const express = require('express')
const app = express()
const ethAuth = require('ethauth-server');

app.post('/send', (req, res, next) => {
    let key = req.body.key;
    let signature = req.body.signature;

    ethAuth.validate(key, signature, "ETH_AUTH_SECRET").then((validation) => {
            res.status(200).json(validation); // true
    }).catch((err) => {
        res.status(401).send('Unauthorized: Invalid signature');
    });

})

βœ… Authorized response

{
    true
}

⛔️ Unauthorized response

Unauthorized: Invalid signature

Credits

Initial developer: Nilvin Sathnindu Kottage (bysatha.com)
Email: hello@bysatha.com
Twitter: @sathnindu
GitHub: @sathninduk


License

MIT