Skip to content

Identity & DIDs ​

Every Flowsta user gets a W3C-compliant Decentralized Identifier.

In the Vault and on flowsta.com it is shown as the Permanent ID. The way to explain it to a person: your username is how people find you; your permanent ID is how your signatures and sign-ins prove they came from you. It never changes, and anyone can verify a signature against it without asking Flowsta - the public key is inside the identifier. People never need to read or type it; everything that must keep pointing at them after a username change points at it.

W3C DIDs ​

Flowsta generates a W3C DID for each user based on their Ed25519 public key:

did:flowsta:uhCAk7JpEWfkiV_RdAFfCnRZcJ9PwJR4yTLN-E3EcVU7KYCnRRZc

DID Properties ​

PropertyValue
Methoddid:flowsta
Key typeEd25519
Self-sovereignUser owns the DID, not Flowsta
ResolvableFlowsta's DID resolver (GET /did/{did}) returns a W3C DID Document; the embedded key is a standard Ed25519 key any library can verify with
VerifiableCryptographically linked to user's keypair
DeterministicSame recovery phrase always produces the same DID

Accessing a User's DID ​

Via OAuth:

typescript
const auth = new FlowstaAuth({
  clientId: 'your_client_id',
  redirectUri: 'https://yourapp.com/callback',
  scopes: ['openid', 'did']
});

const user = await auth.handleCallback();
console.log('DID:', user.did);
// did:flowsta:uhCAk7JpEWfkiV_RdAFfCnRZcJ9PwJR4yTLN-E3EcVU7KYCnRRZc

Via userinfo API:

json
{
  "sub": "550e8400-...",
  "did": "did:flowsta:uhCAk...",
  "agent_pub_key": "hCAk7JpEWfkiV/RdAFfCnRZcJ9PwJR4yTLN+E3EcVU7..."
}

Note the two spellings: the DID carries the agent key as uhCAk + base64url, while /oauth/userinfo returns agent_pub_key as plain standard base64 of the same 39 bytes. Compare keys by decoding to bytes, never by string equality.

Via the Vault (desktop): getVaultStatus() returns did (SDK 3.6.0) and agentPubKey while the Vault is unlocked.

Agent Public Keys ​

Each user also has a Holochain agent public key (uhCAk... format). This is the raw Ed25519 public key used for:

  • Signing Holochain actions
  • Agent linking attestations
  • Identity verification on the DHT

For an identity created in the Vault, the DID and the agent public key are the same Ed25519 key in different formats. An identity moved into the Vault from flowsta.com keeps the DID it always had, built on its original web agent key, while the Vault signs with the device key derived from the recovery phrase - so for those identities the DID's key and the Vault's agent key differ. Verify a Vault signature with the agent key the Vault returns alongside it, and treat the DID as the stable identifier. From Vault 1.6.0 the identity lives on several devices: the DID and the agent key stay the identity's on every one of them, and each device adds a key of its own that co-signs sign-ins and authors on the networks. A signature made under a device key resolves to the person.

Identity Linking ​

Users can prove their Flowsta identity across multiple Holochain apps using agent linking. Each app has its own agent key, but IsSamePersonEntry attestations on the DHT prove they belong to the same person.

Next Steps ​

Documentation licensed under CC BY-SA 4.0.