0.0.1-beta1.5 ā€¢ Published 6 months ago

ethauth-server v0.0.1-beta1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

šŸ™Œ 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

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