Bibliotek for å validere tokens fra Wonderwall og utføre On-Behalf-Of (OBO) Exchange mot både Azure Entra og TokenX.
npm install @navikt/oasis
Note
@navikt-scopede pakker hentes fra GitHubs NPM-register Tilgang dit må konfigureres.
const token = getToken(req);
if (!token) {
/* håndter manglende token */
}
const validation = await validateToken(token);
if (!validation.ok) {
/* håndter valideringsfeil */
}
const obo = await requestOboToken(token, "an:example:audience");
if (!obo.ok) {
/* håndter obofeil */
}
fetch("https://example.com/api", {
headers: { Authorization: `Bearer ${obo.token}` },
});
Utfører validering av et token mot enten Azure eller Idporten, avhengig av verdien til noen miljøvariabler som settes av NAIS (IDPORTEN_ISSUER og AZURE_OPENID_CONFIG_ISSUER).
token: string
: Tokenet du får fra din konsument.
En Promise
som resolver til et ValidationResult
-objekt.
Om du har både azure og idporten enabled, eller av andre grunner ønsker å eksplisitt validere mot en gitt tjeneste eksponeres disse funksjonene direkte:
validateAzureToken(token);
validateIdportenToken(token);
validateTokenxToken(token);
Gjør on-behalf-of-utveksling mot enten Azure eller Idporten, avhengig av verdien til noen miljøvariabler som settes av NAIS (IDPORTEN_ISSUER og AZURE_OPENID_CONFIG_ISSUER). Før du utfører OBO-utveksling må tokenet være validert.
OBO-tokens caches i applikasjonens minne inntil det utløper.
Prometheus-metrikker for OBO-utveksling er tilgjengelig gjennom biblioteket "prom-client"
. Eksempelappen viser hvordan disse kan eksponeres med config i nais.yaml og endepunkt. Vi har et dashboard i Grafana hvor du kan utforske dine Prometheus-data.
token: string
: Tokenet du får fra din konsument.
audience: string
: Client ID til APIet du skal kontakte på formatet "cluster:namespace:app"
.
En Promise
som resolver til et OboResult
-objekt.
Warning
Pass på at du ikke bruker et OboResult
-objekt direkte i f.eks. en tempalte string. Det er token-feltet som har selve tokenet.
❌ FEIL:
const obo = await requestOboToken(token, "an:example:audience");
if (obo.ok) {
const headers = { Authorization: `Bearer ${obo}` };
}
✅ RIKTIG:
const obo = await requestOboToken(token, "an:example:audience");
if (obo.ok) {
const headers = { Authorization: `Bearer ${obo.token}` };
}
Om du har både azure og idporten enabled, eller av andre grunner ønsker å eksplisitt validere mot en gitt tjeneste eksponeres disse funksjonene direkte:
requestAzureOboToken(token, audience);
requestTokenxOboToken(token, audience);
val: Request | IncomingMessage | Headers | string
En string
token eller null
om argumentet ikke inneholder noe token.
token: string
: Et token med exp-payload.
Et number
med antall sekunder til tokenet uløper.
Funksjonen kaster feil om dekoding av tokenet feiler, eller om tokenet ikke har en exp
-payload.
Eller kommentarer? Lag en issue eller kontakt oss på #oasis-maintainers på Slack.