Skip to content

EPIC: Node connection requesting access to a private network (Network Entry Bootsrapping) #781

@amydevs

Description

@amydevs

Specification

According to #779, there needs to be a way for nodes to bootstrap into a network via obtaining a ClaimNetworkAccess token.

There are 2 RPC calls that should implement this:

  1. SignClaimNetworkAccessInitial - An RPC call from a node to a seednode that requests a half-signed ClaimNetworkAccess token to be fully signed by the seednode.
  2. SignClaimNetworkAccessFinal - An RPC call from a seednode to a node that contains the fully signed ClaimNetworkAccess token designated to the node.

There is a reason that these 2 calls are separate unary calls rather than a single unary call. That being that in order to implement a CSR-like mechanism for ClaimNetworkAccess token signing, we may want for a human in the loop to manually approve or deny requests for individual nodes to join a network. Hence, we want for the node to receive the token from the seednode whenever the node is online to accept, even after a long response time from the seednode.

When Node A attempts to join a network:

  1. Node A sends a SignClaimNetworkAccessInitial call to seed node B.
  2. Seed node B may sign or not sign the token based on it's discretion.
  3. Seed node B waits until Node A is online and a connection with it is formed.
  4. Seed node B sends a SignClaimNetworkAccessFinal call to node A.
  5. Node A reads the fully signed token and stores it in it's sigchain.

By implementing this, we have several flows we can end up implementing:

  1. This is just the standard accept-all flow. The node is immediately given a Network Access Token upon requesting image
  2. The await acceptance flow is an example of having a third party service that the seednodes can notify in order to request approvals for network access token requests: image
  3. We can take advantage of the sigchains on nodes to determine if a node is signed into the user of an external IDP. Since we have 2 separate RPC calls for the requesting and providing of the Network Access Tokens, we can simply embed information in the response of the request call to tell that the client needs to authenticate.
    image

Additional context

#779

Tasks

  1. ...
  2. ...
  3. ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    developmentStandard developmentepicBig issue with multiple subissues

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions