Legal

OAuth 2.0 & OpenID Connect SSO

Komplett veiledning for å integrere OpenID Connect single sign-on med Advanza.

Last updated: 26. august 2026

Oversikt

Advanza er en multitenant SaaS-markedsføringsplattform som støtter OpenID Connect (OIDC) og OAuth 2.0 for sikker autentisering og single sign-on (SSO). Denne veiledningen dekker støttede flyter, endepunkter, scopes og beste praksis for å integrere Advanza-autentisering i applikasjonene dine.

Protokoll: OpenID Connect 1.0 (bygget på OAuth 2.0 Authorization Code Grant)
Tilbyder: Advanza (via OpenIddict 5.x)
Multitenancy: Full støtte – hver organisasjon er en egen tenant
Sikkerhet: HTTPS er påkrevd, PKCE anbefales for SPA-er, sertifikater for konfidensielle klienter

Støttede autentiseringsflyter

Authorization Code Flow (anbefalt)

OAuth 2.0 Authorization Code Flow er den anbefalte og sikreste flyten for de fleste applikasjoner, inkludert webapper og single-page-applikasjoner (SPA-er). Den bruker PKCE (Proof Key for Code Exchange) for offentlige klienter for å hindre avlytting av autorisasjonskoden.

Best egnet for: Webapplikasjoner, SPA-er, mobilapper, tredjepartsintegrasjoner

Refresh Token Flow

Bruk refresh tokens til å hente nye access tokens uten at brukeren må logge inn på nytt. Refresh tokens er gyldige i 14 dager og kan roteres for å opprettholde sikkerheten.

Best egnet for: Langvarige økter, bakgrunnstjenester, tilgang uten nett

Client Credentials Flow (utfaset)

OAuth 2.0 Resource Owner Password Credentials-flyten støttes for bakoverkompatibilitet med eldre integrasjoner. Nye integrasjoner bør bruke Authorization Code Flow i stedet.

Best egnet for: Eldre applikasjoner, interne verktøy (anbefales ikke for ny utvikling)

API-endepunkter

Alle endepunkter er tilgjengelige på https://api.advanza.ai

Autorisasjonsendepunkt

GET /connect/authorize

Starter OAuth-autorisasjonsflyten. Sender brukeren videre for å logge inn hos sin identitetstilbyder (Microsoft, Google, eller e-post/passord).

Spørreparametere:

  • client_id (påkrevd): Applikasjons-ID-en din
  • redirect_uri (påkrevd): URL det skal viderekobles til etter autentisering
  • response_type (påkrevd): Må være 'code'
  • scope (påkrevd): Mellomromseparert liste over scopes (openid, email, profile, offline_access, roles)
  • code_challenge (påkrevd for SPA): PKCE code challenge
  • code_challenge_method (påkrevd sammen med code_challenge): 'S256'
  • state (anbefalt): Tilfeldig streng for å forhindre CSRF-angrep
  • tenant_id (valgfri): Spesifikk tenant å autentisere seg inn i

Token-endepunkt

POST /connect/token

Bytter inn en autorisasjonskode mot access tokens, ID-token og eventuelt refresh token.

Forespørselsformat: application/x-www-form-urlencoded

Parametere:

  • grant_type (påkrevd): 'authorization_code', 'refresh_token' eller 'password'
  • code (påkrevd for authorization code-flyt): Autorisasjonskode fra /authorize
  • client_id (påkrevd): Applikasjons-ID-en din
  • client_secret (påkrevd): Applikasjonens hemmelighet (hold konfidensiell)
  • redirect_uri (påkrevd): Må samsvare med /authorize-forespørselen
  • code_verifier (påkrevd for SPA): PKCE code verifier
  • refresh_token (for refresh-flyt): Refresh token som skal byttes inn
  • username & password (for password-flyt): Brukerens innloggingsopplysninger

Endepunkt for token-introspeksjon

POST /connect/introspect

Validerer og undersøker innholdet i et access token eller refresh token.

OpenID-konfigurasjon

GET /.well-known/openid-configuration

Standard OIDC-metadataendepunkt. Returnerer discovery-informasjon inkludert endepunkter, offentlige nøkler, støttede scopes og grant types.

Scopes

Be om scopes via scope -parameteren i autorisasjonsforespørselen:

openid (påkrevd)

Ber om et ID-token med brukerens identitetsinformasjon (subject-claim, navn, tenant-ID, osv.)

email

Ber om brukerens e-postadresse og status for e-postverifisering

profile

Ber om brukerens profilinformasjon: name, given_name, family_name

offline_access

Ber om et refresh token for å forlenge tilgangen uten ny autentisering

roles

Ber om brukerens roller/tillatelser (f.eks. "Owner", "Editor", "Viewer")

Minste scope for innlogging: openid email profile

Eksempel: Authorization Code Flow med PKCE

Dette eksempelet viser den anbefalte flyten for single-page-applikasjoner (SPA-er) og mobilapper.

Steg 1: Generer PKCE-challenge

Opprett en code verifier og challenge på klientsiden:

// 1. Generate random code verifier (43-128 characters)
const codeVerifier = generateRandomString(128);

// 2. Create code challenge via SHA256 hash
const codeChallenge = await crypto.subtle.digest('SHA-256',
  new TextEncoder().encode(codeVerifier)
);

// 3. Base64-URL encode the challenge
const codeChallengeB64 = base64UrlEncode(codeChallenge);

// Store codeVerifier in sessionStorage for Step 3
sessionStorage.setItem('pkce_verifier', codeVerifier);

Steg 2: Viderekoble til autorisasjonsendepunktet

Send brukeren videre for å logge inn:

GET /connect/authorize?
  client_id={your_app_id}
  &redirect_uri=https://your-app.com/callback
  &response_type=code
  &scope=openid email profile
  &code_challenge={pkce_challenge}
  &state={random_state}

Brukeren blir sendt videre til sin identitetstilbyder (Microsoft, Google, eller e-post/passord), fullfører autentiseringen, og blir sendt tilbake til din redirect_uri med en autorisasjonskode.

Steg 3: Bytt kode mot tokens

Fra backend-en din, bytt inn autorisasjonskoden:

POST /connect/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code={auth_code}
&client_id={your_app_id}
&client_secret={your_app_secret}
&redirect_uri=https://your-app.com/callback
&code_verifier={pkce_verifier}

Steg 4: Token-respons

Ved suksess mottar du:

{
  "access_token": "eyJhbGciOiJSUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "DefxA1234567890...",
  "id_token": "eyJhbGciOiJSUzI1NiIs..."
}

Steg 5: Verifiser ID-token

Valider signaturen på ID-tokenet ved hjelp av den offentlige nøkkelen fra /.well-known/openid-configuration, verifiser issuer- og audience-claimene, og hent ut brukerinformasjon.

Token-claims

ID-token-claims

ID-tokenet (JWT) inneholder brukerens identitetsinformasjon:

{
  "sub": "550e8400-e29b-41d4-a716-446655440000",
  "email": "user@company.com",
  "email_verified": true,
  "name": "John Doe",
  "given_name": "John",
  "family_name": "Doe",
  "tenant_id": "12345678-1234-1234-1234-123456789012",
  "iss": "https://api.advanza.ai",
  "aud": "your_app_id",
  "iat": 1234567890,
  "exp": 1234571490
}

Sentrale claims:

  • sub: Unik brukeridentifikator (Guid)
  • email: Brukerens e-postadresse
  • email_verified: Om e-posten er verifisert
  • name, given_name, family_name: Brukerens navn
  • tenant_id: Brukerens aktive tenant/organisasjon
  • iss: Token-utsteder (alltid https://api.advanza.ai)
  • aud: Tiltenkt mottaker (applikasjons-ID-en din)
  • iat: Tidspunkt tokenet ble utstedt (Unix-tidsstempel)
  • exp: Tokenets utløpstidspunkt (Unix-tidsstempel)

Access token-claims

Access tokenet (JWT) inneholder autorisasjonsinformasjon:

{
  "sub": "550e8400-e29b-41d4-a716-446655440000",
  "email": "user@company.com",
  "name": "John Doe",
  "tenant_id": "12345678-1234-1234-1234-123456789012",
  "roles": ["Owner"],
  "scope": "openid email profile offline_access roles",
  "iss": "https://api.advanza.ai",
  "aud": "your_app_id",
  "iat": 1234567890,
  "exp": 1234571490
}

Sentrale claims:

  • sub: Bruker-ID
  • email, name: Brukerinformasjon
  • tenant_id: Aktiv tenant (bruk til ruting for multitenancy)
  • roles: Brukerens roller i tenanten
  • scope: Innvilgede scopes
  • exp: Utløpstidspunkt (vanligvis 1 time)

Bruk access token til: Inkluder i Authorization-headeren (Authorization: Bearer {access_token}) når du kaller Advanza-API-er eller din egen backend.

Multitenancy

Advanza er en multitenant plattform. Hver bruker kan være medlem av flere organisasjoner (tenants). tenant_id -claimet i både ID-token og access token angir brukerens aktive tenant-kontekst.

Standard tenant

Ved første innlogging tildeles brukeren en standard tenant. tenant_id -claimet fylles ut med denne tenantens ID.

Bytte tenant

Brukere med flere tenant-medlemskap kan bytte tenant ved å sende ønsket tenant_id -parameter til autorisasjonsendepunktet:

GET /connect/authorize?
  client_id={your_app_id}
  &redirect_uri=https://your-app.com/callback
  &response_type=code
  &scope=openid email profile
  &tenant_id=12345678-1234-1234-1234-123456789012
  &code_challenge={pkce_challenge}

Ruting per tenant

Bruk tenant_id -claimet til å rute forespørsler til riktig tenant-kontekst i backend-en din:

// Extract tenant from token claims
const tenantId = tokenClaims.tenant_id;

// Route request to tenant context
const tenantContext = getTenantContext(tenantId);
const result = await performAction(tenantContext, action);

Beste praksis for sikkerhet

Bruk HTTPS i produksjon

Alle OAuth-forespørsler må bruke HTTPS for å beskytte innloggingsopplysninger og tokens.

PKCE for SPA-er og mobilapper

Bruk alltid PKCE (Proof Key for Code Exchange) for offentlige klienter. Dette hindrer avlytting av autorisasjonskoden.

Hold client secret konfidensiell

Eksponer aldri client secret i klientsidekode, logger eller versjonskontroll. Bruk den kun i sikker backend-til-backend-kommunikasjon.

Valider state-parameteren

Generer og valider alltid state -parameteren for å forhindre CSRF-angrep.

Verifiser token-signaturer

Valider alltid signaturene til ID-token og access token ved hjelp av den offentlige nøkkelen fra OIDC-konfigurasjonsendepunktet før du stoler på innholdet.

Håndter refresh tokens sikkert

Lagre refresh tokens sikkert (HttpOnly-cookies eller sikker lagring, ikke localStorage). Sett hensiktsmessige utløpstider.

Håndter token-utløp

Access tokens utløper etter 60 minutter. Implementer logikk for token-fornyelse for å opprettholde uavbrutt tilgang.

Support

Har du spørsmål, problemer eller trenger hjelp med integrasjonen? Ta kontakt med supportteamet vårt:

E-post: support@advanza.ai
Dokumentasjon: https://advanza.ai/docs
Status: https://status.advanza.ai