Platform

Authentication and authorisation

How you get a token, what it carries, and how users, roles and single sign-on fit around it.

StatedraftedSections6Open questions4
Drafted — read the provenance

The token endpoints and their fields are read from the published OAuth2 specification and are accurate. Everything below "User management" is drafted from the Everest framework reference and describes the framework rather than this installation's configuration.

  • Which grant types this installation actually enables, since the endpoint accepts several.
  • The access token lifetime and whether refresh tokens rotate on use.
  • Which identity provider fronts single sign-on, and whether a bank federates its own.
  • Whether scopes are per-API, per-capability or per-operation.

Every call on this portal needs a bearer token. The only operations you can reach without one are the security token service's own five, and they authenticate with your client secret in the request body instead.

Getting a token

The security token service publishes four endpoints and a health probe, all of them POST and all of them JSON.

POST /sts/api/token exchanges credentials for tokens. It returns access_token, token_type, expires_in, scope and, depending on the grant, refresh_token.

POST /sts/api/authorize is the authorisation endpoint, returning code, redirect_uri and state for the flows that need a browser redirect.

POST /sts/api/revoke and POST /sts/api/introspect take a token plus your client id and secret: the first invalidates it, the second reports whether it is still active and what scope, exp and client_id it carries.

The token endpoint accepts fields for several grant types in one request shape, and which of them you send is what selects the flow:

Token endpoint · grant selection

You send Flow
client_id, client_secret Client credentials — server to server
code, code_verifier, redirect_uri Authorisation code with PKCE
username, password Resource owner password
assertion JWT bearer
refresh_token Refresh

For a bank integrating server to server, client credentials is the flow. The portal's own try-it panel uses it, and so should your service.

One thing to know before you write the client

Send every field exactly as the specification spells it, and read the spelling off the specification rather than off the RFC. This portal does not correct field names silently: a name that is wrong upstream is wrong on the wire, and finding that out from a 400 in integration testing costs a day. The PKCE parameter is the case that taught this — it was published as code_challange, was corrected to code_challenge upstream, and a client written against either sentence alone was wrong for part of the year.

What a token is worth

An access token is a bearer credential. Anyone holding it can do what it permits, so:

  • Keep it server-side. The portal proxies its own try-it requests through the server for this reason — the token would otherwise have to be in the page.
  • Cache it until it expires, then get another. Do not request one per call. Honour expires_in rather than assuming a lifetime, and refresh slightly early so a call does not fail on a token that expired in flight.
  • Treat a 401 as "get a new token and retry once". Not as a loop. The portal itself retries exactly once and then reports the failure.

User management

Drafted from the framework reference.

The platform separates two things a single "user" concept usually confuses:

A client is a system. It holds a client id and secret, it authenticates with client credentials, and it is what your integration is. Clients are provisioned by DgPays, per environment, and a sandbox client is not a production client.

A user is a person operating the back office — an agent, a supervisor, an administrator. Users hold roles, roles hold permissions, and every action a user takes is recorded against them.

You do not manage users through the APIs on this portal. Card operations performed on a cardholder's behalf carry a channel and a reference, not an operator identity, which is why the call-centre capability is listed as planned: the operations exist but nothing on them carries who made the call.

Roles and access management

Drafted from the framework reference.

Back-office changes that matter run through maker-checker: the person who makes a change cannot be the person who approves it, and the change does not take effect until a second role does. This applies to configuration, limits policy and reference data — the things where a single mistaken edit reaches every card at once.

For an integrating bank the consequence is practical: a configuration change you request is not immediate. It is made, then approved, and both steps are recorded. Build that into your go-live plan rather than discovering it during certification.

Single sign-on

Drafted from the framework reference. This installation's provider is not confirmed.

The back office supports federated sign-in so a bank's own staff use their own directory rather than a second set of credentials. What is not yet settled is which provider fronts it here, whether a bank federates its own tenant, and how roles map across the federation — a bank's "supervisor" and the platform's "supervisor" are not automatically the same permission set.

These are the questions to put on the table in the programme design phase, not at certification. They are listed at the top of this page for that reason.

Field-level encryption

Sensitive values are encrypted at field level with a certificate held per environment, and stored with an ENC: prefix marking them. Fields that are not sensitive stay in the clear, so reading a configuration does not require decrypting all of it.

Two consequences for you:

  • A value encrypted in the sandbox cannot be read in production. Test data does not migrate; it is recreated.
  • A response carrying real card data is one of a small, named set of operations. Everything else returns a masked number, and the masked number is what is safe to store and to log.

Related