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 dinredirect_uri(påkrevd): URL det skal viderekobles til etter autentiseringresponse_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 challengecode_challenge_method(påkrevd sammen med code_challenge): 'S256'state(anbefalt): Tilfeldig streng for å forhindre CSRF-angreptenant_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 /authorizeclient_id(påkrevd): Applikasjons-ID-en dinclient_secret(påkrevd): Applikasjonens hemmelighet (hold konfidensiell)redirect_uri(påkrevd): Må samsvare med /authorize-forespørselencode_verifier(påkrevd for SPA): PKCE code verifierrefresh_token(for refresh-flyt): Refresh token som skal byttes innusername & 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.)
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-postadresseemail_verified: Om e-posten er verifisertname, given_name, family_name: Brukerens navntenant_id: Brukerens aktive tenant/organisasjoniss: 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-IDemail, name: Brukerinformasjontenant_id: Aktiv tenant (bruk til ruting for multitenancy)roles: Brukerens roller i tenantenscope: Innvilgede scopesexp: 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