Fra Nav · Bygd for gjenbruk

token-support

Én annotasjon mellom internett og API-et ditt.

Et Java- og Kotlin-bibliotek som står i døra til endepunktene dine og sjekker OAuth 2.0- og OpenID Connect-tokens. Du peker det på tilbyderen i konfigurasjonen, setter én annotasjon over metoden — så slipper koden din å bry seg om signaturer, utstedere og utløpstider. I drift i Nav, klar for enhver JVM-app.

Kotlin·MIT-lisens·JVM-bibliotek·no.nav.security

SakController.ktdørvakten
@RestController
class SakController(val sak: SakService) {

  @Protected(issuer = "borger")
  @GetMapping("/api/saker")
  fun mineSaker() =
    sak.forInnloggetBruker()
}
Uten et gyldig token fra borger når forespørselen aldri metoden. Ingen if-setninger, ingen egen signatursjekk.

Hva den gjør

token-support validerer tokens fra hvilken som helst OIDC-tilbyder — du bestemmer hvem du stoler på i konfigurasjonen. Biblioteket henter tilbyderens metadata, verifiserer signatur og utløp, og sjekker at token er utstedt til nettopp din applikasjon.

Du navngir tilbyderne du stoler på …

no.nav.security.jwt.issuer.borger
  .discoveryurl: https://tilbyder/.well-known/openid-configuration
  .accepted_audience: min-app

Ett navn per tilbyder — borger, ansatt, hva du vil. Navnet er det samme du oppgir i @Protected(issuer = "borger").

  • Standard OIDC, ingen lås. Bygget på Nimbus OAuth 2.0 SDK. Peker du på en gyldig .well-known-adresse, fungerer det — ID-porten, Entra ID, Keycloak eller din egen.
  • Krav ned på claim-nivå. @ProtectedWithClaims(issuer = "ansatt", claimMap = {"acr=Level4"}) når det ikke holder å bare være innlogget.
  • Åpne dører merkes. @Unprotected gjør det tydelig — og bevisst — hvilke endepunkter som slipper alle inn.
  • Ut like enkelt som inn. token-client-modulene henter tokens til videre kall med client_credentials, jwt_bearer eller token_exchange.

Modulene

Biblioteket er delt i små moduler så du bare drar inn det rammeverket ditt bruker. Alle deler samme kjerne og samme konfigurasjon under no.nav.security.jwt.

Valider innkommende tokens

Dørvakten — sjekker tokenet før forespørselen når koden din.

token-validation-core
Kjernen. Validerer JWT-tokens med Nimbus OAuth 2.0 SDK og OpenID Connect-utvidelsene. Rammeverksuavhengig.
token-validation-spring
Spring Boot / Spring Web-innpakning. Gir deg @EnableJwtTokenValidation og annotasjonene @Protected, @ProtectedWithClaims og @Unprotected.
token-validation-ktor
Ktor-innpakning for Kotlin. tokenValidationSupport() og RequiredClaims i din egen route-konfigurasjon.
token-validation-jaxrs
JAX-RS / Jersey-innpakning rundt kjernen og token-validation-filter, med de samme annotasjonene.
token-validation-filter
Enkelt servlet-filter som validerer tokens med kjernekomponentene — for det som ikke bruker et av rammeverkene over.

Hent tokens til utgående kall

Når appen din selv må vise legitimasjon videre til en annen tjeneste.

token-client-core
OAuth 2.0-klient. Henter tokens med grantene jwt_bearer, client_credentials og token_exchange.
token-client-spring
Spring Boot-innpakning rundt token-client-core. Slår på klienten med @EnableOAuth2Client.

Hent den inn

Alle modulene ligger på Maven Central under gruppen no.nav.security. Legg til den du trenger — her er token-validation-spring — og sett en versjon fra siste utgivelse.

build.gradle.kts · Gradle
implementation("no.nav.security:token-validation-spring:$tokenSupportVersion")
pom.xml · Maven
<dependency>
  <groupId>no.nav.security</groupId>
  <artifactId>token-validation-spring</artifactId>
  <version>${token-support.version}</version>
</dependency>

Bytt token-validation-spring mot modulen som passer rammeverket ditt — -ktor, -jaxrs, -filter eller token-client-*. Samme gruppe, samme versjon.

Fri gjenbruk

Bruk den rett fra Maven Central

token-support er MIT-lisensiert og publisert offentlig — hvem som helst kan legge den inn i sitt eget bygg, ingen avtale nødvendig. Vi lover ingen support-SLA, men biblioteket driftes i Nav hver dag, og issues og pull requests er velkomne.

Klar for enhver JVM-app, i og utenfor offentlig sektor