Giter Club home page Giter Club logo

oasis's Introduction

@navikt/oasis

Bibliotek for å validere tokens fra Wonderwall og utføre On-Behalf-Of (OBO) Exchange mot både Azure Entra og TokenX.

OBO

Installasjon

npm install @navikt/oasis

Note

@navikt-scopede pakker hentes fra GitHubs NPM-register Tilgang dit må konfigureres.

Quick start

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}` },
});

API

validateToken(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).

Parametre

token: string: Tokenet du får fra din konsument.

Returverdi

En Promise som resolver til et ValidationResult-objekt.

Azure, Idporten og TokenX

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);

requestOboToken(token, audience)

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.

Parametre

token: string: Tokenet du får fra din konsument.

audience: string: Client ID til APIet du skal kontakte på formatet "cluster:namespace:app".

Returverdi

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}` };
}

Azure og TokenX

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);

getToken(val)

Parametre

val: Request | IncomingMessage | Headers | string

Returverdi

En string token eller null om argumentet ikke inneholder noe token.


expiresIn(token)

Parametre

token: string: Et token med exp-payload.

Returverdi

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.


Spørsmål?

Eller kommentarer? Lag en issue eller kontakt oss på #oasis-maintainers på Slack.

oasis's People

Contributors

androa avatar dependabot[bot] avatar andnorda avatar jksolbakken avatar celinetendam avatar geiralund avatar rannveigskjerve avatar kmriise avatar karl-run avatar gtcno avatar johannbm avatar step-security-bot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.