Fra Nav · Bygd for gjenbruk

mock-oauth2-server

En OAuth2-server som aldri sier nei.

En skriptbar OAuth2- og OpenID Connect-server for JVM-tester og Docker Compose. Den utsteder signerte JWT-er der du bestemmer innholdet, verifiserbare gjennom vanlige JWKS- og discovery-endepunkter — så du kan teste innlogging uten en ekte identitetsleverandør, offline og i CI.

Kotlin·401 stjerner·MIT-lisens·Kun for test

token-utvekslingPOST /default/token
# be om et token — velg selv grant og scope
$ curl -s http://localhost:8080/default/token \
    -d grant_type=client_credentials \
    -d scope=my-api
200 OK  application/json
"access_token": "eyJraWQiOiJkZWZhdWx0...", // ← signert JWT
  "token_type": "Bearer",
  "expires_in": 3600

Du bestemmer innholdet i payloaden

"iss": "http://localhost:8080/default",
  "sub": "user123", "aud": "my-api",
  "roles": ["admin"] 

Hvorfor den finnes

Applikasjoner som er avhengige av OAuth2 er vonde å teste: den ekte identitetsleverandøren er treg, delt og utenfor din kontroll. mock-oauth2-server lar deg teste med sikkerheten påslått — uten å skru av noe og uten spesialoppsett i testene.

Ekte signaturer

Serveren utsteder signerte JWT-er som verifiseres gjennom standard JWKS og OpenID Connect-discovery. Appen din trenger ingen egen testkonfigurasjon — den peker bare på et annet .well-known.

Ingen IdP i CI

Kjør den innebygd i JVM-testene eller som en frittstående prosess i Docker Compose. Alt går offline, uten nett og uten en ekte identitetsleverandør å vente på.

Multi-issuer gratis

Det første leddet i URL-en avgjør hvilken issuer du snakker med — helt uten oppsett. Hver issuer får sin egen discovery, sitt token-endepunkt og sin JWKS.

/default/.well-known/openid-configuration/default/token/default/jwks/isalive → 200

Flytene den snakker

Alle de store OAuth2-flytene er dekket, og tokenene er verifiserbare gjennom OpenID Connect Discovery og OAuth2 Authorization Server Metadata.

  • OpenID Connect Authorization Code Flow
  • OAuth2 Client Credentials Grant
  • OAuth2 JWT Bearer Grant (On-Behalf-Of)
  • OAuth2 Token Exchange Grant
  • OAuth2 Refresh Token Grant
  • OAuth2 Resource Owner Password Credentials Grant

Kom i gang

To måter å kjøre den på: innebygd i JVM-testene, eller som en frittstående container ved siden av appen din. Kodebitene under er hentet rett fra README-en.

I JVM-testene

build.gradle.kts
testImplementation("no.nav.security:mock-oauth2-server:$mockOAuth2ServerVersion")
MockOAuth2ServerTest.kt
val server = MockOAuth2Server()
server.start()

val token = server.issueToken(
    issuerId = "default",
    subject = "user123",
    audience = "my-api",
)

val wellKnownUrl = server.wellKnownUrl("default").toString()
server.shutdown()

Som frittstående / Docker

terminal
docker run -p 8080:8080 \
  ghcr.io/navikt/mock-oauth2-server:$MOCK_OAUTH2_SERVER_VERSION
Token
http://localhost:8080/default/token
Discovery
http://localhost:8080/default/.well-known/openid-configuration
JWKS
http://localhost:8080/default/jwks
Helse
GET /isalive → 200 når serveren er klar

Ta den i bruk

Du finner den i testoppsettet til blant andre Elasticsearch, Apache Kafka og Sigstore — og hos Statens vegvesen og britiske Ministry of Justice.

MIT-lisensiert og fritt å bruke — i Nav og langt utenfor. Vi lover ingen support-SLA, men issues og pull requests er velkomne.

Kun for test. Serveren er laget for tester og lokal utvikling — den skal aldri kjøres i produksjon.

Åpne på GitHub