Fra Nais-plattformen · Bygd for gjenbruk
wonderwall
Applikasjonen din trenger aldri å lære OAuth2.
wonderwall er en reverse proxy som spiller rollen som OpenID‑Connect‑klient, vanligvis som en sidecar til applikasjonen din. Den tar hele innloggingen mot identitetsleverandøren og sender forespørselen videre til appen med brukerens token påkoblet.
Nettleseren
Sender brukeren til
/oauth2/loginwonderwall
Går Authorization Code‑flyten med leverandøren
Applikasjonen din
Får forespørselen med
Authorization: Bearer
To måter å sette den opp på
wonderwall snakker med enhver identitetsleverandør som følger OpenID Connect — den kjenner ikke leverandørens navn, bare protokollen. Velg oppsettet som passer perimeteren din.
Standalone-modus standard
Én sidecar per app
For zero‑trust-oppsett der hver applikasjon har sin egen perimeter og sin egen klient. Sidecaren kjører rett ved siden av appen og beskytter akkurat den.
SSO-modus
Delt innlogging på ett domene
For felles autentisering på tvers av flere applikasjoner på et delt domene. Én server holder sesjonen, og appene deler den gjennom en SSO-proxy.
Protokollstøtte: OpenID Connect Authorization Code Flow, med mål om å være OAuth 2.1-kompatibel.
Hvorfor en sidecar?
Fordi innlogging er den samme jobben uansett hvilket språk appen er skrevet i. Legger du den i en sidecar, blir den gjort riktig én gang, og appen slipper å eie en eneste linje autentiseringskode.
01
Null autentiseringskode i appen
Ingen OAuth2-bibliotek, ingen callback-håndtering, ingen tokenvalidering å vedlikeholde. Appen leser brukeren fra en vanlig HTTP-forespørsel.
02
Ethvert språk, ethvert rammeverk
Sidecaren bryr seg ikke om appen er Go, Java, Node eller noe annet. Kontrakten er HTTP — det alle web-rammeverk allerede forstår.
03
Token påkoblet automatisk
Så lenge sesjonen er gyldig, legges brukerens access‑token på hver forespørsel videre til appen som Authorization: Bearer <token>.
Endepunktene den legger til
wonderwall eksponerer et sett stier under /oauth2/. Nettleseren og appen trenger stort sett bare de to øverste — resten håndterer sidecaren selv.
- GET /oauth2/login
- Starter OpenID Connect Authorization Code-flyten
- GET /oauth2/logout
- Lokal utlogging og videre til global/single-logout
- GET /oauth2/logout/local
- Kun lokal utlogging
- GET /oauth2/session
- Returnerer metadata om brukerens sesjon
- POST /oauth2/session/refresh
- Fornyer tokenene i sesjonen
- GET /oauth2/session/forwardauth
- Sjekker sesjonen og fornyer den ved behov
- GET /oauth2/callback
- Tar imot callbacket fra identitetsleverandøren
- GET /oauth2/logout/callback
- Tar imot utloggings-tilbakekallet fra leverandøren
- GET /oauth2/logout/frontchannel
- Håndterer global utlogging initiert av leverandøren
Kom i gang
Hent containeren, pek den på OpenID-leverandøren din og på appen den skal beskytte. Da tar sidecaren resten.
ghcr.io/nais/wonderwallWONDERWALL_OPENID_CLIENT_ID=<klient-id>
WONDERWALL_OPENID_CLIENT_JWK=<privat-nøkkel-jwk>
WONDERWALL_OPENID_WELL_KNOWN_URL=https://leverandor/.well-known/openid-configuration
WONDERWALL_INGRESS=https://din-app.example.no
WONDERWALL_UPSTREAM_HOST=127.0.0.1:8080
WONDERWALL_BIND_ADDRESS=0.0.0.0:3000
WONDERWALL_ENCRYPTION_KEY=<openssl rand -base64 32>Bruk WONDERWALL_OPENID_CLIENT_SECRET i stedet for _CLIENT_JWK om leverandøren din bruker client secret. For flere replikaer legger du til WONDERWALL_REDIS_URI som delt sesjonslager.
Ta den i bruk i din virksomhet
wonderwall er en frittstående reverse proxy. Den er bygd på Nais-plattformen, men vet ingenting om Nav — alt den trenger er en OpenID-leverandør og et sted å kjøre en container.
Det du trenger
- En identitetsleverandør som følger OpenID Connect
- Et sted å kjøre en container, gjerne som sidecar til appen
- En håndfull miljøvariabler — det er hele grensesnittet
Det du kan forvente
MIT-lisensiert og fritt å bruke. Vi lover ingen support-SLA, men issues og pull requests er velkomne — koden driftes daglig i Nav, så den blir vedlikeholdt uansett.
Si gjerne fra hvis du tar den i bruk. Det er slik vi vet at det åpne arbeidet virker.
Kjører hvor som helst du kan kjøre en container