Oversigt
Advanza er en multitenant SaaS-markedsføringsplatform, der understøtter OpenID Connect (OIDC) og OAuth 2.0 til sikker autentificering og single sign-on (SSO). Denne guide dækker understøttede flows, endepunkter, scopes og best practices for at integrere Advanza-autentificering i dine applikationer.
Protokol: OpenID Connect 1.0 (bygget på OAuth 2.0 Authorization Code Grant)
Udbyder: Advanza (via OpenIddict 5.x)
Multi-tenancy: Fuld understøttelse – hver organisation er en separat tenant
Sikkerhed: HTTPS påkrævet, PKCE anbefales til SPA'er, certifikater til fortrolige klienter
Understøttede autentificeringsflows
Authorization Code Flow (anbefalet)
OAuth 2.0 Authorization Code Flow er det anbefalede og mest sikre flow til de fleste applikationer, inklusive webapps og single-page-applikationer (SPA'er). Det bruger PKCE (Proof Key for Code Exchange) til offentlige klienter for at forhindre angreb, hvor autorisationskoden opsnappes.
Bedst til: Webapplikationer, SPA'er, mobilapps, tredjepartsintegrationer
Refresh Token Flow
Brug refresh tokens til at hente nye adgangstokens, uden at brugeren skal logge ind igen. Refresh tokens er gyldige i 14 dage og kan roteres for at bevare sikkerheden.
Bedst til: Langvarige sessioner, baggrundstjenester, offline adgang
Client Credentials Flow (legacy)
OAuth 2.0 Resource Owner Password Credentials-flowet understøttes for bagudkompatibilitet med legacy-integrationer. Nye integrationer bør i stedet bruge Authorization Code Flow.
Bedst til: Legacy-applikationer, interne værktøjer (anbefales ikke til ny udvikling)
API-endepunkter
Alle endepunkter er hostet på https://api.advanza.ai
Authorization-endepunkt
GET /connect/authorize
Starter OAuth-autorisationsflowet. Omdirigerer brugeren til at logge ind hos sin identitetsudbyder (Microsoft, Google eller e-mail/adgangskode).
Query-parametre:
client_id(påkrævet): Dit applikations-IDredirect_uri(påkrævet): URL der omdirigeres til efter autentificeringresponse_type(påkrævet): Skal være 'code'scope(påkrævet): Mellemrumsadskilt liste af scopes (openid, email, profile, offline_access, roles)code_challenge(påkrævet til SPA): PKCE code challengecode_challenge_method(påkrævet sammen med code_challenge): 'S256'state(anbefalet): Tilfældig streng, der forhindrer CSRF-angrebtenant_id(valgfri): Specifik tenant, der skal autentificeres til
Token-endepunkt
POST /connect/token
Udveksler en autorisationskode til adgangstokens, ID-token og valgfrit refresh token.
Anmodningsformat: application/x-www-form-urlencoded
Parametre:
grant_type(påkrævet): 'authorization_code', 'refresh_token' eller 'password'code(påkrævet ved auth code-flow): Autorisationskode fra /authorizeclient_id(påkrævet): Dit applikations-IDclient_secret(påkrævet): Din applikationshemmelighed (skal holdes fortrolig)redirect_uri(påkrævet): Skal matche /authorize-anmodningencode_verifier(påkrævet til SPA): PKCE code verifierrefresh_token(til refresh-flow): Det refresh token, der skal udvekslesusername & password(til password-flow): Brugerens loginoplysninger
Token Introspection-endepunkt
POST /connect/introspect
Validerer og inspicerer indholdet af et adgangstoken eller refresh token.
OpenID-konfiguration
GET /.well-known/openid-configuration
Standard OIDC-metadataendepunkt. Returnerer discovery-information, herunder endepunkter, offentlige nøgler, understøttede scopes og grant types.
Scopes
Anmod om scopes via scope -parameteren på autorisationsanmodningen:
openid (påkrævet)
Anmoder om et ID-token med brugerens identitetsoplysninger (subject claim, navn, tenant-ID osv.)
Anmoder om brugerens e-mailadresse og verifikationsstatus for e-mail
profile
Anmoder om brugerens profiloplysninger: name, given_name, family_name
offline_access
Anmoder om et refresh token, der udvider adgangen uden gentagen autentificering
roles
Anmoder om brugerens roller/rettigheder (f.eks. "Owner", "Editor", "Viewer")
Minimum scope til login: openid email profile
Eksempel: Authorization Code Flow med PKCE
Dette eksempel demonstrerer det anbefalede flow til single-page-applikationer (SPA'er) og mobilapps.
Trin 1: Generér PKCE-udfordring
Opret 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);Trin 2: Omdiriger til Authorization-endepunktet
Send brugeren hen for at logge ind:
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}Brugeren bliver omdirigeret til sin identitetsudbyder (Microsoft, Google eller e-mail/adgangskode), gennemfører autentificeringen og bliver sendt tilbage til din redirect_uri med en autorisationskode.
Trin 3: Udveksl kode til tokens
Fra din backend udveksles autorisationskoden:
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}Trin 4: Token-svar
Ved succes modtager du:
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "DefxA1234567890...",
"id_token": "eyJhbGciOiJSUzI1NiIs..."
}Trin 5: Verificér ID-token
Validér ID-tokenets signatur ved hjælp af den offentlige nøgle fra /.well-known/openid-configuration, verificér issuer- og audience-claims, og udtræk brugeroplysningerne.
Token-claims
ID-token claims
ID-tokenet (JWT) indeholder brugerens identitetsoplysninger:
{
"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
}Vigtige claims:
sub: Unik bruger-ID (Guid)email: Brugerens e-mailadresseemail_verified: Om e-mailen er verificeretname, given_name, family_name: Brugerens navntenant_id: Brugerens aktive tenant/organisationiss: Token-udsteder (altid https://api.advanza.ai)aud: Tilsigtet modtager (dit applikations-ID)iat: Token udstedt (Unix-timestamp)exp: Token udløber (Unix-timestamp)
Access token claims
Adgangstokenet (JWT) indeholder autorisationsoplysninger:
{
"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
}Vigtige claims:
sub: Bruger-IDemail, name: Brugeroplysningertenant_id: Aktiv tenant (brug til multi-tenancy-routing)roles: Brugerens roller i tenantenscope: Tildelte scopesexp: Udløb (typisk 1 time)
Brug adgangstokenet til: Inkludér i Authorization-headeren (Authorization: Bearer {access_token}), når du kalder Advanza-API'er eller din backend.
Multi-tenancy
Advanza er en multitenant-platform. Hver bruger kan være medlem af flere organisationer (tenants). Claimet tenant_id i både ID- og adgangstoken angiver brugerens aktive tenant-kontekst.
Standard-tenant
Ved første login tildeles brugeren en standard-tenant. Claimet tenant_id bliver udfyldt med denne tenants ID.
Skift af tenant
Brugere med flere tenant-medlemskaber kan skifte tenant ved at sende den ønskede tenant_id -parameter til authorization-endepunktet:
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}Routing efter tenant
Brug tenant_id -claimet til at route anmodninger til den korrekte tenant-kontekst i din backend:
// 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);Best practices for sikkerhed
Brug HTTPS i produktion
Alle OAuth-anmodninger skal bruge HTTPS for at beskytte loginoplysninger og tokens.
PKCE til SPA'er og mobilapps
Brug altid PKCE (Proof Key for Code Exchange) til offentlige klienter. Det forhindrer angreb, hvor autorisationskoden opsnappes.
Hold client secret fortroligt
Eksponér aldrig din client secret i klientsidekode, logs eller versionsstyring. Brug det kun i sikker backend-til-backend-kommunikation.
Validér state-parameteren
Generér og validér altid state -parameteren for at forhindre CSRF-angreb.
Verificér token-signaturer
Validér altid signaturerne på ID-token og adgangstoken ved hjælp af den offentlige nøgle fra OIDC-konfigurationsendepunktet, før du stoler på deres indhold.
Opbevar refresh tokens sikkert
Gem refresh tokens sikkert (HttpOnly-cookies eller sikker lagring, ikke localStorage). Sæt passende udløbstider.
Håndtér token-udløb
Adgangstokens udløber efter 60 minutter. Implementér token refresh-logik for at bevare uafbrudt adgang.
Support
Har du spørgsmål, problemer eller brug for hjælp til integrationen, så kontakt vores supportteam:
E-mail: support@advanza.ai
Dokumentation: https://advanza.ai/docs
Status: https://status.advanza.ai