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 obo-feil */
}
fetch("https://example.com/api", {
headers: { Authorization: `Bearer ${obo.token}` },
});
const parse = parseAzureUserToken(token);
if (parse.ok) {
console.log(`Bruker: ${parse.preferred_username} (${parse.NAVident})`);
}
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 med JWTPayload
.
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"
for TokenX eller "api://cluster.namespace.app/.default" for Azure
(gitt at man skal ha default permissions).
En Promise
som resolver til et TokenResult
-objekt med OBO-token.
Warning
Pass på at du ikke bruker et TokenResult
-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);
Oasis kan også brukes til å bytte tokens utenom en bruker-kontekst. Dette er et såkalt "maskin til maskin"-token-bytte
som bruker client_credentials
-flyt.
const clientCredentials = await requestAzureClientCredentialsToken(
"api://<cluster>.<namespace>.<other-api-app-name>/.default",
);
if (clientCredentials.ok) {
const headers = { Authorization: `Bearer ${clientCredentials.token}` };
}
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.
--
token: string
: Et validert idportentoken.
Et ParseResult
med IdportenPayload
-verdier eller ok=false.
token: string
: Et validert idportentoken.
Et ParseResult
med AzurePayload
-verdier.
token: string
: Et validert idportentoken.
Et ParseResult
med IdportenPayload
-verdier.
Eller kommentarer? Lag en issue eller kontakt oss på #oasis-maintainers på Slack.