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 å
- konsumere mer enn ett API, og
- 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å setteoffline_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.