Bruk av Resource Indicators for å få smale Access-tokens

Flere API-er krever Access-token med navnet til API-et som det eneste kortnavnet (audience) i aud-claimet. Hvis en klient behøver å

  1. konsumere mer enn ett API, og
  2. minst ett av disse API-ene krever sitt navn som det eneste kortnavnet (audience) i Access-tokenet

så kan klienten bruke Resource Indicator-mekanismen for å kunne hente et Access-token som kun inneholder ett enkelt kortnavn (audience) i aud-claimet. Dette kaller vi et smalt Access-token.

Spesifikasjonen for denne mekanismen finnes i Resource Indicators for OAuth 2.0.

Eksempelkode, som demonstrerer bruken av denne mekanismen, kan finnes i vårt offentlige GitHub-repo.

Bruk av flere API ved hjelp av Resource Indicators

Vi gir et eksempel på dette, med bruk av to API-er, der begge krever et Access-token med et enkelt kortnavn.

Kortnavn (audience) Scopes
API 1 nhn:siffer-tjeneste nhn:siffer-tjeneste/primtall
API 2 nhn:tekst-tjeneste nhn:tekst-tjeneste/bokstaver

Brukerautentisering og indikasjon på hvilke API som skal brukes

I det første kallet til PAR-endepunktet må klienten sende inn følgende verdier:

  • I resource-parametrene: indikere hvilke API-er klienten vil kalle. Parametrene må være lik kortnavnene for hvert API.
  • I scope-parameteret: scopene som klienten vil bruke for å konsumere hvert API
  • I scope-parameteret: klienten må sette offline_access-scopet for å kunne få et Refresh-token i responsen

Et eksempel-kall til PAR-endepunktet:

 POST /connect/par HTTP/1.1
 Host: helseid-sts.nhn.no
 Content-Type: application/x-www-form-urlencoded

 resource=nhn:siffer-tjeneste&
 resource=nhn:tekst-tjeneste&
 scope=nhn:openid profile offline_access siffer-tjeneste/primtall nhn:tekst-tjeneste/bokstaver&
 client_id=973f132f-47e5-4fb2-b211-43c242b7fce0&
 ... other parameters ...

Forespørre det første Access-tokenet

Når klienten mottar koden fra Authorization-endepunktet, så kan den spesifisere ressursen som den vil bruke for å få hentet et Access-token. I dette tilfellet er denne ressursen satt som resource=nhn:siffer-tjeneste.

 POST /connect/token HTTP/1.1
 Host: helseid-sts.nhn.no
 Content-Type: application/x-www-form-urlencoded

 resource=nhn:siffer-tjeneste&
 grant_type=authorization_code&
 client_id=973f132f-47e5-4fb2-b211-43c242b7fce0&
 ... other parameters ...

Responsen fra dette kallet vil inneholde et Access-token der aud-claimet (bare) inneholder verdien nhn:siffer-tjeneste, og scope-claimet inneholder verdien nhn:siffer-tjeneste/primtall.

Forespørre det neste Access-tokenet

Klienten kan nå bruke Refresh-tokenet for å få et nytt Access-token med en forskjellig verdi i aud-claimet:

 POST /connect/token HTTP/1.1
 Host: helseid-sts.nhn.no
 Content-Type: application/x-www-form-urlencoded

 resource=nhn:tekst-tjeneste&
 grant_type=refresh_token&
 client_id=973f132f-47e5-4fb2-b211-43c242b7fce0&
 ... other parameters ...

Responsen fra dette kallet vil inneholde et Access-token der aud-claimet (bare) inneholder verdien nhn:tekst-tjeneste, og scope-claimet inneholder verdien nhn:tekst-tjeneste/bokstaver.

Husk at begge Access-tokene kan brukes mot API-et så lenge utløpstiden holder.