Teknisk integrasjon

Siste steg er å utvikle selve klient-integrasjonen. Dette gjøres typisk av systemleverandøren. For å kalle Toll-API-ene må man

  1. Hente access-token fra Maskinporten
  2. Veksle Maskinporten-token til et Toll-token
  3. Kalle Toll-API med Toll-token

Dette forutsetter at man har et gyldig sertifikat (fra steg 1) og har gjennomført nødvendig onboarding i steg 2.

Scopes

Hvilke(t) scope du skal bruke avhenger av hvilke tjenester du skal ta i bruk, og krever tildelt tilgang til dette scopet fra Tolletaten. Norske aktører bruker toll:…-scopene, utenlandske aktører de tilsvarende toll:eu/…-scopene.

API / tjeneste Scope (norsk) Scope (utenlandsk)
movement-road-api-v2, movement-road-query-api-v2 toll:movement/road/v2 toll:eu/movement/road/v2
movement-air-api, movement-air-query-api toll:movement/air toll:eu/movement/air
movement-rail-api, movement-rail-query-api toll:movement/rail toll:eu/movement/rail
movement-maritime-api, movement-maritime-query-api toll:movement/maritime toll:eu/movement/maritime
movement/presentation, movement/routing toll:movement/entry toll:eu/movement/entry
Dokumentopplasting toll:goodsdeclaration/document.write toll:eu/goodsdeclaration/document.write
API for deklarasjonsdata (ikke klart ennå) toll:declaration.feed

Les mer som scopes i Maskinporten her.

1. Hent access token fra Maskinporten

Norske aktører: se Maskinportens dokumentasjon på hvordan hente ut et access token.

Utenlandske aktører: se Maskinportens dokumentasjon under European eSeals, og følg guiden for europeiske virksomheter.

Den tekniske forskjellen mellom norske og utenlandske aktører ligger i hvordan klienten identifiseres: en norsk aktør oppgir en registrert client_id i iss, mens en utenlandsk aktør identifiseres via eSeal-sertifikatet i x5c (og iss ignoreres). Resten av JWT-grant-en er lik, bortsett fra at utenlandske aktører bruker toll:eu/…-scopene.

TIPS:
I tillegg til dokumentasjonen lenket til over har Digdir også publisert et repository på github (jwt-grant-generator), som demonstrerer hvordan en kan hente ut access token fra Digdirs tjenester, deriblant Maskinporten. Eksempelet gjelder norske virksomheter, men kan tilpasses for utenlandske virksomheter. Merk at x5c da må utvides til hele sertifikatkjeden.

Oppsett av JWT-grant (oppsummert)

Klienten lager en JWT-grant, signerer den med nøkkelen sin og POST-er den til /token-endepunktet i Maskinporten. Tabellen viser noen av de viktigste feltene grant-en skal inneholde, og hva forskjellene er for norske og utenlandske aktører.

Felt Norsk Utenlandsk (eSeal)
Header: x5c Sertifikat brukt for å signere JWT-grant (base64-encoded) Sertifikatet (eSeal) som signerer JWT-grant-en, og hele sertifikatkjeden (base64-encoded)
aud https://maskinporten.no/
(test: https://test.maskinporten.no/)
Samme
iss Registrert client_id
(se Samarbeidsportalen)
Navn på virksomhet og/eller system
(Påkrevd, men verdien ignoreres.)
scope toll:…
(f.eks. toll:movement/road/v2)
toll:eu/…
(f.eks. toll:eu/movement/road/v2)
iat / exp Påkrevd. exp maks 120 sekunder etter iat Samme
jti Anbefalt, unik verdi Samme

Den signerte JWT-grant-en sendes som assertion i en form-encoded POST til Maskinportens /token-endepunkt:

HTTP Request

POST /token
Host: maskinporten.no            (test: test.maskinporten.no)
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
assertion=<SIGNERT JWT-GRANT>
Tips (utenlandske aktører):
  • x5c må være en array med hele sertifikatkjeden, ikke bare eSeal-et alene. Se Maskinportens egen signeringsnøkkel (x5c-claim) som eksempel.
  • Bare scopes som er aktivert for europeiske virksomheter kan brukes. Du kan teste med digdir:verksemd.eu i alle miljøer, men det gir ikke tilgang til noe (og kan ikke veksles til et Toll-token i steg 2).

Får du feil når du henter token, se Maskinportens feilsøkingsside.

2. Veksle til et Toll-signert access token

Veksle Maskinportens access token til et Toll-signert access token.

HTTP Request

POST /api/access/external/oauth/token
Host: api.toll.no            (test: api-test.toll.no)
Content-Type: application/x-www-form-urlencoded

grant_type=token-exchange&
subject_token_type=access_token&
subject_token=<MASKINPORTEN ACCESS TOKEN>

Eksempel: HTTP Response

{
  "issued_token_type": "access_token",
  "access_token": "<TOLL ACCESS TOKEN HER>",
  "token_type": "Bearer",
  "expires_in": 970
}

Tips:
Et Toll-signert access token kan brukes i hele dets levetid, derfor anbefales det å mellomlagre disse når en kommuniserer med Tolletatens API-er. For en mer sømløs opplevelse anbefaler vi videre å veksle til et nytt Toll-token før det foregående utgår (for eksempel ett minutt før).

Feilsøking: en feilmelding som «Not authorized to request scope toll:…» betyr vanligvis at scopet ikke er gitt til deg. Sjekk at:

3. Test tilgang til API-et

Dette eksempelet gjelder for API-et for kjøretøy på vei.

HTTP Request

GET /api/movement/road/v2/test-auth
Host: api.toll.no            (test: api-test.toll.no)
Authorization: Bearer <TOLL ACCESS TOKEN>

Forventet resultat er 200 OK.