Skip to main content

Chat Authentication

Given that Chat API supports multiple clients with different Identity Keys for the same blockchain account, we must validate different payloads:

  1. Invite Proposals
  2. Invite Approvals
  3. Chat Messages
  4. Chat Receipts

This will be achieved using did-jwt which the different purposes above will have the same mandatory fields:

  • iat - timestamp when jwt was issued
  • exp - timestamp when jwt must expire
  • iss - public key of the identity key (did:key). Enables to fetch attached blockchain account
  • ksu - key server for identity key verification
  • act - description of action intent. Must be equal to specific value defined in each claims

Expiry will be calculated 30 days (2592000 seconds) from issued date

Invite Proposals

When we are validating invite proposal we must use the following additional fields in the jwt:

  • sub - opening message included in the invite
  • aud - responder/invitee blockchain account (did:pkh)
  • pke - proposer/inviter public key for key exchange (did:key)
  • act - description of action intent. Must be equal to "invite_proposal"

Invite Approvals

When we are validating invite approvals we must use the following additional fields in the jwt:

  • sub - public key sent by the responder/invitee (did:key)
  • aud - proposer/inviter blockchain account (did:pkh)
  • act - description of action intent. Must be equal to "invite_approval"

Chat Messages

When we are validating chat messages we must use the following additional fields in the jwt:

  • sub - message sent by the author account
  • aud - recipient blockchain account (did:pkh)
  • xma - extensible media attachment (optional)
  • act - description of action intent. Must be equal to "chat_message"

Chat Receipts

When we are validating chat receipts we must use the following additional fields in the jwt:

  • sub - hash of the message received
  • aud - sender blockchain account (did:pkh)
  • act - description of action intent. Must be equal to "chat_receipt"