Giter Club home page Giter Club logo

hyperidentity's Introduction

Hyperidentity

๐ŸŒ๐Ÿ†”ย  Decentralized Identity

stability-experimental NPM Version JavaScript Style Guide

Hyperidentity tried to solve the core problem of centralized web services: vendor lock-in, data-ownership, and single-point-of-failure.

npm i -g hyperidentity

Table of Contents

Usage

You can use Hyperidentity from CLI:

  • Create an identity at ./me:
$ hi init me
56d0a72488190d37aaa28447a5600eafe67df00bf89ab646def449c17e331a56 // your identity key
  • Login to a service:
$ hi login me token
  • show a list of services you've logged-in and your identity key
$ hi info me
  • bring your identity online:
$ hi up me

API

check out test/signup.js, test/service.js, and example to see how to implement a web service accepting hyperidentity.

Identity

An identity is a user with the data he/she want to share with the service. It can also replicate data generated by web services.

var identity = require('hyperidentity').identity

id = identity(archive)

Create a new identity with a hyperdrive archive.

id.archive

The archive used by this ID.

id.setMeta(meta, cb)

Set metadata of the ID

id.getMeta(cb)

Get metadata of the ID

token = id.serviceLinkToken(service, archiveKey)

Create a link token for id for the following purpose:

  1. verify user really own the ID(archive)
  2. give user a service-owned archive to link to its ID.

service is a hyperservice instance.

Returns a token string.

id.acceptLinkToken(token, cb(err))

Accept a link token. Under the hood, this will:

  1. write a response to .proofs/${service.publicKey}
  2. link archiveKey at .links/${service.publicKey}

id.verifyAcceptingness(service, cb(err, verified))

Check whether id accepted the link token from service.

Architecture

Hyperidentity use a hybrid architecture between fully decentralized web and traditional web service.

In hyperidentity, we use a p2p hypermedia protocol called Dat to store the most important thing on the web: the data you've created.

Modern web application is all about creating and sharing data in a scalable way. The Dat protocol allows us to both control our data and share it to the web service we trust. Each web service can have their own peer to replicate your data, or just use existing peers as backend. Since all peers have the same data and only you, as the host, can update the data being shared, it avoids problems such as vendor lock-in and single-point-of-failure.

However, it's very limiting if the web services can never write their own data. To solve the problem, hyperidentity use decentralized-symlink to link your identity to an archive hosted by the web service. By merging two archive together, hyperidentity becomes an decentralized eventually-consistent storage.

Since the service-hosted archive is also publicly replicated between you and the web services, you can save or fork the archive whenever backup or data-migration is needed.

License

The MIT License

hyperidentity's People

Contributors

poga avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

hyperidentity's Issues

README update for "hyperservice"

Is it possible to add a link to the README for what a "hyperservice" is? I can see the test service in the test directory, but I'm not sure it's enough to build a "hyperservice". Googling around is also not very helpful. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.