Every protected API call carries a bearer token your identity provider issued. The engine verifies each token against the provider’s published keys and reads the caller’s roles from it; it keeps no passwords and no user list of its own. The screens your staff and your investors use are your own, or your systems integrator’s: they sign their users in at your provider and call the API with the token it issues.

What the engine checks

The token is verified by Spring Security’s OAuth2 resource server, on every request to a protected route and before the request reaches a route. The engine’s own rules then decide what the verified caller may do: A public route, such as GET /v1/health, reads no token, so a stale one there is no refusal. A refusal is a problem document:

Names in the record

The engine records the token’s name and email claims beside its subject, where the token carries them: on each operation, on each four-eyes action for its maker, each approver and whoever decided it, and in each audit log entry. The record then reads without the provider: an auditor sees who acted, not only an opaque subject. The claims decide nothing; the subject alone is the identity. Another provider’s claim names are set in the configuration.

Set up the provider

1

A client for the engine

Register the engine as an audience at your provider. Tokens meant for the engine carry that audience; tokens for anything else are refused.
2

The roles claim

Map your groups to NodeAsset’s role names, such as operator, approver or auditor, in a claim the access token carries. Segregation of duties lists every role.
3

One subject per person

Four eyes compares subjects. Give each person a subject of their own, never a shared account: a person holding two roles still cannot approve their own action.
4

Investors

An investor’s token carries the investor role and its holder id in the holder claim, as the venue registered it.
5

Systems

Give each system a client of its own, with its service role: app for an integrating application’s backend, feed for a statement connector, monitor for monitoring, and registrar for the register keeper’s own systems, which read what the venue asks of it.
6

The engine

Set the sign-in mode to idp, with the provider’s issuer, the engine’s audience and the provider’s key set URL (Configuration reference). The engine refuses to start under idp without all three.
7

Check it

GET /v1/whoami answers what the engine read from a token: its subject, roles, holder, client, issuer, name and email.

Example tokens

The claims the engine reads, for a person, an investor and a system:
Every caller presents a token the provider issued for the person or the system acting: a person at a desk, an integrating application, a statement connector, a monitoring system. Each operation records the subject and the role it ran under, and the name and email where the token carries them.

The engine’s own ledger identity

Signing in to the API and the engine’s access to the ledger are separate. The engine submits to your Canton node as its own Ledger API user, with a token it fetches from your provider by client credentials, or reads from a file. See Configuration reference. Related: Segregation of duties · Configuration reference · How the API works