Authagonal

Dokumentasie

Alles wat jy nodig het om met Authagonal te begin — van die skep van jou eerste huurder tot die opstel van SSO, SCIM en pasgemaakte handelsmerk.

Begin

Authagonal gee elke huurder 'n volledig standaard-voldoende OIDC-bediener. Elke huurder kry sy eie uitreiker-URL, ontdekkingsdokument en token-eindpunte — geen gedeelde infrastruktuur tussen huurders nie. Jy kan binne 5 minute van niks na 'n werkende aanmeldvloei gaan.

Skep 'n Rekening

Registreer by authagonal.io en kies 'n slug vir jou rekening. Die slug word jou issuer-domein: {slug}.authagonal.io. Bevestig jou e-posadres nadat jy jou rekening geskep het.

Authagonal signup page showing tenant slug input and email verification

Kies 'n unieke slug vir jou rekening tydens registrasie

Registreer 'n Client

Gaan na Clients in die portaalsy-kieslys en klik Nuwe client. Voer 'n clientId en clientName vir jou toepassing in. Voeg dan op die client se URIs-oortjie ten minste een redirect URI by; dit is waarheen gebruikers gestuur word na verifikasie. Byvoorbeeld: https://app.example.com/callback. Nuwe clients vereis standaard 'n client secret, so skakel vir 'n blaaiertoepassing sonder 'n backend Vereis secret op die Algemeen-oortjie af.

New client form with Client ID and Client Name fields

Registreer 'n nuwe OAuth client in die portaal

Plaaslike Ontwikkeling

Gebruik http://localhost:3000/callback as redirect URI vir plaaslike ontwikkeling. Authagonal laat nie-HTTPS redirect URI's vir localhost-oorspronge toe.

Jou Eerste Aanmelding

Die vinnigste manier om te integreer is met oidc-client-ts, 'n ligte OIDC-kliëntbiblioteek vir JavaScript- en TypeScript-toepassings.

oidc-client-ts integration
import { UserManager } from 'oidc-client-ts';

const mgr = new UserManager({
  authority: 'https://acme.authagonal.io',
  client_id: 'my-app',
  redirect_uri: 'https://app.example.com/callback',
  response_type: 'code',
  scope: 'openid profile email',
});

// Redirect to login
mgr.signinRedirect();

// On callback page
const user = await mgr.signinRedirectCallback();
console.log(user.profile); // { sub, email, name, ... }

As jy 'n minimale benadering sonder 'n biblioteek verkies, kan jy die standaard OAuth 2.0 authorization code-vloei met gewone fetch gebruik:

Minimal fetch-based flow
// 1. Redirect the user to the authorization endpoint
const authorizeUrl = new URL('https://acme.authagonal.io/connect/authorize');
authorizeUrl.searchParams.set('client_id', 'my-app');
authorizeUrl.searchParams.set('redirect_uri', 'https://app.example.com/callback');
authorizeUrl.searchParams.set('response_type', 'code');
authorizeUrl.searchParams.set('scope', 'openid profile email');
authorizeUrl.searchParams.set('code_challenge', codeChallenge);
authorizeUrl.searchParams.set('code_challenge_method', 'S256');
window.location.href = authorizeUrl.toString();

// 2. On the callback page, exchange the code for tokens
const res = await fetch('https://acme.authagonal.io/connect/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    grant_type: 'authorization_code',
    code: new URLSearchParams(window.location.search).get('code')!,
    redirect_uri: 'https://app.example.com/callback',
    client_id: 'my-app',
    code_verifier: codeVerifier,
  }),
});

const tokens = await res.json();
// tokens.id_token, tokens.access_token (refresh_token only when offline_access is requested and allowed)
Authagonal login page with email and password fields, branded with tenant logo

Die verstekbladsy vir aanmelding vir jou huurder

Sandbox-modus

Toets jou integrasie eers in 'n sandbox-omgewing. Skep een onder Omgewings in die portaal: elke sandbox kry sy eie URL ({env}-{slug}.authagonal.io, bv. test1-acme.authagonal.io) en kan te eniger tyd na leeg teruggestel word sonder om lewendige gebruikers te beïnvloed.

Paneelbord

Die portaalpaneelbord gee jou 'n intydse oorsig van jou huurder. Dit toon die maatstawwe wat die meeste saak maak — gebruikersgroei, verifikasie-aktiwiteit en vinnige navigasie na elke funksie in die portaal.

Oorsig

Bo-aan die paneelbord sal jy 'n verwelkoming sien en 'n Maak aanmeldblad oop-skakel na jou huurder se aangebode aanmelding. Onder die statistiekkaarte hou 'n Maandelikse aktiewe gebruikers-meter gebruik teen jou planlimiet dop en skakel dit na jou planopsies sodra jy verby 80% is. 'n Aanmeldaktiwiteit-grafiek en 'n Onlangse aktiwiteit-stroom van die jongste ouditinskrywings voltooi die bladsy.

Full dashboard view showing the welcome banner, stat cards, monthly active users meter, and sign-in activity chart

Die paneelbordbladsy met statistiekkaarte en aanmeldaktiwiteit

Aktiwiteitsmaatstawwe

Ses statistiekkaarte som jou huurder in een oogopslag op:

  • Aktiewe gebruikers: die totale aantal gebruikers in jou huurder
  • Aanmeldings (24u): suksesvolle aanmeldings in die afgelope 24 uur
  • MFA-ingeskrewe: die persentasie gebruikers met MFA geregistreer, met die ingeskrewe en totale tellings
  • Mislukte pogings (24u): mislukte aanmeldings in die afgelope 24 uur, soos verkeerde geloofsbriewe, geslote rekeninge of beleidsverwerpings
  • SCIM-sinchronisasie: voorsieningsaktiwiteit van gekoppelde IdP's, getoon as Ledig of as 'n aantal bewerkings
  • Maandelikse besteding: besteding tot dusver hierdie maand, met 'n geprojekteerde syfer vir die einde van die maand

Die 24-uur-kaarte vergelyk die afgelope 24 uur met die 24 uur daarvoor. Die Aanmeldaktiwiteit-grafiek stip suksesvolle en mislukte aanmeldings per dag oor 14, 30 of 90 dae. Die paneelbord verfris elke minuut.

Six stat cards showing active users, sign-ins, MFA enrolment, failed attempts, SCIM sync, and monthly spend

Statistiekkaarte wat die afgelope 24 uur opsom

Vinnige Navigasie

Onder die maatstawwe skakel navigasiekaarte direk na Clients, SSO, Gebruikers, SCIM, Handelsmerk, Instellings, Fakturering, Domeine en Ouditlog. Elke kaart toon 'n kort beskrywing sodat nuwe spanlede vinnig kan oriënteer.

Clients

OAuth clients verteenwoordig die toepassings wat gebruikers deur jou huurder verifieer. Elke client het sy eie konfigurasie vir redirect URI's, scopes, grant types, token-lewenstye en MFA-beleid.

Clientlys

Die Clients-bladsy toon 'n tabel van alle geregistreerde clients. Elke ry toon die clientId, vertoonname, toegelate grant types as gekleurde kentekens, en of PKCE geaktiveer is. Klik enige ry om die volledige konfigurasie-redakteur oop te maak.

Clients table showing clientId, name, grant type badges, and PKCE status for each registered application

Clientlys met grant type-kentekens en PKCE-aanduiders

Skep 'n Client

Klik Nuwe client om 'n nuwe toepassing te registreer. Jy moet twee velde verskaf:

  • clientId — 'n unieke identifiseerder vir die client (bv. my-spa)
  • clientName — 'n leesbare vertoonname
New client form with Client ID and Client Name input fields

Registreer 'n nuwe OAuth client

Skrap 'n Client

Om 'n client te skrap, klik die asblik-ikoon op sy ry in die clienttabel en tik die client-ID om te bevestig. Die client word permanent verwyder en kan nie meer gebruikers aanmeld of tokens verfris nie. Access tokens wat reeds uitgereik is, word nie herroep nie en bly geldig totdat hulle verval.

Clientkonfigurasie-verwysing

Elke client het 'n omvattende stel konfigurasiekeuses wat in vyf oortjies georganiseer is: Algemeen, URIs, Scopes & Grants, Tokens en Sekuriteit.

Algemene Instellings

InstellingBeskrywingVerstek
clientNameVertoonname wat in toestemmingskerm en die portaal getoon word–
requirePkceVereis Proof Key for Code Exchange vir authorization code-vloeieAan
requireClientSecretVereis 'n client secret vir token-versoeke (deaktiveer vir publieke clients soos SPA's)Aan
allowOfflineAccessLaat die client toe om refresh tokens via die offline_access scope te versoekAf
alwaysIncludeUserClaimsInIdTokenSluit profiel-, e-pos-, rol- en groep-eise in die ID token in, selfs wanneer die ooreenstemmende scopes nie versoek is nieAf
includeGroupsInTokensSluit die name van die gebruiker se SCIM-groepe as 'n groups-eis in, in tokens wat uitgereik word wanneer die groups-scope versoek wordAf

PKCE-sekuriteit

Die deaktivering van PKCE verminder sekuriteit vir authorization code-vloeie. Deaktiveer dit slegs vir verouderde clients wat PKCE nie ondersteun nie. Alle moderne toepassings moet PKCE geaktiveer laat.

URI's

URI-velde gebruik 'n etiket-invoer — tik 'n waarde en druk Enter of komma om dit by te voeg. Klik die X op enige etiket om dit te verwyder.

InstellingBeskrywing
redirectUrisToegelate terugverwys-URL's na verifikasie. Moet presies ooreenstem met die redirect_uri-parameter in magtigingsversoeke.
postLogoutRedirectUrisToegelate URL's om na afmelding na te verwys.
allowedCorsOriginsOorspronge wat toegelaat word vir kruisoorsprong-versoeke na die token- en UserInfo-eindpunte.
URI configuration section showing tag inputs for redirect URIs, post-logout URIs, and CORS origins

Etiket-invoervelde vir die opstel van URI's

Scopes en Grant Types

InstellingOpsies
allowedScopesopenid profile email offline_access phone roles groups
allowedGrantTypesauthorization_code client_credentials refresh_token urn:ietf:params:oauth:grant-type:device_code urn:ietf:params:oauth:grant-type:token-exchange

Token-lewenstye

InstellingBeskrywingVerstek
accessTokenLifetimeSecondsHoe lank access tokens geldig is1800 (30 min)
identityTokenLifetimeSecondsHoe lank ID tokens geldig is300 (5 min)
authorizationCodeLifetimeSecondsHoe lank authorization codes vir uitruiling geldig is300 (5 min)
absoluteRefreshTokenLifetimeSecondsMaksimum lewenstyd van 'n refresh token ongeag aktiwiteit2592000 (30 dae)
slidingRefreshTokenLifetimeSecondsRefresh token-vervaldatum stel op by elke gebruik, tot by die absolute lewenstyd1296000 (15 dae)
Token lifetime configuration fields with numeric inputs for each lifetime setting

Stel token-lewenstye per client in

Afmelding-URI's

Clients kan beide agterkanaal- en voorkanaal-afmelding-URI's registreer. Enige of albei is opsioneel — stel op wat by hoe jou toepassing sy sessie verwyder pas.

InstellingBeskrywing
backChannelLogoutUriBediener-tot-bediener POST met 'n getekende afmelding-token. Betroubaar selfs as die gebruiker se blaaier vanlyn is.
frontChannelLogoutUriGetoon in 'n versteekte iframe tydens afmelding sodat die blaaier koekies en plaaslike berging kan verwyder.
frontChannelLogoutSessionRequiredWanneer aan, ontvang die afmelding-URL iss- en sid-navraagparameters sodat jou toepassing die afmelding met die spesifieke sessie kan korreleer.

Gebruik albei saam

Agterkanaal verseker die bediener word in kennis gestel; voorkanaal verwyder die blaaier. Die meeste toepassings baat by die opstel van albei.

MFA-beleid

Elke client het sy eie MFA-beleid, gestel op die client se <strong>Sekuriteit</strong>-oortjie. Die MFA-beleid-aftreklys bied drie opsies:

BeleidGedrag
GedeaktiveerMFA word nooit vir hierdie client gevra nie
GeaktiveerGebruikers kan opsioneel by MFA inskakel; hulle word gevra as hulle ingeskakel is
VereisAlle gebruikers moet MFA voltooi om deur hierdie client te verifieer
MFA policy dropdown showing Disabled, Enabled, and Required options on the client configuration page

Per-client MFA-beleid

Enterprise SSO

Enterprise SSO laat u huurders hul eie identiteitsverskaffer bring. Authagonal ondersteun SAML 2.0 en OIDC-federasie met domeingebaseerde roering, sodat gebruikers outomaties na die korrekte IdP herlei word op grond van hul e-posadres.

SSO domain routing flow: shows how email domains are matched to SAML or OIDC identity providers

Domeingebaseerde SSO-roering

SAML 2.0-verbindings

Om 'n SAML-verbinding te skep, navigeer na die SSO-bladsy en kies die SAML-oortjie. Verskaf die volgende:

VeldBeskrywing
connectionName'n Leesbare naam vir hierdie verbinding (bv. "Acme Corp Okta")
entityIdJou SP-entiteit-ID. Registreer presies hierdie waarde by jou IdP as die toepassing se Identifier (Entity ID); assertions moet dit as die Audience noem
metadataLocationURL na die IdP se SAML-metadata-XML-dokument
metadataXmlGeplakte IdP-metadata-XML, vir IdP's sonder 'n metadata-URL (Google Workspace) of waarvan die URL nie vanaf die internet bereikbaar is nie. Verskaf óf dit óf metadataLocation, nie albei nie
nameIdFormatOpsionele NameID-formaat wat van die IdP gevra word. Laat weg vir die emailAddress-verstek, of stel "none" om NameIDPolicy heeltemal weg te laat (aanbeveel vir ADFS)
allowedDomainsE-posdomeine wat na hierdie verbinding geroeteer word (bv. acme.com). Gestel deur die API; die portaal wys hulle op die verbindingskaart en op die Domeinroetering-oortjie

Wanneer u die verbinding stoor, haal Authagonal die metadata-dokument op en voer die IdP se handtekeningsertifikaat, SSO-eindpunt-URL en naam-identifikasieformaat in. Die metadata word periodiek verfris om sertifikaatrotasies op te spoor.

SAML connection creation form with fields for connection name, SP entity ID, and IdP metadata

Skep 'n SAML 2.0 SSO-verbinding

OIDC-verbindings

Om 'n OIDC-federasieverbinding te skep, kies die OIDC-oortjie en verskaf:

VeldBeskrywing
connectionName'n Leesbare naam vir hierdie verbinding
metadataLocationDie OpenID Connect-ontdekkings-URL (bv. https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration)
clientIdDie client ID geregistreer by die eksterne IdP vir hierdie federasie
clientSecretDie client secret vir die eksterne IdP-registrasie
allowedDomainsE-posdomeine wat na hierdie verbinding geroeteer word (bv. acme.com). Gestel deur die API; die portaal wys hulle op die verbindingskaart en op die Domeinroetering-oortjie
OIDC connection creation form with fields for connection name, discovery URL, client ID, and client secret

Skep 'n OIDC-federasieverbinding

Domeinroering

Domeinroering herlei gebruikers outomaties na die korrekte identiteitsverskaffer op grond van hul e-posdomein. Wanneer 'n gebruiker hul e-pos op die aanmeldingsbladsy invoer, kontroleer Authagonal of die domeingedeelte (bv. acme.com) met die allowedDomains van enige SSO-verbinding ooreenstem. As dit wel die geval is, word die gebruiker naatloos na hul organisasie se IdP herlei.

E-posdomeinSSO-verskafferProtokol
acme.comAcme Corp OktaSAML 2.0
contoso.comContoso Azure ADOIDC
example.orgExample OneLoginSAML 2.0
Domain routing table showing email domains mapped to SSO connections with protocol type

Domeinroering karteer e-posdomeins na identiteitsverskaffers

SP-geïnisieerde vloei

SP-geïnisieerde vloei is die verstek — gebruikers begin by u aanmeldingsbladsy en word outomaties na die korrekte IdP geroeteer. Gebruikers kan ook direk na 'n spesifieke verbinding gekoppel word via /saml/{connectionId}/login of /oidc/{connectionId}/login.

JIT-voorsiening

Wanneer 'n gebruiker vir die eerste keer via SSO aanmeld en nog nie in u huurder bestaan nie, kan Authagonal hul rekening outomaties skep (Just-In-Time-voorsiening). JIT-voorsiening is standaard af: skakel dit per verbinding aan deur Aktiveer JIT-voorsiening te merk wanneer die verbinding geskep word.

Wanneer JIT-voorsiening gedeaktiveer is, kan slegs gebruikers wat vooraf voorsien is — via SCIM, die portaal se Gebruikers-bladsy, of die API — deur dié verbinding aanmeld. Onbekende gebruikers ontvang 'n access_denied-fout en word versoek om hul administrateur te kontak.

Instelling per verbinding

JIT-voorsiening word per SSO-verbinding beheer, nie huurder-breed nie. U kan een verbinding hê wat JIT toelaat (bv. vir 'n vennootorganisasie wat hul eie gebruikers bestuur) en 'n ander wat voorafvoorsiening vereis (bv. vir 'n ondernemingshuurder wat SCIM-sinchronisasie gebruik).

Toets voor ontplooiing

Toets SSO-verbindings in sandbakmodus voor u dit na produksiegebruikers ontplooi. Dit laat u toe om die IdP-konfigurasie, eienskapskartering en domeinroering te verifieer sonder om aktiewe outentiseringsvloeie te beïnvloed.

Organisasie-omvatte Verbindings

'n Verbinding kan ook aan een organisasie binne jou huurder behoort in plaas van aan die hele huurder. Dit word eers aangebied nadat daardie organisasie reeds bepaal is: deur 'n pasgemaakte domein wat daaraan vasgepen is, 'n organization-parameter op die aanmeldskakel, of 'n client wat op daardie een organisasie geregistreer is. Dit word nooit op 'n huurderwye aanmeldbladsy getoon nie. Watter van hierdie voorrang kry, word in daardie volgorde nagegaan, die hoogste eerste.

Aanmelding Skep Lidmaatskap

'n Gebruiker wat deur 'n organisasie-omvatte verbinding aanmeld, word outomaties 'n lid van daardie organisasie, op dieselfde manier as wat JIT-voorsiening hul rekening skep. Daar is geen aparte uitnodigingstap nie.

Domeinunikheid Geld per Omvang

'n E-posdomein kan een keer huurderwyd opgeëis word en, onafhanklik daarvan, nog een keer binne elke organisasie. acme.com kan na 'n huurderwye verbinding roeteer en ook, sodra 'n organisasie reeds gekies is, na daardie organisasie se eie verbinding. Wat dit nie kan doen nie, is om aan twee verbindings in dieselfde omvang te behoort. Authagonal verwerp dit wanneer jy die verbinding stoor.

Gebruikers

Die Gebruikers-bladsy laat u toe om alle eindgebruikers in u huurder te bestuur. U kan na gebruikers soek, hul besonderhede bekyk, nuwe gebruikers nooi en sien hoe elke gebruiker voorsien is.

Die soekbalk pas 'n presiese gebruikers-ID of e-pos, of 'n voorvoegsel van die e-pos, voornaam of van, en die filters Almal, Aktief en Inaktief vernou die lys volgens status. Soek word gedebons op 300ms sodat resultate opdateer soos u tik sonder om die API te oorweldig. Resultate is gepagineer op 50 gebruikers per bladsy; gebruik die navigasiebeheerders onderaan die tabel om tussen bladsye te beweeg.

Gebruikerstabel

Die gebruikerstabel vertoon die volgende kolomme vir elke gebruiker:

KolomBeskrywing
GebruikerDie gebruiker se naam (of e-pos wanneer geen naam gestel is nie), met hul e-pos daaronder en 'n Onbevestig-kenteken totdat die e-pos bevestig is
StatusActive of Inactive — dui aan of die rekening geaktiveer is
BronSCIM of Local — hoe die gebruiker geskep is
RolleDie rolle wat aan die gebruiker toegewys is
MFAEnabled wanneer multi-faktor-outentisering geregistreer is, andersins 'n strepie
GeskepDie datum waarop die gebruikersrekening geskep is
User list table with columns for user, status, source, roles, MFA, and created date

Die gebruikerslys met soekbalk en bladering

Gebruikers nooi

Klik Nooi gebruiker om iemand na u huurder te nooi. Hulle ontvang 'n e-pos om hul eie wagwoord te stel. Die vorm neem:

VeldBeskrywing
emailDie gebruiker se e-posadres (moet uniek wees binne die huurder)
firstNameDie gebruiker se voornaam
lastNameDie gebruiker se van
localeVoorkeurstaal. Stel die gebruiker se UI en e-postaal in; opsioneel, val terug op Engels.
organizationIdOpsionele organisasie om die gebruiker by te voeg, met hul rolle daarin. Gewys wanneer jou huurder organisasies het
Invite user form with email, first name, last name, and Language fields

Nooi 'n nuwe gebruiker

SCIM-voorsiene gebruikers

Gebruikers wat via SCIM geskep is, word gemerk met 'n "SCIM"-kenteken in die Bron-kolom. Hul lewensiklus (skepping, opdaterings en deaktivering) word deur die stroomop-identiteitsverskaffer bestuur.

Voorkeurstaal

Elke gebruiker het 'n voorkeurtaal wat hul gasheer-UI en die transaksionele e-posse wat Authagonal hulle stuur aandryf (verifikasie, wagwoordterugstelling, verwelkoming en meer). U kan dit instel wanneer u 'n gebruiker nooi en dit enige tyd van die gebruiker se besonderhede-bladsy verander. As 'n gebruiker geen voorkeurtaal het nie, val Authagonal terug op Engels. Die kieser bied alle ondersteunde tale: Engels, Chinees (Vereenvoudig), Duits, Frans, Spaans, Viëtnamees, Portugees, Japannees, Arabies, Hindi en Afrikaans.

User detail edit form with profile fields including a preferred Language selector

Stel 'n gebruiker se voorkeurstaal in op die besonderhede-bladsy

Gebruikerbesonderhede

Klik enige ry in die gebruikerslys om die besonderhede-bladsy oop te maak. Van daar kan u profieldata wysig, rolle bestuur, MFA teruginstel, pasgemaakte eienskappe hersien en die gebruiker skrap.

User detail page showing profile fields, status, assigned roles, and custom attributes

Profiel

Wysig e-pos, voor-/van, telefoon, maatskappy, taal, eksterne ID en skakel die gebruiker se aktiewe vlag. Om die e-pos of die vlag vir bevestigde e-pos te verander, is 'n admin of eienaar nodig. E-posveranderinge moet uniek bly binne die huurder; die API gee email_already_in_use terug indien beset.

Rolle

Ken rolle wat op die Rolle-bladsy gedefinieer is toe en herroep dit. Toegewysde rolle word as die roles-eis in ID- en access tokens uitgereik wanneer die client die roles-scope versoek.

Multi-faktor-outentisering

Sien elke MFA-geloofsbrief geregistreer vir die gebruiker (outentiseerder-app (TOTP), WebAuthn/toegangssleutels en herstelkodes), elk met sy eie geregistreerde/laas-gebruikte tydstempels. Verwyder individuele geloofsbriewe, of stel alle MFA terug; albei vereis 'n admin of eienaar. Terugstelling dwing die gebruiker om by die volgende aanmelding opnuut te registreer.

Pasgemaakte eienskappe

Willekeurige sleutel/waarde-data geheg aan die gebruiker. Sleutels moet uniek wees. Eienskappe word blootgestel via die gebruikersprofiel-API en SCIM, en kan na access-token-eise gekarteer word deur 'n pasgemaakte scope se userClaims te konfigureer.

Organisasie

Die organisasie waaraan hierdie gebruiker behoort. Dit is 'n vryteks-identifiseerder van u eie, uitgereik as die org_id-eis op hul tokens en op /connect/userinfo onder die profile-scope. Authagonal lei dit nooit self af nie: dit word deur u voorsieningstoepassing gestel, deur die SCIM-geloofsbrief wat die gebruiker geskep het, of hier met die hand.

Die skakel langs die veld lys almal wat dit deel, en dieselfde filter is op die API beskikbaar as GET /api/v1/users?organizationId=. Gebruik dit om te bepaal wie aan 'n gegewe klant behoort sonder om deur die hele gids te blaai.

Skrap gebruiker

Verwyder die gebruiker en al hul MFA-geloofsbriewe permanent. Tik die gebruiker se e-pos om te bevestig — dit kan nie ongedaan gemaak word nie.

Groepe

Groepe laat u toe om gebruikers te organiseer en groeplidmaatskap in tokens in te sluit. Groepe kan handmatig in die portaal geskep word of outomaties via SCIM uit 'n eksterne identiteitsverskaffer voorsien word.

Groeplys

Groepe word gelys op die Groepe-oortjie van die SCIM-bladsy, met die volgende inligting:

KolomBeskrywing
GroepnaamDie vertoonaam van die groep
LedeDie aantal gebruikers wat tans in die groep is
BronSCIM of Manual — hoe die groep geskep is
GeskepDie datum waarop die groep geskep is
Groups list table showing group name, member count, source badge, granted roles, and created date

Groeplys met bronindikators

'n Groep skep

Klik Nuwe Groep en voer 'n Vertoonaam vir die groep in. Groepname moet beskrywend en uniek wees binne u huurder (bv. "Engineering", "Billing Admins", "Beta Testers").

Groepbesonderhede en lede

Klik enige groep om die besonderhede-aansig oop te maak. Hier kan u alle huidige lede sien en lidmaatskap bestuur:

  • Voeg lede by: soek 'n gebruiker op e-pos of naam en voeg hulle by die groep.
  • Verwyder lede: klik die verwyderknoppie langs enige lid en bevestig. Enige rolle wat deur die groep toegeken is, word herroep.
Group detail view showing the member list, a user search to add members, and the roles the group grants

Bestuur groeplidmaatskap in die besonderhede-aansig

Groepe in tokens

Wanneer Groepe in Tokens op 'n client geaktiveer is en die groups-scope versoek word, sluit uitgereikte tokens 'n groups-eis in wat die vertoonname van die gebruiker se groepe lys:

groups claim
{
  "sub": "user-123",
  "email": "[email protected]",
  "groups": ["Engineering", "Beta Testers"]
}

Aktiveer per client

Die Groepe in Tokens-instelling word op elke client afsonderlik gekonfigureer, op die client se Algemeen-oortjie. Die client moet ook die groups-scope toelaat.

Rolle

Rolle ondersteun rolgebaseerde toegangsbeheer (RBAC) in u toepassing. Definieer rolle in Authagonal, wys dit aan gebruikers toe en gebruik die roles-eis in tokens om magtiging in u toepassingslogika af te dwing.

Rolle bestuur

Die Rolle-bladsy vertoon 'n tabel van alle gedefinieerde rolle met inlyn-redigering. Elke rol het:

KolomBeskrywing
Naam'n Unieke identifiseerder vir die rol (bv. "admin", "editor", "viewer")
Beskrywing'n Leesbare beskrywing van wat die rol verleen
GeskepDie datum waarop die rol geskep is

'n Rol skep

Klik Nuwe Rol en verskaf 'n naam en beskrywing. Rolname moet bondig wees en 'n konsekwente naamkonvensie in u toepassing volg (bv. kleinletters met koppeltekens: billing-admin).

Inlyn-redigering

Rolle ondersteun inlyn-redigering direk in die tabel. Klik die potloodikoon op enige rol om wysigingsmodus te betree — die naam- en beskrywingsvelde word redigeerbaar. Verander die waardes en klik dan die regmerkikoon om te stoor. Veranderinge tree onmiddellik in werking.

'n Rol skrap

Klik die skrapikoon op enige rol om dit te verwyder. U sal gevra word om te bevestig voordat die rol permanent geskrap word. Die verwyder van 'n rol maak bestaande tokens nie terugwerkend ongeldig nie — die rol sal afwesig wees van nuwe tokens wat na skrapping uitgereik word.

Roles table with inline editing active, showing editable name and description fields with save and cancel icons

Inlyn-redigering van rolle in die rollentabel

Rolle in tokens

Rolle wat aan 'n gebruiker toegewys is, word as 'n roles-eis in ID- en access tokens ingesluit wanneer die client die roles-scope versoek. U toepassing kan hierdie eis lees om magtigingsbesluite te neem:

roles claim in ID token
{
  "sub": "user-123",
  "email": "[email protected]",
  "roles": ["admin", "billing-admin"]
}

SCIM-voorsiening

SCIM 2.0 (System for Cross-domain Identity Management) maak outomatiese gebruiker- en groepinrigting moontlik vanaf ondernemingsidentiteitsverskaffers soos Okta, Azure AD, OneLogin en JumpCloud. Wanneer dit opgestel is, word gebruikersrekeninge en groeplidmaatskappe outomaties gesinkroniseer vanaf die stroomop-IdP na jou Authagonal-huurder.

SCIM provisioning flow: shows user lifecycle events flowing from enterprise IdP through Authagonal SCIM API to your app via TCC webhooks

SCIM-gebruikerslewensiklus-sinkronisasie met stroomaf-inrigting

Opstelstappe

Volg hierdie stappe om SCIM-inrigting vir 'n client te aktiveer:

  1. Kies die client-toepassing — Kies die OAuth-client waaraan SCIM-inrigting gekoppel sal word.
  2. Genereer 'n SCIM-token — Verskaf 'n beskrywing en 'n verstryktermyn in dae, en genereer dan die token.
  3. Kopieer die token onmiddellik — Die rou token-waarde word slegs een keer vertoon. Kopieer dit voor jy die dialoog sluit.
  4. Stel jou IdP op — In jou identiteitsverskaffer se SCIM-instellings, voer die basis-URL en bearer token in.
  5. Toets gebruikersinkronisasie — Aktiveer 'n toetssinkronisasie vanuit jou IdP en verifieer dat gebruikers in die Authagonal-portaal verskyn.

SCIM-basis-URL

Stel jou identiteitsverskaffer op met die volgende basis-URL:

SCIM Base URL
https://{slug}.authagonal.io/scim/v2

Vervang {slug} met jou huurder se slug.

SCIM configuration page showing client selector, token generation form, and base URL

SCIM-opstelbladsy met tokengenerering

Tokenbestuur

SCIM-tokens verifieer inrigtingversoeke vanaf jou IdP. Jy kan meerdere tokens per client bestuur:

VeldBeskrywing
Beskrywing'n Etiket om die token te identifiseer (bv. "Okta Production SCIM")
VervaldatumToken-leeftyd in dae (1 tot 3650, verstek 365).
StatusAktiewe tokens is in gebruik. Herroepte tokens vertoon 'n Revoked kenteken en kan nie meer versoeke verifieer nie.

Om 'n token te herroep, klik die Herroep-knoppie langs dit. Herroepte tokens bly in die lys sigbaar vir ouditeringsdoeleindes, maar stop onmiddellik om versoeke te aanvaar.

SCIM token list showing active and revoked tokens with description, expiry date, and revoke button

Tokenbestuur met aktiewe en herroepte tokenaanduidings

Kopieer Token Onmiddellik

Die rou SCIM-token word slegs een keer gewys wanneer dit geskep word. Kopieer dit onmiddellik — dit kan nie later herwin word nie. As jy die token verloor, moet jy 'n nuwe een genereer en jou IdP-konfigurasie bywerk.

Konnektiwiteit Toets

Verifieer dat jou SCIM-integrasie werk deur die ServiceProviderConfig-endpoint te bevraagteken:

Test SCIM connectivity
curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://acme.authagonal.io/scim/v2/ServiceProviderConfig

'n Suksesvolle respons gee 'n JSON-dokument terug wat die ondersteunde SCIM-funksies beskryf: PATCH en filtrering word ondersteun, terwyl massaoperasies, wagwoordwysigings, sortering en ETags nie ondersteun word nie.

Voorkeurstaal

Die SCIM-preferredLanguage-attribuut (met terugval na locale) karteer na die gebruiker se gestoorde taal. SSO-gebruikers wat via SCIM voorsien is, ontvang outomaties gelokaliseerde e-posse in die taal wat hul IdP stuur.

Wat 'n geloofsbrief kan sien

'n SCIM-geloofsbrief sien slegs die gebruikers en groepe wat dit voorsien het. Om 'n gebruiker wat 'n ander konnektor geskep het te lees, op te dateer of te skrap antwoord 404, 'n lys gee slegs sy eie terug, en 'n groep se lidmaatskap mag slegs gebruikers noem wat dieselfde konnektor voorsien het. Rekeninge wat op enige ander manier geskep is, deur 'n administrateur, deur selfdiens-registrasie of deur SSO se net-betyds-voorsiening, is heeltemal onsigbaar vir SCIM.

Daardie grens is per client, nie per token nie. Twee geloofsbriewe wat teen dieselfde client uitgereik is, is een identiteit met twee geheime, en elkeen kan wysig wat die ander geskep het. Gee wedersyds onvertroude konnektors elk 'n eie client. externalId word op dieselfde manier begrens, dus mag twee konnektors elk ext-001 vir verskillende mense gebruik sonder om te bots.

Ontvoorsiening

DELETE /scim/v2/Users/{id} deaktiveer die rekening en merk dit as geskrap. Die rekord word behou, soos RFC 7644 toelaat, maar dit antwoord 404 op elke daaropvolgende operasie en word uit lyste weggelaat. Hul MFA-registrasies en groeplidmaatskappe word uitgevee, hul externalId-kartering word vrygestel, en enige uitgereikte tokens word herroep, sodat toegang onmiddellik eindig eerder as by die volgende token se verstryking.

As dieselfde persoon later weer aangestel en herskep word, kry hulle 'n nuwe gebruiker-ID. Identifiseerders word nooit hergebruik nie: die ID is die subject in elke token wat jy nog ooit uitgereik het, dus sou hergebruik daarvan die nuwe werknemer stilweg die vorige houer se geskiedenis gee by elke toepassing wat dit vertrou.

Gesinkroniseerde gebruikers met 'n organisasie merk

SCIM bied geen manier vir 'n konnektor om te sê watter van jou klante dit sinkroniseer nie. Kern-SCIM definieer geen organisasie-attribuut nie, dus vertel 'n gewone gebruikerskepping jou die persoon se naam en e-pos en niks oor aan wie hulle behoort nie. As verskeie klante in jou huurder in voorsien, kom hul gebruikers ononderskeibaar aan.

Die geloofsbrief antwoord dit in plaas van die versoek. Wanneer jy 'n SCIM-token skep, kies een van jou huurder se organisasies onder Organisasie (die kieser verskyn sodra jou huurder organisasies het). Elke gebruiker wat deur daardie token voorsien word, word 'n aktiewe lid van daardie organisasie en dra dit van dan af as die org_id-eis op hul tokens. Reik een geloofsbrief per klant uit teen dieselfde client, en hul gesinkroniseerde gebruikers kom korrek toegeskryf uit sonder 'n client-registrasie elk. Laat dit leeg en gebruikers bly ongemerk.

Merk is nie isolasie nie

Eienaarskap word per client afgedwing, nie per token nie. Twee geloofsbriewe op dieselfde client is een identiteit met twee geheime: elkeen kan die gebruikers wat die ander geskep het lees, hernoem, deaktiveer en skrap. Dit is goed wanneer jy al die geloofsbriewe self hou. As elke klant se eie IT-span hulle eie hou, gee hulle elk 'n client, en stel die organisasie ook op hul geloofsbrief.

Die merker word toegepas wanneer die gebruiker geskep word en nooit by 'n latere opdatering nie, dus kan 'n roetine inkrementele sinkronisasie nie stilweg 'n bestaande rekening skuif nie. As jy ook 'n voorsieningstoepassing gebruik, wen 'n uitdruklike geloofsbrief-merker: 'n /try-respons vul slegs 'n organisasie wat nog leeg is.

Ondersteunde skemas

Ons implementeer die kern-SCIM 2.0 User- en Group-skemas (RFC 7643). Ondersteunde gebruiker-attribute is userName, name.givenName, name.familyName, displayName, emails, active, externalId en preferredLanguage / locale.

Die enterprise user-uitbreiding is nie geïmplementeer nie, dus word department, manager, employeeNumber, costCenter, division en organization aanvaar en geïgnoreer eerder as gestoor, by skep, vervang en PATCH gelyk. Entra en Okta karteer albei sommige hiervan by verstek, dus hoef jy hulle nie uit jou attribuutkartering te verwyder nie. Om 'n gebruiker aan een van jou klante toe te skryf, stel eerder die organisasie op die SCIM-geloofsbrief: die enterprise organization-attribuut word deur jou klant se identiteitsverskaffer beweer, en word doelbewus nie hul org_id nie.

OAuth Scopes

Scopes laat clients toe om spesifieke dele van 'n gebruiker se data of toestemmings te versoek. Authagonal ondersteun beide standaard OIDC-scopes en pasgemaakte scopes wat jy vir jou API's definieer.

Ingeboude Scopes

ScopeBeskrywing
openidVereis vir enige OpenID Connect-vloei. Stel 'n ID token uit.
profileGee standaard profielclaims terug (name, given_name, family_name, locale, org_name).
emailGee die gebruiker se e-posadres en verifikasiestatus terug.
phoneGee die gebruiker se telefoonnommer terug (phone_number).
offline_accessStel 'n refresh token uit saam met die access token.
rolesStel die gebruiker se roles-eis vry. Sonder hierdie scope word rolle nie uitgereik nie.
groupsStel die gebruiker se groups-eis vry (SCIM-groeplidmaatskap). Sonder hierdie scope word groepe nie uitgereik nie.

Pasgemaakte Scopes

Definieer jou eie scopes op die Scopes-bladsy. Elke scope beskryf 'n toestemming of hulpbron wat 'n client kan versoek (byvoorbeeld billing.read, orders.write).

Custom scope creation form with name, display name, description and User Claims fields
VeldBeskrywing
nameDie scope-identifiseerder gestuur in token-versoeke (bv. billing.read).
displayNameLeesbare etiket gewys op die toestemmingskerm.
descriptionLanger verduideliking gewys onder die vertoonnaam op toestemming.
userClaimsEkstra eise bygevoeg by die access token en ID token wanneer hierdie scope toegestaan word.
showInDiscoveryDocumentIndien geaktiveer, verskyn die scope in /.well-known/openid-configuration.
emphasizeMerk die scope op die toestemmingskerm as sensitief.
requiredVerhoed die gebruiker om die scope tydens toestemming te ontselekteer.
groupToestemmingsgroep: scopes wat 'n opskrif deel, verskyn saam op die toestemmingskerm onder een merkblokkie. Slegs aanbieding.
allowedRolesRolle wat 'n gebruiker moet hê om hierdie scope toegeken te kry. Leeg laat almal toe; by 'n gebruiker sonder een van hierdie rolle word die scope uit hul token weggelaat eerder as dat hulle geweier word.

Toestemmingsintegrasie

Clients met RequireConsent: true versoek die gebruiker se toestemming by die eerste versoek. Die skrapping van 'n scope herroep nie reeds-uitgestuurde tokens nie — herroep dit uitdruklik indien nodig.

Pasgemaakte eise op tokens

Pasgemaakte eise het twee helftes. Die bron is per-gebruiker-data: elke AuthUser het 'n customAttributes-woordeboek wat jy kan bevolk vanaf die Portaal (Gebruikers → gebruiker → Pasgemaakte Attribute), via SCIM, of via 'n TCC-inrigtinghaak. Die vrystelling is per-scope: elke scope se userClaims-lys noem die sleutels wat dit toelaat om die bediener te verlaat.

Wanneer 'n client scopes versoek, deurstap Authagonal die toegestane scopes, voeg hul userClaims-lyste saam, en stuur slegs die sleutels van die gebruiker se customAttributes uit. Onbekende sleutels word stilweg gedroppeer — 'n client kan nie 'n attribuut lees deur die naam te raai nie. Standaard OIDC-eise (sub, email, name, ens.) volg die spesifikasie en is nie onderhewig aan die witlys nie.

Example: project-scope claims on an access token
# 1. On the user (Portal → Users → {user} → Custom Attributes)
department = "engineering"
employee_id = "E-1042"
seat_tier = "enterprise"

# 2. On a custom scope (Portal → Scopes → projects.read)
name        = "projects.read"
userClaims  = ["department", "seat_tier"]   # <-- whitelist

# 3. Client requests scope=openid projects.read
# Decoded access token (relevant fields only):
{
  "sub": "u-9b…",
  "scope": "openid projects.read",
  "department": "engineering",
  "seat_tier":  "enterprise"
  // employee_id is NOT emitted; it's not in the whitelist for any granted scope.
}

Federasieclaims vul gapings per sessie

Wanneer 'n gebruiker via 'n stroomop-IdP (SAML/OIDC SSO) aanmeld, vloei per-sessie-claims wat van die IdP ontvang word, byvoorbeeld 'n department-attribuut gekarteer vanuit 'n SAML-bewering, deur dieselfde scope-witlys maar vul slegs gapings: by 'n sleutelbotsing wen die gestoorde customAttributes-waarde. Hulle word uitgestuur op hierdie sessie se tokens (en oorleef refresh-rotasies) sonder dat hulle teruggeskryf word na die gebruikerrekord.

Scopes aan Clients Toewys

Voeg toegelate scopes by op die Clients → Scopes & Grants-oortjie. 'n Client kan slegs scopes versoek wat toegestaan is; onbekende scopes word verwerp met invalid_scope.

Handelsmerk

Pas die voorkoms van jou huurder se aanmeldbladsye aan. Handelsmerk-instellings laat jou toe om die verifikasie-ervaring op jou produk se visuele identiteit te stem — van logos en kleure tot gevorderde CSS-oorskrywings.

Voorkoms

InstellingBeskrywing
appNameDie toepassingsnaam gewys in die aanmeldbladsyopskrif (wanneer geen logo gestel is nie) en in transaksionele e-posse
logoUrlURL na jou logo-afbeelding. Gewys bo-aan die aanmeldbladsy. Aanbevole grootte: 200x60px of soortgelyke verhouding.
primaryColorDie primêre handelsmerkkleur gebruik vir knoppies, skakels en fokusstatus. Stel in via 'n kleurkieser of hex-invoer. 'n Regstreekse voorskou werk by as jy die waarde verander.
customCssUrlURL na 'n CSS-lêer wat na die verstekstyle gelaai word. Dit moet vanaf dieselfde oorsprong as die aanmeldbladsy bedien word; 'n URL op enige ander oorsprong word geïgnoreer.
Branding appearance settings with app name input, logo URL field, color picker with hex input, and custom CSS URL field

Voorkoms-instellings met regstreekse kleurvoorskou

Kontakinligting

InstellingBeskrywing
supportEmail'n Ondersteunings-e-posadres gewys op aanmeldbladsye. Gebruikers sien dit wanneer hulle hulp met hul rekening benodig.

Aanmeldbladsywisselaars

Beheer watter elemente op jou huurder se aanmeldbladsy verskyn:

WisselaarBeskrywingVerstek
showForgotPasswordVertoon die "Wagwoord vergeet?" skakel op die aanmeldvormAan
showRegistrationVertoon die "Registreer" skakel vir selfdiensgebruikersregistrasieAan
poweredByVertoon die "Aangedryf deur Authagonal" kenteken onder-aan die aanmeldbladsyAan
A customized login page showing a branded logo, custom primary color on the sign-in button, and support email in the footer

Voorbeeld aanmeldbladsy met pasgemaakte handelsmerk toegepas

Pasgemaakte CSS

Vir volle beheer oor die aanmeldbladsyvoorkoms, verskaf 'n CSS-lêer-URL in jou handelsmerk-instellings. Die lêer word na die verstekstyle gelaai, sodat jou reëls voorrang het. Die URL moet op dieselfde oorsprong as die aanmeldbladsy wees; stylblaaie van ander oorspronge word nie gelaai nie.

CSS-pasgemaakte Eienskappe

Die aanmeldbladsy ondersteun CSS-pasgemaakte eienskappe (veranderlikes) vir gewone oorskrywings. Stel dit in jou CSS-lêer in om kleure, lettertipes en vorm te verander sonder om komplekse selektore te skryf.
/* your-custom-styles.css */
:root {
--auth-bg: #1a1a2e;
--auth-card-bg: #16213e;
--auth-heading: #e0e0e0;
--auth-radius: 12px;
--auth-font: 'Inter', sans-serif;
}
VeranderlikeBeskrywingVerstek
--auth-bgBladsy-agtergrondkleur#f3f4f6
--auth-card-bgAanmeldkaart-agtergrondwhite
--auth-headingOpskrif-tekskleur#111827
--auth-radiusKaartgrensradius0.5rem
--auth-fontLettertipefamilieinherit

Donkermodus

Die aanmeldtoepassing word gestuur met lig-, donker- en stelseltemas. Die Donker Modus-instelling op die Handelsmerk-bladsy kies die verstek: af, outo (volg die stelselvoorkeur, die verstek) of forseer. Gebruikers kan steeds vanuit 'n wisselaar op die aanmeldbladsy kies; die keuse bly behoue oor sessies. Wanneer op system gestel, volg die SPA prefers-color-scheme regstreeks.

Ligwaardes word verklaar by :root; donker-oorskrywings is begrens na .dark. Huurder-handelsmerk ingestel via customCssUrl wen altyd — sodat jou kleure behoue bly ongeag die gebruiker se tema.

Elementselektore

Vir meer fynkorrelige beheer, rig spesifieke elemente met data-auth-attribute. Hierdie selektore is stabiel oor opdaterings — hulle sal nie breek wanneer ons interne klasname verander nie.
SelektoorElement
[data-auth="page"]Volbladsy-agtergrondhouer
[data-auth="header"]Logo- en toepassingsnaamarea
[data-auth="logo"]Logo-afbeelding
[data-auth="app-name"]Toepassingsnaamopskrif (wanneer geen logo ingestel is nie)
[data-auth="content"]Hoofinhoudarea (vorms, boodskappe)
[data-auth="login-form"]Aanmeldvorm-element
[data-auth="email-field"]E-pos-invoerhouer
[data-auth="password-field"]Wagwoord-invoerhouer
[data-auth="submit-button"]Aanmeldknoppie
[data-auth="languages"]Taalselektorbalk

Instellings

Stel huurder-wye sekuriteitsbeleide, webhooks en omgewingsinstellings in. Hierdie instellings geld globaal vir alle clients, tensy op client-vlak oorskryf.

Wagwoordbeleid

Definieer die wagwoordkompleksiteitsvereistes vir alle gebruikers in jou huurder, onder Gebruikers → Instellings:

InstellingReeksVerstek
minPasswordLength6 – 1288
requireUppercaseAan / AfAan
requireLowercaseAan / AfAan
requireDigitAan / AfAan
requireSpecialCharAan / AfAan
Password policy settings showing minimum length slider and toggle switches for character requirements

Wagwoordbeleid-konfigurasie

MFA-beleid

Die huurder-wye MFA-beleid, gestel onder Gebruikers → Instellings, stel die standaard multi-faktor-stawingsgedrag. Individuele clients kan hierdie instelling oorskryf.

BeleidGedrag
DisabledMFA is nie beskikbaar nie. Gebruikers kan nie in MFA inskryf nie.
EnabledMFA is opsioneel. Gebruikers kan kies om in te skryf en sal tydens aanmelding gevra word indien ingeskryf.
RequiredMFA is verpligtend. Alle gebruikers moet in MFA inskryf en 'n tweede faktor by elke aanmelding voltooi.

Sessie en Uitsluit

Beheer sessieduur en rekeninguitsluitgedrag:

InstellingReeksVerstek
sessionLifetimeMinutes5 – 43,200 (30 dae)60
maxFailedAttempts1 – 1005
lockoutDurationMinutes1 – 1,440 (24 uur)10
Session and lockout settings with numeric inputs for session lifetime, max failed attempts, and lockout duration

Sessie- en uitsluit-konfigurasie

Webhooks

Webhooks laat jou in reële tyd op stawingsgebeure reageer. Twee gebeure (onUserAuthenticated, onTokenIssued) is afdwingbaar — by verstek vuur hulle asinchronies en blokkeer nie die gebruiker nie, maar jy kan afdwinging per geleentheid aktiveer sodat 'n nie-2xx-respons of {"allow": false}-liggaam die aksie verwerp. Die oorblywende gebeure is kennisgewings — altyd brand-en-vergeet, blokkeer nooit.

GeleentheidTipeBeskrywing
onUserAuthenticatedAfdwingbaarWord afgevuur na 'n suksesvolle aanmelding. Verstek is brand-en-vergeet sodat aanmeldlatensie onaangetas is. Skakel <code>webhookEnforceUserAuthenticated</code> om dit blokkeerend te maak — 'n nie-2xx-respons of <code>{"allow": false}</code>-liggaam verwerp dan die aanmelding.
onTokenIssuedAfdwingbaarWord afgevuur voordat tokens gemunt word (authorization_code, refresh_token, client_credentials). Verstek is brand-en-vergeet. Skakel <code>webhookEnforceTokenIssued</code> om dit blokkeerend te maak — 'n nie-2xx-respons of <code>{"allow": false}</code>-liggaam verhinder dan token-uitreiking.
onUserCreatedKennisgewingBrand-en-vergeet-kennisgewing wanneer 'n nuwe gebruiker registreer of via SCIM voorsien word.
onUserUpdatedKennisgewingBrand-en-vergeet-kennisgewing wanneer 'n gebruikersrekord bygewerk word (profielveranderinge, rolveranderinge, SCIM-bywerkte).
onUserDeletedKennisgewingBrand-en-vergeet-kennisgewing wanneer 'n gebruiker geskrap word, hetsy via Portaal/SCIM of deur bewaarbeleid.
onLoginFailedKennisgewingBrand-en-vergeet-kennisgewing wanneer 'n aanmeldpoging misluk weens slegte geloofsbriewe, uitsluit of beleidsverwerping.

Bykomende webhook-instellings:

InstellingReeksVerstekBeskrywing
webhookTimeoutSeconds1 – 305Maksimum tyd om op 'n afdwinging-webhook-respons te wag voordat dit verval
webhookFailOpenAan / AfAanWanneer geaktiveer, as 'n afdwinging-webhook onbereikbaar is of verval, word die bewerking toegelaat om voort te gaan
Webhook configuration section showing URL inputs for each event type, timeout slider, and fail-open toggle

Webhook-geleentheid-konfigurasie

Afdwinging-webhook-beskikbaarheid

Afdwinging-webhooks kan stawingsvloei blokkeer. As jou webhook-eindpunt uitval en webhookFailOpen gedeaktiveer is, sal geen gebruikers kan aanmeld nie. Gebruik misluk-oop-modus tensy jy streng nakomingsvereistes het wat blokkering by webhook-mislukking vereis.

Webhooks verifieer

Sodra enige webhook-URL opgestel is, munt Authagonal 'n per-huurder ondertekeninggeheim ('n whsec_… waarde wat slegs-leesbaar onder Instellings → Webhooks gewys word). Elke uitgaande aflewering dra 'n X-Authagonal-Signature: t=<unix>,v1=<hex>-opskrif, waar v1 HMAC-SHA256(secret, "{t}.{body}") is, bereken oor die rou versoekliggaam. Herbereken dit op jou eindpunt en vergelyk met konstante tyd om te bevestig die versoek het werklik van Authagonal gekom en nie gemanipuleer is nie — en verwerp afleveringe waarvan die t te oud is om herspeling te blokkeer.

Verifieer 'n webhook (Node.js)
import crypto from 'node:crypto';

// rawBody MUST be the exact bytes Authagonal sent: verify before any JSON re-serialization.
function verifyAuthagonalWebhook(signatureHeader, rawBody, signingSecret) {
  const parts = Object.fromEntries(signatureHeader.split(',').map((p) => p.split('=')));
  const { t, v1 } = parts;

  // Replay protection: reject deliveries older than 5 minutes.
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;

  const expected = crypto
    .createHmac('sha256', signingSecret)
    .update(`${t}.${rawBody}`)
    .digest('hex');

  return v1.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}

Die ondertekeninggeheim roteer

Gebruik Hergenereer langs die ondertekeninggeheim om dit te roteer — byvoorbeeld na 'n vermoedelike lekkasie. Die vorige geheim word dadelik ongeldig gemaak, so werk jou verifieerder by met die nuwe waarde of lopende afleveringe sal hul handtekeningkontrole begin misluk.

Onderhoudvenster

Stel 'n voorkeur-onderhoudvenster in vir ontwrigtende bewerkings soos die skuif van jou huurder se data tussen berging-shards. Kies 'n UTC-uur (0–23); die portaal wys ook die ekwivalente tyd in jou plaaslike tydsone vir gemak.

Registrasie en toegang

Wie toegelaat word om 'n gebruiker in jou huurder te word, en onder watter voorwaardes hulle kan aanmeld.

InstellingVerstekBeskrywing
Publieke registrasieAanOf enigiemand hulself kan registreer. Om dit af te skakel, versteek die registrasiebladsy en verwerp die registrasie-API, wat saak maak: om net die skakel te versteek, sou die eindpunt oop laat. Gebruik dit wanneer jy gebruikers self deur SCIM, die API of uitnodigings voorsien.
Vereis e-posverifikasie om aan te meldAan'n Onbevestigde adres kan nie aanmeld nie. Skakel dit af as jou eie toepassing eerder self op verifikasie kontroleer; die email_verified-claim ry in albei gevalle steeds op die token, so jy behou die sein.
Dinamiese client-registrasieAfLaat 'n client toe om homself tydens looptyd onder RFC 7591 te registreer, wat is wat 'n KI-agent of MCP-koppelaar nodig het voordat dit 'n vloei kan begin. By verstek af, en om dit te aktiveer maak die deur vir jou huurder alleen oop. Registrasies bly nietemin tempo-beperk en vereis steeds PKCE en toestemming.
Portaal-MFA-beleidGedeaktiveerMulti-faktor vir jou eie span wat by die portaal aanmeld, onafhanklik van die beleid vir jou eindgebruikers gestel. Gedeaktiveer, by aanmelding aangebied, of vereis.
Maksimum gebruikersGeenDaar is standaard geen plafon op totale gebruikers nie, en geen plan stel een nie. Terwyl die huurder-eienaar se e-posadres ongeverifieer is, geld 'n tydelike plafon van 5 gebruikers; dit word permanent opgehef sodra die adres geverifieer is.

Bewaring van onaktiewe gebruikers

Deaktiveer opsioneel, en skrap dan, rekeninge wat ongebruik geraak het, sodat 'n gebruikersgids nie vir ewig slapende identiteite opgaar nie. Albei is af tensy jy hulle stel, en skrapping is permanent.

InstellingVerstekBeskrywing
Deaktiveer ná (dae van onaktiwiteit)NooitDeaktiveer 'n rekening wat so lank nie aangemeld het nie. Die rekord word gehou en kan weer geaktiveer word.
Skrap ná (dae van onaktiwiteit)NooitSkrap die rekening permanent. Dit kan nie ongedaan gemaak word nie, so stel die waarskuwingsvenster en webhook hieronder voordat jy dit aanskakel.
Waarskuwingsdae7Hoeveel dae voor 'n deaktivering of skrapping die waarskuwing-webhook vuur, wat jou tyd gee om in te gryp.
Bewaring-webhook-Waarheen daardie waarskuwings en die uitgevoerde aksies geplaas word, sodat jy die persoon in kennis kan stel of die rekening oop kan hou.

Oudit-uitvoer en afgeleë rugsteun

Twee maniere om jou data volgens 'n skedule uit te kry eerder as op versoek. Oudit-uitvoer stoot elke voltooide dag se ouditgebeure na 'n URL wat jy aanwys, onderteken sodat jy kan verifieer dat dit van ons af gekom het, om 'n SIEM of 'n nakomingsargief te voed. Afgeleë rugsteun stuur kopieë van jou daaglikse en weeklikse rugsteun na 'n bestemming wat jy beheer, met geen stawing, met basiese stawing, of met 'n bearer token. Oudit-uitvoer word op die Ouditlog-bladsy se Uitvoer-oortjie opgestel en afgeleë rugsteun op die Rugsteune-bladsy; albei is joune om te hou, onafhanklik van die rugsteun wat ons hou.

Sandput-omgewings

Die Omgewings-bladsy bestuur sandput-omgewings: benoemde, geïsoleerde omgewings met hul eie gebruikers, clients, ondertekeningsleutels, MFA-inskrywings en grants, elk bereikbaar by 'n aparte URL. Handelsmerk, plan en fakturering word met live gedeel. Gebruik hulle om konfigurasiewysigings, SSO-integrasies en webhook-eindpunte te toets sonder om aktiewe gebruikers te beïnvloed. Jy kan standaard tot 5 skep, en aktiewe sandput-gebruikers tel by jou MAU.

AksieBeskrywing
Voeg omgewing bySkep 'n nuwe omgewing. Die naam is 1 tot 20 kleinletters en syfers, en "live" is voorbehou. Die omgewing begin leeg: niks word van live gekopieer nie.
VerfrisVee die omgewing se data uit en stel dit terug na leeg.
SkrapSkrap die sandput-omgewing en al sy data permanent.

Elke omgewing is bereikbaar by {name}-{slug}.authagonal.io.

Environments page listing sandbox environments with their URLs and Refresh and Delete actions

Sandput-omgewingbeheer

Fakturering

Bestuur jou intekening en fakturering deur die portaal se Faktureringsbladsy. Hierdie bladsy gee jou 'n oorsig van jou huidige plan en bied toegang tot die Stripe-faktureringportaal vir die bestuur van betaalmetodes, fakture en planveranderings.

Intekenginligting

Die faktureringsbladsy toon jou huidige intekenbonderhede in 'n oogopslag. Jy sal 'n statuskenteken sien wat jou intekenstatus aandui — active, trialing, past_due, canceled of unpaid — saam met jou plannaam, die huidige faktureringstydperk (begin- en einddatums), en of jou intekening ingestel is om aan die einde van die huidige tydperk te kanselleer.

Bestuur Intekening

Klik die Bestuur Intekening-knoppie om die Stripe-faktureringportaal in 'n nuwe venster oop te maak. Van daar kan jy jou betaalmetodes werk by, fakture bekyk en aflaai, jou plan verander of jou intekening kanselleer.

As daar nog geen intekening bestaan nie, word 'n Stel Fakturering Op-aksie-oproep vertoon, wat jou deur die keuse van 'n plan en die invul van betalingsbesonderhede lei.

Billing page showing subscription status, plan name, billing period, and Manage Subscription button

Die faktureringsbladsy toon jou huidige intekenbonderhede en bied toegang tot Stripe

Betalingsekuriteit

Alle fakturering word deur Stripe hanteer. Jou betalingsinligting word nooit op Authagonal-bedieners gestoor nie.

Persoonlike Domeine

Bedien jou verifikasiebladsye vanaf jou eie domein (bv. auth.yourdomain.com) in plaas van die verstek {slug}.authagonal.io. Persoonlike domeine gee jou gebruikers 'n naatlose, handelsmerk-verifikasie-ervaring.

Voeg 'n Domein By

Voer die gasheernaam in wat jy wil gebruik in die domein-byvoegvorm (bv. auth.yourdomain.com). Sodra dit bygevoeg is, sal die domein in jou domeinlys verskyn met 'n pending_verification-status.

DNS-verifikasie

Skep die twee CNAME-rekords wat die portaal vir die domein wys, albei wat na {slug}.authagonal.io wys: een by die gasheernaam self, wat verkeer bedien en geproksie mag word, en een by _authagonal-challenge. gevolg deur die gasheernaam, wat eienaarskap bewys en slegs-DNS moet wees (nie geproksie nie). Sodra die rekords in plek is, klik Kontroleer DNS om te verifieer. Hangende domeine word ook outomaties weer nagegaan.

CNAME records
auth.yourdomain.com.                        CNAME  acme.authagonal.io.
_authagonal-challenge.auth.yourdomain.com.  CNAME  acme.authagonal.io.

DNS-verspreiding

DNS-verspreiding kan tot 48 uur neem. As verifikasie misluk, wag en probeer weer.

TLS-sertifikate

Sodra jou domein geverifieer is, benodig jy 'n TLS-sertifikaat sodat gebruikers veilig via HTTPS kan koppel. Authagonal ondersteun twee opsies:

Outomaties (cert-manager) — Authagonal stel TLS-sertifikate outomaties in en hernu dit deur cert-manager. Dit is die aanbevole opsie vir die meeste gebruikers. Geen verdere konfigurasie is nodig nie.

Bring Jou Eie (BYO) — Laai jou eie sertifikaat en private sleutel in PEM-formaat op. Hierdie opsie is nuttig as jou organisasie sertifikate van 'n spesifieke sertifikaatowerheid vereis. Sertifikaatverval word nagespoor sodat jy voor die verloping kan hernu.

Domeinstatus

Elke domein toon 'n statuskenteken wat sy huidige toestand aandui: pending_verification (DNS nog nie bevestig nie), verified (DNS bevestig, TLS hangende), of active (volledig operasioneel).

Domain list showing domains with status badges and verification controls

Die domeinlys toon elke persoonlike domein en sy huidige status

BYO certificate upload form with certificate and private key PEM fields

Laai jou eie TLS-sertifikaat en private sleutel in PEM-formaat op

BYO Sertifikaatvernuwing

Hou jou BYO-sertifikaat hernud. Vervalde sertifikate sal blaaier-sekuriteitsgewaarskuwings vir jou gebruikers veroorsaak.

Organisasies

'n Organisasie is 'n kliënt binne 'n huurder. Die huurder bly die isolasiegrens: een tabelvoorvoegsel en een handtekeningsleutel, met elke gasheer van die huurder as sy eie issuer. 'n Organisasie verdeel identiteit binne die huurder, sodat een huurder baie kliëntorganisasies kan bedien sonder 'n huurder per kliënt.

Organisasies staan langs pasgemaakte domeine (een domein kan aan 'n organisasie vasgepen word) en voorsieningsapps ('n voorsieningsapp kan 'n nuwe gebruiker met 'n organisasie merk). Sien die Multi-kliëntetoepassings-gids vir die volledige "een huurder, baie gebrandmerkte kliënte"-patroon waarvoor hierdie funksie bestaan.

Model en ids

Elke organisasie het 'n stabiele, onveranderlike id (in die vorm org_<32 hex>) wat as die org_id-token-claim uitgereik word, en 'n onveranderlike, huurder-unieke slug wat as org_slug uitgereik word en deur die organization-authorize-parameter aanvaar word. Ids en slugs deel een opsoekruimte: 'n slug wat gelyk is aan 'n ander organisasie se id word as 'n botsing geweier, presies soos 'n gewone duplikaat-slug.

VeldVeranderlikBeskrywing
idNeeDie org_id-claim. Gemaak as org_ + 'n GUID. Die onderstreep is nie in 'n slug toegelaat nie, so 'n nuwe id kan nooit met 'n slug bots nie.
slugNeeDie org_slug-claim, en wat die organization-parameter aanvaar. Onveranderlik omdat 'n relying party dit hardkodeer.
nameJaDie <code>org_name</code>-claim. Vrylik wysigbaar.
metadataJaVrye sleutel/waarde-pare wat deur die huurder beheer word. Word nooit op 'n token uitgereik nie, tensy 'n scope se claim-stel een uitdruklik vrystel.
brandingJsonJaJSON-objek wat veld vir veld oor die huurder se handelsmerk saamgevoeg word. Sien Handelsmerk-oorheersing hieronder.
domainsSlegs domein-eindpunteDie e-posdomeine wat die organisasie opgeëis het, elk met die DNS-rekord wat dit bewys. Slegs deur die domein-eindpunte hieronder verander, nooit deur 'n opdatering nie.

Lidmaatskappe

'n Lidmaatskap is die baie-tot-baie-koppeling tussen 'n gebruiker en 'n organisasie, een ry per (organisasie, gebruiker)-paar. 'n Gebruiker kan baie hê. Die lidmaatskapry, nie die ou per-gebruiker-organisasiemerker nie, magtig aanmelding as 'n organisasie.

StatusGee tokens?
invitedUitgenooi maar nog nie aanvaar nie. Magtig nie tokenuitreiking nie.
active'n Lid in goeie standing. Die enigste status wat tokenuitreiking magtig.
suspendedLidmaatskap onttrek sonder om die rekord te verwyder. Magtig nie tokenuitreiking nie.

'n Lidmaatskap se roles word uit die huurder se bestaande rolkatalogus geneem en met die roles-claim verenig, maar slegs wanneer die organisasie uitdruklik gekies is deur die versoek (sien Token-organisasiekeuse) en slegs uit 'n aktiewe lidmaatskapry. 'n Rol wat in een organisasie gehou word, bereik nooit 'n token wat vir 'n ander uitgereik is nie.

Uitnooi in 'n organisasie

POST /api/v1/users/invite aanvaar 'n opsionele organizationId en organizationRoles. Een oproep skep die rekening met 'n invited-lidmaatskap en stuur 'n uitnodigings-e-pos met die organisasie se handelsmerk. Die skakel maak oop op die organisasie se vasgepende pasgemaakte domein as dit een het. Wanneer die persoon aanvaar, word die lidmaatskap active. Om 'n organisasie te noem vereis 'n eienaar of admin.

SCIM-voorsiening in 'n organisasie

'n SCIM-token kan aan 'n organisasie gebind word (organizationId op POST /api/v1/scim/tokens, of die Organisasie-kieser wanneer 'n token geskep word). Die id moet 'n organisasie van die huurder noem. Elke gebruiker wat daardie token skep, word 'n active-lid en dra die organisasie as org_id. Die binding geld slegs by skepping, en dit bepaal lidmaatskap, nie toegang nie: twee tokens op een client sien steeds mekaar se gebruikers. Wanneer 'n gebruiker op enige manier uitgevee word, word hul lidmaatskappe verwyder.

Beleidsvlaggies

enabled (verstek aan): 'n gedeaktiveerde organisasie reik geen tokens vir homself uit nie, nagegaan by authorize en by elke refresh, sodat deaktivering lewendige sessies by hul volgende rotasie stop eerder as om net nuwe aanmeldings te blokkeer.

requireMembershipForTokens (verstek aan): of 'n gebruiker 'n aktiewe lidmaatskap moet hê om 'n token vir hierdie organisasie te kry. Dit geld net vir 'n uitdruklike keuse ('n versoek wat die organisasie noem, 'n refresh wat dit dra, 'n organisasie-omvatte verbinding, of 'n client wat tot presies een beperk is). 'n Organisasie wat bloot van die rekening se eie ou merker oorgeërf is, word nooit deur hierdie vlag beheer nie.

allowAutoMembership (verstek af) laat 'n gebruiker sonder 'n uitnodiging aansluit wanneer hul bevestigde e-posadres op een van die organisasie se geverifieerde domeine is. Dit word by authorize en by elke refresh afgedwing. Sien E-posdomeine en outomatiese lidmaatskap hieronder.

E-posdomeine en outomatiese lidmaatskap

'n Organisasie eis 'n e-posdomein op en bewys dat dit dit beheer met 'n DNS TXT-rekord. Met allowAutoMembership aan, word 'n gebruiker wie se bevestigde e-posadres op daardie domein is 'n lid die eerste keer wat hulle as die organisasie aanmeld.

  1. Eis dit op. POST /api/v1/organizations/{id}/domains met die domein. Die antwoord is 201 met recordName (_authagonal-org.acme.com) en recordValue (authagonal-org-verify=<token>). Die token is ewekansig en per eis.
  2. Publiseer die rekord. Voeg 'n TXT-rekord met daardie naam en presiese waarde by die domein se DNS by.
  3. Verifieer dit. POST /api/v1/organizations/{id}/domains/{domain}/verify soek die rekord op. 'n Passing gee 200 met verified: true. 'n Mis gee 409 verification_failed, nooit 200 met verified: false nie, sodat 'n client wat op sukses poll nie 'n mis vir sukses kan aansien nie.
  4. Verwyder dit. DELETE /api/v1/organizations/{id}/domains/{domain} gee 204. Bestaande lidmaatskappe bly; slegs toekomstige outomatiese aansluitings hou op.
POST /api/v1/organizations/{id}/domains
POST /api/v1/organizations/org_7fa2c9e1.../domains
Content-Type: application/json

{ "domain": "acme.com" }

201 Created
{
  "domain": "acme.com",
  "verified": false,
  "verifiedAt": null,
  "createdAt": "2026-10-03T01:02:03Z",
  "recordName": "_authagonal-org.acme.com",
  "recordValue": "authagonal-org-verify=Qm9...base64url"
}

Weierings: 400 domain_invalid (nie 'n kaal DNS-naam nie), 409 domain_exists (reeds op hierdie organisasie), 409 domain_taken (nog 'n organisasie in die huurder hou dit), 404 organization_not_found en 404 domain_not_found. 'n Domein behoort aan hoogstens een organisasie per huurder, en dit word by verifikasie weer nagegaan.

Die outomatiese lidmaatskapreël

Die kieser laat 'n gebruiker toe wat geen aktiewe lidmaatskap het nie wanneer al hierdie geld:

  • Die organisasie is uitdruklik gekies: 'n meegedraagde refresh-grant, 'n organisasie-omvatte verbinding, die organization-parameter ('n domeinpen verskaf dit), of 'n client wat tot presies een organisasie beperk is. Die rekening se eie ou merker sluit nooit outomaties aan nie.
  • Die organisasie is geaktiveer en allowAutoMembership is aan.
  • Die gebruiker se e-pos is bevestig, want enigiemand kan as [email protected] registreer.
  • Die deel van die e-pos na die laaste @, in kleinletters, is presies gelyk aan een van die organisasie se domeine wat geverifieer is. Daar is geen subdomeinpassing nie: 'n geverifieerde acme.com laat nie [email protected] toe nie. Eis en verifieer elke subdomein afsonderlik.

Wat dit skryf, voordat die lidmaatskaphek loop: geen ry word 'n nuwe active-lidmaatskap sonder rolle; 'n invited-ry word tot active bevorder met sy rolle behou; 'n active-ry word met rus gelaat; 'n suspended-ry word nooit bevorder nie.

Om 'n lid uit te vee hou hulle nie uit nie

Solank allowAutoMembership aan is, sluit 'n uitgeveegde lid wat steeds kwalifiseer weer aan by hul volgende authorize of refresh. Om 'n kwalifiserende gebruiker uit te hou, stel hul lidmaatskap op suspended, die een toestand wat die reël nooit verander nie.

Token-organisasiekeuse

Watter organisasie 'n versoek oplos, word op presies een plek bepaal, so die antwoord is identies by /connect/authorize, by elke refresh, en op die device grant. Voorrang, die hoogste eerste:

#BronGedrag
1Meegedraagde grant (refresh)Die organisasie waarvoor 'n vorige token uitgereik is. As dit nie meer bestaan nie, word die refresh self geweier eerder as om na enigiets anders terug te val.
2Organisasie-omvatte verbindingDie sessie het aangemeld deur 'n SAML- of OIDC-verbinding wat aan een organisasie behoort, so daardie organisasie word gekies. Dit is die enigste bron wat bewys eerder as beweer word. 'n Versoek wat 'n ander organisasie noem word geweier, en so ook 'n verbinding wie se organisasie nie meer bestaan nie.
3organizationEers slug, dan id. 'n Domeinpen bereik dieselfde tak: die middleware voeg dit by voordat die versoek geëvalueer word. Genoem maar nie gevind nie is 'n harde weiering, nooit 'n stil terugval nie.
4Client beperk tot presies een organisasieOutomaties gekies: 'n per-kliënt-toepassing registreer sy een organisasie een keer en stuur nooit 'n parameter nie. Beperk tot <em>meer</em> as een sonder 'n wenk word geweier met <code>account_selection_required</code>.
5Rekening se eie ou organisasiemerker'n Enkele plat string, met een opsoek op id opgelos, nie 'n skandering van die gebruiker se lidmaatskappe nie. As dit geen werklike organisasie-ry noem nie, word dit woordeliks uitgereik sonder enige hek, presies soos voordat organisasies bestaan het. Dit is nooit 'n uitdruklike keuse nie, so dit sluit nooit outomaties aan nie.
6Geen van bogenoemdeGlad geen organisasie op die token nie: geen <code>org_id</code>-, <code>org_slug</code>- of <code>org_name</code>-claim.

Lidmaatskappe is nooit die wenk nie

'n Gebruiker met verskeie aktiewe lidmaatskappe en 'n versoek wat geen noem nie, gedra hom identies aan 'n gebruiker met nul lidmaatskappe: die lidmaatskappetabel word nooit geraadpleeg om 'n verstek te kies nie. Keuse val reguit terug na die rekening se eie ou merker (ry 5), en as dit ook leeg is, dra die token glad geen organisasie nie. Lidmaatskappe begin eers saak maak nadat 'n organisasie reeds uitdruklik genoem is, en dit is wanneer requireMembershipForTokens nagegaan word en, indien dit van toepassing is, 'n outomatiese aansluiting probeer word.

Domeinpen

'n Pasgemaakte domein kan aan een organisasie vasgepen word, wat daardie domein die organisasie se eie voordeur maak. Die pen word deur die huurder-oplossing-middleware afgedwing vir beide GET /connect/authorize (by die navraagstring gevoeg) en POST /connect/par (die gestoote liggaam word herskryf, aangesien PAR sy parameters uit die gestoorde loonvrag lees). Sien Pasgemaakte Domeine vir die volledige meganisme.

PUT /api/v1/custom-domains/{domain}/organization
PUT /api/v1/custom-domains/auth.acme.com/organization
Content-Type: application/json

{ "organizationId": "org_7fa2c9e1..." }

'n Vasgepende domein weier 'n botsende versoek

'n Versoek wat 'n ander organisasie as die pen noem, word direk met 400 access_denied geweier, voordat enige aanmeldbladsy getoon word. Sonder dit kan 'n relying party sy eie organization-parameter stuur en die pen sou bloot dekoratief wees.

Organisasie-omvatte verbindings

'n SAML- of OIDC-verbinding kan aan een organisasie behoort. Aanmelding daardeur kies daardie organisasie en skep 'n active-lidmaatskap wanneer die gebruiker geen het nie. 'n invited-ry word aanvaar: dit word active en behou sy rolle en uitnooier, sodat 'n genooide wat deur hul IdP aanmeld nooit die e-pos nodig het nie. 'n suspended-lid bly opgeskort en word by tokenuitreiking geweier. Dit hang nie af van allowAutoMembership of van domeine nie, omdat die organisasie reeds deur die verbinding gekies is.

Die organisasienaam op die aanmeldbladsy

Die aanmeldbladsy wys Signing in to {name} onder die toepassingsnaam. Die naam kom van dieselfde organisasie waarvan die bladsy se handelsmerk kom: die vasgepende domein se organisasie, dan die organisasie wat deur die authorize-versoek genoem word, dan die client se enkele beperkte organisasie. Dit is versteek wanneer daar geen organisasie is nie, of wanneer die organisasie se naam gelyk is aan die toepassingsnaam, sodat die opskrif nooit "Acme / Signing in to Acme" lees nie.

Handelsmerk-oorheersing

'n Organisasie se brandingJson word veld vir veld oor die huurder se handelsmerk vir die aanmeldbladsy saamgevoeg: 'n sleutel wat teenwoordig en nie-null is oorheers, 'n afwesige of null sleutel erf, en 'n onbekende sleutel word geïgnoreer. Misvormde JSON val terug na die huurder se eie handelsmerk met 'n waarskuwing wat aangeteken word, nooit 'n mislukte bladsylaai nie.

Die Handelsmerk-oortjie wysig al 21 saamvoegbare velde: voorkoms (appName, logoUrl, primaryColor, customCssUrl), ligte- en donkermoduskleure, e-poskleure, supportEmail, showForgotPassword, poweredBy en languages. Elke veld erf óf die huurder se waarde, as wenk getoon, óf oorheers dit, met 'n Maak skoon-kontrole wat die sleutel verwyder.

showRegistration kan nie oorheers word nie

Die huurder se openbare registrasie-instelling het reeds besluit of registrasie aangebied word, en die registrasie-eindpunt dwing dit af ongeag handelsmerk. 'n Organisasie is nie die gesag vir daardie besluit nie, so hierdie een veld is van die saamvoeging uitgesluit en het geen kontrole op die Handelsmerk-oortjie nie.

Terugvul vanaf die ou organisasiemerker

Voordat organisasies bestaan het, kon 'n gebruiker 'n vryteks-organisasiemerker dra sonder enige rekord daaragter. POST /api/v1/organizations/backfill migreer dit na werklike organisasies en lidmaatskappe, gegroepeer volgens elke afsonderlike ou waarde. Dit is 'n proeflopie tensy die liggaam { "dryRun": false } is.

  • Begrens: skandeer hoogstens 50 000 gebruikers per oproep. 'n truncated-antwoord beteken laat loop dit weer; reeds gemigreerde gebruikers word by die herloop oorgeslaan.
  • Idempotent: 'n afsonderlike ou waarde wat reeds gemigreer is, word met 'n interne stempel gepas, nie met die organisasie se (wysigbare) vertoonnaam nie, so om die gevolglike organisasie daarna te hernoem veroorsaak nie 'n duplikaat met die volgende lopie nie.
Voorbeeldantwoord (proeflopie)
{
  "dryRun": true,
  "organizationsCreated": 3,
  "membershipsCreated": 41,
  "usersSkipped": 0,
  "organizations": [
    { "legacyValue": "acme-corp", "slug": "acme-corp", "users": 22 }
  ],
  "truncated": false
}

Portaal-UI-deurloop

Die Organisasies-bladsy lys elke organisasie in die huurder, 50 op 'n slag met 'n Laai meer-knoppie, en bied Nuwe Organisasie (slegs slug + naam; beleidsvlaggies, domeine en handelsmerk word daarna gestel) en 'n Vul terug vanaf erfenisorganisasieveld-vloei wat die terugvulling hierbo eers as 'n voorskou laat loop, en dan Pas toe.

Organizations list showing slug, name, and created-date columns, with New Organisation and Backfill from legacy organisation field controls

Die organisasielys wys elke kliëntorganisasie in die huurder met sy slug, naam en skeppingsdatum

Elke organisasie se detailbladsy het drie oortjies: Algemeen (naam, slegs-lees-slug, die drie beleidskakelaars, 'n E-posdomeine-kaart om e-posdomeine by te voeg, te verifieer en te verwyder en die TXT-rekord te kopieer, en 'n tik-die-slug-om-te-bevestig-uitvee), Handelsmerk (elke oorheerbare veld, elk erf die huurder se waarde of oorheers dit), en Lede (voeg by per e-pos, met 'n uitnodiging aangebied wanneer geen rekening bestaan nie, statusverandering en verwydering per ry, met Laai meer).

Organization detail page's Members tab showing invited, active, and suspended member rows with per-row status control

Die Lede-oortjie lys elke lidmaatskap met sy status en 'n kontrole per ry om dit te verander of te verwyder

Organization detail page's Branding tab with each overridable field showing either the tenant's inherited value or an override with a Clear control

Die Handelsmerk-oortjie oorheers die huurder se aanmeldbladsy-handelsmerk veld vir veld vir hierdie organisasie

Die Domeine-bladsy dra die domein → organisasie-kieser: elke domeinkaart het 'n inlyn-aftreklys wat die huurder se organisasies lys plus 'n "Huurder (geen)"-opsie wat die pen skoonmaak, onmiddellik toegepas by verandering. Dieselfde kieser verskyn wanneer 'n domein bygevoeg word.

Domain card showing the inline organisation selector that pins a custom domain to one organisation

Die inlyn-organisasiekieser op 'n domeinkaart pen daardie pasgemaakte domein aan een organisasie vas

Ouditgebeurtenisse

organization.created · organization.updated · organization.deleted · organization.member.added · organization.member.invited · organization.member.joined · organization.member.updated · organization.member.removed · organization.domain_added · organization.domain_verified · organization.domain_removed · organization.backfill · domain.organization_set

Bladsynering

Die organisasielys en die ledelys word met 'n wyser gebladsy en antwoord { items, nextCursor }. Gee limit (verstek 50, vasgeklem op 1 tot 200) en, ná die eerste bladsy, die vorige antwoord se nextCursor onveranderd as cursor. 'n Null nextCursor is die laaste bladsy. Die wyser is 'n ondeursigtige sleutelstel-posisie oor organisasie-id (of gebruiker-id vir lede), sodat rye tussen oproepe byvoeg of verwyder nie 'n bladsy kan skuif of herhaal nie. 'n Wyser wat die lys nie uitgereik het nie is 400 invalid_cursor.

Bestuur organisasies vanaf 'n KI-assistent

Die gehoste portaal-MCP bied dertien organisasiehulpmiddels, almal met die huurder-admin-rol vereis: lys, haal, skep, werk by en vee organisasies uit; lys, voeg by, werk by en verwyder lede; voeg e-posdomeine by, verifieer en verwyder hulle; en lys 'n gebruiker se organisasies. Hulle roep dieselfde bewerkings as die API hierbo aan, sodat 'n hulpmiddel nie van sy roete kan afwyk nie. Sien Bestuur jou portaal vanaf 'n KI-assistent.

Een issuer per gasheer

Elke gasheer van 'n huurder is sy eie OIDC-issuer. Wanneer die versoekgasheer deur die huurder se domeintabel opgelos is, is die issuer en elke eindpunt-URL wat ontdekking adverteer https://{host}, sodat elke aktiewe pasgemaakte domein sy eie iss bevestig en die kanonieke huurdergasheer onveranderd bly. Handtekeningsleutels is per huurder, so elke gasheer bedien dieselfde sleutelstel. Dit is wat een huurder in staat stel om verskeie kliënte te bedien, elk op sy eie gebrandmerkte domein wat aan sy eie organisasie vasgepen is. Sien Pasgemaakte Domeine.

E-poskonfigurasie

Stel in hoe jou huurder transaksionele e-posse stuur, soos verifikasie-, wagwoordherstel- en uitnodigings-e-posse. Kies tussen die gedeelde versteksender, 'n geverifieerde pasgemaakte domein via Resend, of jou eie SMTP-bediener.

Email settings showing provider options (default, Resend domain, custom SMTP) and a test-send

Gelokaliseerde E-posse

Transaksionele e-posse word in die ontvanger se voorkeurtaal gestuur. Verifikasie-, wagwoordherstel-, rekening-bestaan-, verwelkoming-, uitnodiging-, rekeningskrapping-, ondersteunings- en fakturering-e-posse is in elf tale gesjabloneer: Engels, Duits, Frans, Spaans, Portugees, Viëtnamees, Vereenvoudigde Chinees, Japannees, Arabies, Hindi en Afrikaans. Wanneer geen sjabloon vir 'n ontvanger se taal bestaan nie, val die e-pos terug na Engels.

Die taal word opgelos uit die ontvanger se gestoorde voorkeur ten tyde van stuur. Hierdie voorkeur kan van verskeie plekke kom:

  • Registrasie — vasgelê uit die taal wat die gebruiker op die aangebode aanmeldskenne gekies het.
  • Die portaal-Gebruikersblad — gestel deur 'n admin by die skep of wysig van 'n gebruiker.
  • SCIM-voorsiening: gekarteer uit die IdP se preferredLanguage (of locale) wanneer gebruikers via SCIM gesinkroniseer word.
  • Die self-diens-rekeningbladsy — deur die gebruiker self gekies by /login/account.

Geen konfigurasie nodig

Lokalisering is outomaties en geld vir alle verskaffer-modi (versteks, Resend pasgemaakte domein en SMTP). Daar is niks om te aktiveer nie.

E-posverskaffers

VerskafferBeskrywingOpstelling
Authagonal (Default)E-posse gestuur vanaf [email protected] via ons gedeelde Resend-infrastruktuur.Geen konfigurasie nodig nie — werk onmiddellik.
Custom Domain (Resend)E-posse gestuur vanaf jou eie geverifieerde domein via Resend.Registreer jou domein, voeg DNS-rekords by, verifieer eienaarskap.
Custom SMTPE-posse gestuur deur jou eie SMTP-bediener.Verskaf SMTP-gasheer, poort, geloofsbriewe en TLS-instellings.

Stuurderidentiteit

Stuurder-e-pos en naam word gedeel oor alle verskaffer-modi. Stuurder-e-pos is vereis vir die Pasgemaakte Domein (Resend)- en Pasgemaakte SMTP-verskaffers; stuurdernaam val terug na die handelsmerk se toepassingsnaam as dit leeg is.

VeldBeskrywing
emailSenderEmailDie Van-adres op uitgaande e-posse. Moet op 'n geverifieerde domein wees vir Pasgemaakte Domein (Resend)-modus.
emailSenderNameVertoonnaam wat in die ontvanger se inkassie gewys word.

Resend Pasgemaakte Domein

Verifieer jou stuurdomein eenmalig met Resend, gebruik dit dan as die Van-adres vir hierdie huurder. Die DNS-rekords (SPF, DKIM) word in die Pasgemaakte Stuurdomein-paneel op Instellings → E-pos gewys; Resend kontroleer hulle wanneer jy <strong>Kontroleer Verifikasie</strong> klik.

Pasgemaakte SMTP

Bring jou eie SMTP-bediener — nuttig vir interne relais, verskaffers nie deur Resend gedek nie, of regulatoriese vaspen.

VeldBeskrywing
smtpHostSMTP-bedienergasheernaam (bv. smtp.example.com).
smtpPortVerbindingspoort, verstek 587. TLS word met STARTTLS onderhandel; implisiete TLS op poort 465 word nie ondersteun nie. Gebruik 25 vir nie-geverifieerde interne relais.
smtpUsernameAuth-gebruikersnaam (opsioneel — laat leeg vir nie-geauthentiseerde relais).
smtpPasswordAuth-wagwoord. Geënkripteer gestoor in die huurder-instellingsgeheim.
smtpUseTlsVereis TLS. Laat aan tensy jy 'n vertroude interne relais teiken.

Pasgemaakte Stuurdomein

By gebruik van die Pasgemaakte Domein (Resend)-verskaffer kan jy jou eie domein registreer sodat e-posse van jou handelsmerk kom (bv. [email protected]) in plaas van @authagonal.io.

  1. Gaan na Instellings → E-pos en kies die Pasgemaakte Domein (Resend)-verskaffer.
  2. Voer jou domeinnaam in en klik Registreer Domein.
  3. Voeg die getoonde DNS-rekords (DKIM, SPF en terugkeerpad) by jou domein se DNS.
  4. Klik Kontroleer Verifikasie — sodra DNS versprei (gewoonlik 1–10 minute), verander die domeinstatus na geverifieer.

DNS-verspreiding

DNS-veranderinge kan tot 48 uur neem om globaal te versprei, hoewel meeste verskaffers binne minute bywerk. Jy kan verifikasie soveel keer as nodig kontroleer.

Toetsing

Gebruik die Stuur Toets-e-pos-knoppie in Instellings → E-pos om jou konfigurasie te verifieer. 'n Toets-e-pos sal na jou admin-e-posadres gestuur word met die huidige gestoorde instellings.

Ouditlys

Die Ouditlys bied 'n leesalleen-rekord van alle administratiewe aksies wat op u huurder uitgevoer is. Elke wysiging via die portaal of API word met volledige konteks vasgelê, sodat u 'n volledige spoor het vir nakoming en foutopsporing.

Lyskolonne

KolomBeskrywing
TydstemDie datum en tyd waarop die aksie plaasgevind het
AkteurDie e-posadres van die admin wat die aksie uitgevoer het, of "system" vir outomatiese aksies
AksieDie tipe aksie uitgevoer (bv. Client Geskep, Instellings Bygewerk)
EntiteitDie teiken van die aksie in tipe:id-formaat (bv. client:my-app)
BesonderhedeBykomende konteks oor die wysiging

Gedopte Aksies

Die volgende administratiewe aksies word in die ouditlys aangeteken:

KategorieAksies
ClientsClient Geskep, Client Bygewerk, Client Geskrap
SSO-verbindingsSAML-verbinding Geskep, SAML-verbinding Geskrap, OIDC-verbinding Geskep, OIDC-verbinding Geskrap
GebruikersGebruiker Geskep, Gebruiker Bygewerk
InstellingsInstellings Bygewerk, Brandmerk Bygewerk
DomeineDomein Bygevoeg, Domein Geverifieer, Domein Geskrap
SCIMSCIM-token Geskep, SCIM-token Herroep
RolleRol Geskep, Rol Bygewerk, Rol Geskrap
GroepeGroep Geskep, Groep Geskrap
SpanSpanlid Genooi, Spanlid Verwyder
Audit log table showing timestamped administrative actions with actor, action, entity, and detail columns

Die ouditlys bied 'n volledige rekord van alle administratiewe aksies

Bewaring

Ouditlyste word vir 365 dae bewaar en kan nie gewysig of geskrap word nie. Om hulle langer te hou, skakel outomatiese uitvoer aan vanaf die Ouditlog-bladsy se Uitvoer-oortjie.

Rugsteun

Authagonal maak outomaties 'n rugsteun van jou huurderdata op 'n uurlikse skedule. Rugsteun sluit alle gebruikers, groepe, rolle, clients, SSO-verbindings, SCIM-tokens, handelsmerke en instellings in. Jy kan rugsteungeskiedenes bekyk en die jongste volledige rugsteun van die Rugsteunbladsy aflaai.

Backups page showing backup history with timestamps, types, and entity counts

Hoe Rugsteun Werk

  • Een keer per dag word die uurlikse inkrementele rugsteune in 'n nuwe volledige rugsteun saamgerol, en op Sondae word die daaglikse volledige rugsteune in 'n weeklikse rugsteun saamgerol. Sewe daaglikse en vier weeklikse rugsteune word gehou.
  • Inkrementele rugsteun loop uurliks en neem slegs rye wat sedert die laaste rugsteun verander het.
  • Rugsteun word in Azure Blob Storage gestoor met dieselfde bestuurde identiteit as jou huurder.
  • Geskrapte rekords word via grafsteen-rekords nagespoor en ingesluit in rugsteun vir oudit-volledigheid.

Rugsteun Aflaai

Klik Laai Jongste Af om 'n ZIP-leëer te kry wat die jongste volledige rugsteun saamgevoeg met alle daaropvolgende inkrementele rugsteun bevat. Elke tabel word as 'n JSONL-leëer uitgevoer (een JSON-objek per lyn).

Rugsteunformaat

Rugsteun word as JSONL (JSON Lines) uitgevoer — een entiteit per lyn per tabel. Hierdie formaat is maklik om te ontleed, te vergelyk en in ander stelsels in te voer.

Inrigtingsapps

Voorsieningsapps is jou eie dienste wat Authagonal roep elke keer as 'n gebruiker geskep word, sodat hulle 'n rekening kan opstel, 'n lisensie kan toeken, kan besluit aan watter organisasie die gebruiker behoort, of die registrasie heeltemal kan weier.

Hoe Dit Werk

Wanneer 'n gebruiker geskep word, roep Authagonal jou voorsieningsapp se terugroep-URL met die TCC (Try/Confirm/Cancel)-patroon. Elke app moet in die Try-fase aanvaar voordat enige van hulle vasgelê word, sodat verskeie stroomaf-stelsels kan saamstem, of een kan veto, sonder om halfgeskepte rekeninge agter te laat.

FaseEndpointDoel
/tryPOST {callbackUrl}/tryKontroleer of die app die gebruiker kan hanteer. Gee 200 terug om te aanvaar of 4xx om te weier.
/confirmPOST {callbackUrl}/confirmVerbind die operasie nadat alle apps die /try-fase aanvaar het.
/cancelPOST {callbackUrl}/cancelTrek die operasie terug as 'n ander app tydens die /try-fase misluk.

Wanneer voorsiening loop

Voorsiening loop op elke pad wat 'n gebruiker skep, nie net selfdiens-registrasie nie. App-en-gebruiker-kombinasies wat reeds voorsien is, word oorgeslaan, sodat 'n app elke gebruiker een keer sien.

SkeppingspadWanneer dit afgaan
POST /api/auth/registerSelfdiens-registrasie
SAML ACS-terugroepEerste SSO-aanmelding vir 'n nuwe gebruiker (JIT)
OIDC-terugroepEerste SSO-aanmelding vir 'n nuwe gebruiker (JIT)
POST /scim/v2/Users'n Koppelaar voorsien 'n gebruiker vanuit die klant se gids
Gebruikerskepping in die portaal en admin'n Operateur skep of nooi 'n gebruiker met die hand

Die Try-versoek

Authagonal POST hierdie JSON na <code>{callbackUrl}/try</code>. Velde sonder 'n waarde word weggelaat eerder as om as null gestuur te word.

VeldTipeBeskrywing
transactionIdstringIdentifiseer hierdie voorsieningstransaksie. Dieselfde waarde word na /confirm en /cancel gestuur, so stel jou werk daarteen op en lê dit vas of gooi dit weg wanneer daardie oproep opdaag.
userIdstringDie gebruiker se Authagonal-id. Dit is die subject wat jy in hulle tokens sal sien.
emailstringDie gebruiker se e-posadres.
firstNamestringVoornaam, wanneer die skeppingspad een verskaf het.
lastNamestringVan, wanneer die skeppingspad een verskaf het.
organizationIdstringDie organisasie waarin die gebruiker reeds is, indien enige. Dit is net teenwoordig wanneer iets voorheen een toegeken het; by 'n eerste registrasie is dit afwesig, en dit is jou teken om dit toe te ken.
customAttributesobjectDie gebruiker se gestoorde pasgemaakte kenmerke. Vir 'n gebruiker wat deur SSO geskep is, sluit dit federated_connection in, die naam van die verbinding wat vir hulle ingestaan het.

'n Gebruiker wat deur SSO aankom, is die algemene geval waarvoor dit die moeite werd is om te beplan: hulle het nog geen organisasie nie, en federated_connection sê vir jou van watter van jou klante hulle af kom.

Try-versoek vir 'n gebruiker wat deur 'n SSO-verbinding aankom
{
  "transactionId": "8f14e45fceea167a5a36dedd4bea2543",
  "userId": "0f6b1c8e-3d2a-4f51-9e77-2c1a4b5d6e7f",
  "email": "[email protected]",
  "firstName": "Ada",
  "lastName": "Lovelace",
  "customAttributes": {
    "federated_connection": "acme-okta"
  }
}

Die Try-antwoord

Jou app antwoord met 200 en 'n JSON-liggaam. Die liggaam is nie net 'n erkenning nie: dit is hoe 'n stroomaf-app die organisasie en kenmerke toeken wat op die gebruiker se tokens beland.

VeldTipeBeskrywing
approvedbooleanOf hierdie app die gebruiker aanvaar. Verstek is true as dit weggelaat word. False verwerp die registrasie en die nuwe rekening word uitgevee.
reasonstringWaarom die gebruiker verwerp is. Word aan die oproeper van die skeppingspad gewys.
organizationIdstringDie organisasie waaraan hierdie gebruiker behoort. Word op die gebruiker gestoor en as die org_id-eis op hulle tokens uitgereik. Word net toegepas as die gebruiker nie reeds een het nie, so die eerste app wat antwoord wen en latere apps sien daardie toekenning.
customAttributesobjectKenmerke om sleutel vir sleutel op die gebruiker saam te voeg. Word op tokens uitgereik deur 'n scope se UserClaims-konfigurasie.
emailVerifiedbooleanJou app staan in daarvoor dat dit hierdie adres geverifieer het, byvoorbeeld deur 'n uitnodiging wat daarheen gestuur is, in te los. Authagonal merk die rekening as bevestig en slaan sy eie verifikasie-e-pos oor.
Try-antwoord wat 'n organisasie toeken
{
  "approved": true,
  "organizationId": "org_acme",
  "customAttributes": { "org_role": "member" }
}

Hier kom org_id vandaan

Die rekening se organisasiemerker, en dus die org_id-eis wanneer 'n versoek geen organisasie noem nie, is net wat jou voorsieningsapp as organizationId teruggegee het. Wanneer dit die id van 'n organisasie in die huurder is, dra tokens daardie organisasie se org_id, org_slug en org_name, en 'n gedeaktiveerde organisasie weier die aanmelding. Enige ander waarde word woordeliks as org_id uitgereik, sonder uniekheidsreël en sonder formaatvereiste. Om 'n organisasie-id terug te gee, skep nie 'n lidmaatskap nie. Jy kan dit ook direk stel met PUT /api/v1/users/{userId}, en daarvolgens filter met GET /api/v1/users?organizationId=.

Merk gebruikers met die regte organisasie

Besluit die organisasie hier, op een plek, eerder as by elke skeppingspad. 'n SSO-gebruiker dra federated_connection, wat die verbinding identifiseer wat hulle geverifieer het en daarom ook die klant, en dit bly korrek wanneer een klant verskeie e-posdomeine federeer. 'n Genooide gebruiker het geen verbinding nie, so pas hulle by die uitnodiging wat jy uitgereik het. Albei paaie bereik /try voordat die gebruiker bestaan, so een stuk logika dek hulle en daar is nie twee reëls wat uitmekaar kan dryf nie.

Om die organisasie in die Try-terugroep te bepaal
// POST {callbackUrl}/try
app.post('/provisioning/try', async (req, res) => {
  const { email, customAttributes } = req.body;

  // An SSO user carries the connection that vouched for them. That is the
  // customer, and it stays right when one customer has several domains.
  const connection = customAttributes?.federated_connection;

  const org = connection
    ? await orgByConnection(connection)
    : await orgByPendingInvite(email);

  if (!org) return res.json({ approved: false, reason: 'No organization for this user' });

  // Stamped on the user and emitted as org_id on every token from now on.
  res.json({ approved: true, organizationId: org.id });
});

Verwerping vee die rekening uit

As enige app met approved: false antwoord, word die pas geskepte gebruiker uitgevee sodat geen halfvoorsiene rekening agterbly nie. Die API-skeppingspaaie gee 422 terug met jou reason; die SAML- en OIDC-terugroepe gee 400 terug. Gee approved: true terug vir 'n gebruiker vir wie jy niks hoef te doen nie.

Voeg 'n Inrigtingsapp by

Om 'n inrigtingsapp by te voeg, verskaf 'n Toepassingsnaam, 'n Terugbel-URL, 'n opsionele API-sleutel en 'n opsionele Try-tydsbeperking (sekondes, verstek 60, reeks 5 tot 300; Confirm en Cancel gebruik 'n vaste kort tydsbeperking). Die API-sleutel word as 'n Bearer-token in die Authorization-opskrif van elke webhook-versoek gestuur, sodat u app versoeke van Authagonal kan verifieer.

Toetsing

Klik Toets langs enige inrigtingsapp om 'n toetsversoek na u terugbel-URL te stuur. Die toetsresultate wys die HTTP-statuskode en responliggaam, wat u help om te bevestig dat u app webhooks korrek ontvang en verwerk.

Provisioning apps page showing configured apps with test results displaying HTTP status and response body

Toets inrigtingsapps om webhook-aflewering en responsverwerking te bevestig

Plan-perke

Die maksimum aantal inrigtingsapps is per huurder instelbaar, met 'n verstekgrens van 6. 'n Admin kan hierdie grens aanpas as u werkvloei addisionele inrigtingsteikens vereis.

API-sleutel-verifikasie

As 'n API-sleutel gestel is, word dit as 'n Bearer-token in die Authorization-opskrif gestuur. Gebruik dit om webhook-versoeke van Authagonal te verifieer.

Span

Die Span-bladsy bestuur portaaladmins: die mense wat jou huurder deur die bestuurportaal kan bereik en opstel. Elke spanlid het 'n rol (Eienaar, Admin, Ontwikkelaar of Ondersteuning) wat bepaal wat hulle kan verander.

Adminlys

Die adminlys toon elke spanlid se naam, e-posadres, rol en die datum wat hulle bygevoeg is. 'n "Jy"-aanduider word langs die huidige gebruiker se ry getoon sodat jy jou eie rekening maklik kan identifiseer.

Admins Nooi

Om 'n nuwe spanlid te nooi, verskaf hul e-posadres, naam en rol. Hulle ontvang 'n e-pos met 'n skakel om hul wagwoord te stel en hul rekening te aktiveer; die skakel is 7 dae geldig.

Nooivelde

Admin-uitnodigings skep 'n hangende rekening en stuur 'n aktiveringskakel per e-pos aan die genooide.

VeldBeskrywing
emailE-posadres van die nuwe admin. Moet uniek in die huurder wees.
nameVertoonname wat in die adminlys getoon word.
roleRol om toe te ken: tenant:admin, tenant:developer of tenant:support. Verstek is tenant:admin. Die eienaarrol kan nie per uitnodiging toegeken word nie.

Admins Verwyder

Die huurder-eienaar kan Verwyder langs enige spanlid klik om hul toegang te herroep. 'n Bevestigingsdialoog word getoon voordat die verwydering gefinaliseer word. Jy kan jouself nie verwyder nie, en die huurder behou altyd sy eienaar.

Team page showing the admin list with name, email, date added columns, a You indicator, and invite/remove controls

Bestuur portaaladmins vanaf die Spansbladsy

Eienaarskap

Elke huurder het een eienaar. Slegs die eienaar kan spanlede verwyder of eienaarskap oordra, met Maak eienaar op 'n ander lid; die vorige eienaar word 'n Admin.

Ondersteuning

Maak 'n ondersteuningskaartjie oop by die Authagonal-span sonder om die portaal te verlaat. Elke kaartjie is 'n draadvormige gesprek, so jy en ons span bly op dieselfde bladsy van die eerste verslag tot oplossing.

Jou kaartjies

Die ondersteuningsbladsy lys elke kaartjie wat jy ingedien het, jongste aktiwiteit eerste. Gebruik die statuskenteken om in 'n oogopslag te sien wat op jou wag en wat op ons wag.

Support ticket list showing each ticket's subject, status badge, priority, and last-activity time, with a New ticket button

Jou ondersteuningskaartjies met onderwerp, status, prioriteit en laaste aktiwiteit

  • Elke ry toon die onderwerp, huidige status (oop, hangende, opgelos of gesluit), prioriteit en tyd van die laaste aktiwiteit.
  • Klik Nuwe kaartjie om een oop te maak, gee dit dan 'n onderwerp, prioriteit en jou eerste boodskap.
  • Kleurgekodigde statuskentekens maak dit maklik om die lys te deurkyk vir kaartjies wat jou aandag benodig.

Kaartjiedraad

Die oopmaak van 'n kaartjie toon die volledige gesprek. Antwoorde word in volgorde geplaas, en nuwe boodskappe van ons span verskyn sonder 'n bladsyherlaai.

Support ticket thread showing the conversation between the customer and the Authagonal team with a reply box and file attachment control

Kaartjiedraad tussen jou en die Authagonal-span

  • Draadvormige boodskappe tussen jou en die Authagonal-span word in chronologiese volgorde getoon.
  • Antwoord inlynig en heg leëers aan om logs, skermkiekies of konfigurasie te deel.
  • Die draad word lewendig bygewerk, so 'n antwoord van ons span verskyn sodra dit gestuur is.
  • As jy op 'n kennisgewing-e-pos antwoord, word jou boodskap outomaties ingedraad.

Hoe antwoorde jou bereik

Authagonal-personeel werk kaartjies aan die adminkant af. Jy word per e-pos in kennis gestel wanneer die span antwoord, sodat jy nie die portaal oop hoef te hou om 'n gesprek by te hou nie.

Ondersteuningsbalie vir jou gebruikers

Apart van die ondersteuning wat jy van ons kry, kan Authagonal 'n ondersteuningsbalie vir jou eindgebruikers bedryf. Hulle maak kaartjies oop vanaf hul rekeningbladsye op jou huurder se eie gasheer met jou handelsmerk, en jou span antwoord hulle vanuit die portaal.

Dit bestaan omdat die mense wat nie kan aanmeld nie, presies die mense is wat nie 'n ondersteuningsinstrument kan bereik wat aanmelding vereis nie. Die balie sit langs die aanmeldskerms, so 'n uitgesluite gebruiker het steeds 'n pad deur, en elke kaartjie kom reeds gekoppel aan 'n werklike rekening in jou gebruikersgids aan, eerder as aan watter adres iemand ook al ingetik het.

Om dit aan te skakel

Maak Klantondersteuning in die portaal oop, skakel oor na sy Instellings-oortjie en skakel Aktiveer kliënteondersteuning aan. Die oortjie is daar vir eienaars en admins. Niks is vir jou gebruikers sigbaar voordat jy dit doen nie.

InstellingWat dit doen
Aktiveer kliënteondersteuningDie hoofskakelaar. Wanneer dit af is, is beide die eindgebruikerbladsye en jou operateur-inmandjie versteek en antwoord hul API's 404.
Laat versoeke van afgemelde besoekers toeLaat 'n afgemelde besoeker toe om 'n kaartjie oop te maak, wat die uitgesluite geval is. Dit word deur 'n bot-kontrole beskerm, en die gesprek gaan per e-pos plus 'n private skakel voort, aangesien daar geen rekening is om by aan te meld nie.
E-poskennisgewingsWie 'n e-pos kry wanneer 'n kaartjie aankom of 'n gebruiker antwoord: niemand, spesifieke adresse, of jou hele ondersteuningspan (eienaars, admins en ondersteuning), sodat niemand die inmandjie hoef dop te hou nie.
Verstektaal vir kliënteDie taal wat vir 'n gebruiker aangeneem word wanneer ons nie reeds hulle s'n ken nie, vir hul kaartjies en e-posse. 'n Gebruiker se eie gestoorde taal wen altyd, en met niks gestel nie is dit Engels. Hierdie een is op die <strong>Algemeen</strong>-oortjie van Instellings.
Ondersteuningswebhook-URL'n URL waarheen kaartjiegebeure ge-POST word, om hulle na jou eie gereedskap te stoot.

Nie op Gratis beskikbaar nie

Die ondersteuningsbalie is die een vermoë wat die Gratis-plan nie insluit nie, omdat inkomende e-pos en vertaling werklike koste per gebruik dra. Elke betaalde plan het dit. Verifikasiekenmerke word nooit op hierdie manier agter 'n plan gesluit nie: enkelaanmelding, SCIM, multi-faktor, pasgemaakte domeine, handelsmerk en oudit is op elke plan, Gratis ingesluit.

Wat jou gebruikers sien

Aangemelde gebruikers kry 'n ondersteuningsafdeling in hul rekeningbladsye op jou huurder-gasheer, met jou handelsmerk. Hulle kan 'n kaartjie oopmaak, alles sien wat hulle oopgemaak het, en in 'n draad antwoord. Antwoorde van jou span kom ook per e-pos aan, sodat 'n gebruiker nie heeltyd hoef te gaan kyk nie.

Met anonieme kaartjies geaktiveer, kan iemand wat nie kan aanmeld nie, steeds een oopmaak. Hulle gee 'n e-posadres en hul boodskap, en kry 'n private skakel na die gesprek terug. Daardie skakel is die enigste pad in, so behandel dit soos 'n geloofsbrief: dit is onraaibaar, en enigiemand wat dit het, kan daardie een draad lees en daarop antwoord.

Die operateur-inmandjie

Jou span antwoord vanuit Klantondersteuning in die portaal se sykieslys. Dit is 'n aparte plek van jou eie kaartjies by ons, en dit is beskikbaar vir die tenant:support-rol en hoër, sodat jy 'n agent toegang tot die balie kan gee sonder om hulle die res van die portaal te gee.

AksieWat dit doen
AntwoordPlaas in die draad. Die gebruiker word per e-pos in kennis gestel en sien dit lewendig as die bladsy oop is.
Wys toeGee 'n kaartjie aan 'n benoemde lid van jou span, sodat twee mense nie dieselfde een antwoord nie.
Status en prioriteitSkuif 'n kaartjie deur oop, hangende, opgelos en gesluit, en merk hoe dringend dit is. Gesluite kaartjies word ná 'n bewaartydperk geskrap eerder as om vir altyd gehou te word.
Interne notasNotas wat slegs vir jou span sigbaar is, nooit vir die gebruiker nie. Wysigings en skrappings word in die ouditlogboek aangeteken.
Maak namens 'n gebruiker oopBegin 'n draad met een van jou gebruikers deur hulle uit jou gebruikersgids te kies, vir wanneer die gesprek elders begin het.
Eskaleer na AuthagonalAs dit blyk dat 'n kaartjie oor Authagonal eerder as oor jou produk gaan, eskaleer dit. Dit maak 'n gekoppelde kaartjie by ons span oop, opsioneel met die draad tot dusver, en koppel die twee sodat jy albei kan volg. 'n Kaartjie kan slegs een keer geëskaleer word.

Gebruikers skryf in hul eie taal

'n Kaartjie word gestoor in die taal waarin die gebruiker dit geskryf het, en elke persoon in die draad lees dit in syne. Jou agent sien 'n boodskap wat in sy portaaltaal vertaal is, die gebruiker sien jou antwoord in syne vertaal, en die oorspronklike teks word altyd daarnaas gehou. Die taal word uit die eerste boodskap opgespoor en aan die kaartjie vasgepen. Vertalings word een keer per taal bereken en hergebruik, sodat 'n lang draad nie homself oor en oor vertaal nie.

Tydsones

'n Kaartjie teken die tydsone aan waaruit die gebruiker dit oopgemaak het. Elke boodskap wys dan hul plaaslike tyd langs joune, sodat 'n antwoord om 14:32 gelees word as die 02:32 wat dit werklik was vir die persoon wat daarop wag. Wanneer die sone onbekend is, soos by 'n kaartjie wat per e-pos aangekom het, of wanneer dit met joune ooreenstem, word niks gewys nie.

Webhooks

Stel 'n ondersteuning-webhook-URL om kaartjiegebeure te ontvang soos hulle gebeur, om 'n waarskuwing op te wek of kaartjies na jou eie stelsel te spieël. Ladings word onderteken sodat jy kan verifieer dat hulle van ons af gekom het.

GebeurtenisWat dit doen
support.ticket.created'n Gebruiker het 'n kaartjie oopgemaak.
support.ticket.message'n Boodskap is op 'n draad geplaas, deur 'n gebruiker of deur een van jou operateurs. fromStaff in die loonvrag sê vir jou watter een.
support.ticket.status_changed'n Kaartjie se status het verander, byvoorbeeld na opgelos.
support.ticket.assigned'n Kaartjie is aan 'n spanlid toegewys.

Invoer en migreer

Migreer 'n bestaande identiteitsstelsel na u Authagonal-huurder. Twee bronne word ondersteun — Duende IdentityServer ('n SQL Server-databasis) en Auth0 (die Management API). Elk laat 'n leesalleen-voorskou toe sodat u presies kan sien wat gekopieer sal word voordat u verbind.

Invoer vanaf Duende IdentityServer

Migreer clients, scopes, gebruikers en rolle vanaf 'n bestaande Duende IdentityServer SQL Server-databasis na u Authagonal-huurder. Die invoer loop in twee fases — voorskou en verbind — sodat u kan sien wat gekopieer sal word voordat enige wysigings gemaak word.

Wat Ingevoer Word

Die invoerder lees uit Duende se ConfigurationDb en ASP.NET Identity-tabelle en skryf gekarteerde rye na u huurder. Kortstondige artefakte soos aanhoudende toelatings, toestelkodes en ondertekeningssleutels word oorgeslaan.

EntiteitBrontabelleNotas
ClientsClients, ClientSecrets, ClientGrantTypes, ClientScopes, ClientRedirectUrisGedeaktiveerde clients word gedeaktiveer ingevoer. Verstreke geheime word oorgeslaan.
ScopesApiScopes, ApiResources, IdentityResourcesGebruikereis-kartering word behou waar herkend.
GebruikersAspNetUsers, AspNetUserClaimsWagwoordhasse (ASP.NET Identity V3) word woordeliks gekopieer en by eerste aanmelding herhash.
RolleAspNetRoles, AspNetUserRolesRoltoekennings word behou.
Eksterne aanmeldingsAspNetUserLoginsGestoor vir verwysing; koppel stroomopwaartse IdPs via SSO na invoer.

Voorskou Voor Verbind

Plak u Duende ConfigurationDb / IdentityDb-verbindingstring en klik Voer voorskou uit. Die voorskou open 'n leesalleen-verbinding en tel elke ry wat ingevoer sou word. Geen skryfwerk vind plaas nie.

  • Entiteitstellings vir clients, scopes, gebruikers, rolle en roltoekennings.
  • Botsingswaarskuwings wanneer die teikenhuurder reeds clients (ooreenstemmende ClientIds word oorskryf), rolle of scopes (ooreenstemmende name word oorgeslaan) het.
  • Waarskuwings vir onbekende tabelle en ongekartte kolomme sodat u weet watter data geskrap sal word.
Import preview panel showing entity counts and warnings before committing the import

Voorskoupaneel met tellings en waarskuwings

Wagwoordhasse

Duende stoor wagwoorde met ASP.NET Identity V3 (PBKDF2). Authagonal se PasswordHasher verifieer daardie formaat direk en herhash na die inheemse formaat by die eerste suksesvolle aanmelding — gebruikers behou hul bestaande wagwoorde sonder 'n hersettingsvloei.

Gebruiker-ID-rekonsiliasie

As 'n gebruiker wat reeds in hierdie huurder is dieselfde e-pos het as 'n inkomende rekord, roteer die invoer daardie rekening se userId na die bron-sub voor invoer, sodat die ingevoerde rolle, aanmeldings, en eise aan die bestaande rekening heg en toepassings wat die gebruiker reeds deur hul bron-sub verwys, bly oplos na die oorskakeling. Die rekening se bestaande wagwoord en profiel word behou; die bronrolle smelt bo-op saam. Die voorskou lys elke rekening wat gerekonsilieer sal word voordat u verbind.

Die Invoer Uitvoer

Klik Begin invoer nadat u die voorskou hersien het. Die verbindingsfase skryf clients, scopes, gebruikers, rolle en eksterne-aanmelding-verwysings na u huurder se stoor. Clients met 'n ooreenstemmende clientId word oorskryf; rye met 'n ooreenstemmende scope name, email of role name word oorgeslaan, so die invoerder is veilig om weer uit te voer.

Wat Nie Ingevoer Word Nie

  • Aanhoudende toelatings, toestelkodes, bediener-sessies — kortstondige artefakte, word outomaties hergenereer.
  • Ondertekeningssleutels — Authagonal gee sy eie per-huurder-sleutels uit.
  • Pasgemaakte kolomme en tabelle — alles buite Duende se standaardskema word as 'n waarskuwing aangedui sodat u weet die data is geskrap.
  • Gedeaktiveerde clients — word in 'n gedeaktiveerde toestand ingevoer; heraktiveer hulle via die Clients-bladsy wanneer gereed.

Nie beskikbaar in sandbox nie

Invoer loop teen die lewendige huurder slegs. Skakel uit sandboxmodus voordat u invoer.

Invoer vanaf Auth0

Koppel Authagonal aan u Auth0-huurder se Management API en bring u toepassings, API's, rolle, gebruikers en ondernemingsverbindings oor. Ingevoerde gebruiker- en toepassings-ID's word behou, sodat bestaande sub- en client_id-verwysings na die oorskakeling bly werk.

Wat u nodig het

Skep 'n Machine-to-Machine-toepassing in Auth0 wat gemagtig is vir die Management API, met hierdie leesscopes: read:users, read:clients, read:resource_servers, read:roles, read:connections, read:client_grants. Plak sy domein, client ID en client secret in die invoervorm — dit word slegs vir die invoer gebruik.

Wat Ingevoer Word

EntiteitBrontabelleNotas
Toepassingsclients, client-grantsPubliek teenoor vertroulik word outomaties bespeur. Client secrets word herhash sodat hulle bly werk.
API's en scopesresource-serversGehore en scopes word aan elke client uit sy toelatings toegewys.
Rollerolle + toekenningsPer-gebruiker-roltoekennings word behou.
Gebruikersgebruikers + identiteiteProfiele en metadata word oorgemaak; sosiale/ondernemingsidentiteite word gekoppelde aanmeldings.
Verbindingsverbindings (OIDC)Ondernemings-OIDC-verbindings word gefedereerde verskaffers. SAML-, sosiale en databasverbindings word met 'n waarskuwing oorgeslaan.

Wagwoorde

Auth0 se Management API gee nooit wagwoordhasse terug nie. As u Auth0 se ondersteuningsgeholpe massa-wagwoorduitvoer (NDJSON) het, verskaf dit — bcrypt-hasse word woordeliks ingevoer en u gebruikers behou hul wagwoorde sonder herinstel. Daardie lêer dra ook u volledige gebruikersstel, wat Auth0 se 1 000-gebruiker-API-lysgrens hef. Sonder dit word gebruikers as profiele ingevoer en stel 'n nuwe wagwoord by eerste aanmelding in.

Dieselfde voorskou, rotasie en perke

Die voorskou, eienaar-userId-rotasie, heruitvoerbare verbinding en sandboxbeperking hierbo beskryf geld ook vir Auth0-invoere.

API-verwysing

Elke huurder stel 'n standaard-voldoende OIDC-bediener bloot by https://{slug}.authagonal.io. Alle eindpunte volg die OAuth 2.0- en OpenID Connect-spesifikasies. Hierdie verwysing dek elke eindpunt waarmee u toepassing moontlik moet kommunikeer.

OIDC Authorization Code Flow with PKCE: sequence diagram showing the 9-step flow between your app, the browser, and Authagonal

Magtigingskodestroom met PKCE

OIDC-ontdekking & JWKS

Die ontdekkingsdokument laat OIDC-kliëntbiblioteek toe om hulself outomaties te konfigureer. Geen verifikasie word vereis vir enige van die eindpunte nie.

GET /.well-known/openid-configuration

Gee die OpenID-aanbieder-konfigurasiedokument terug. Die respons bevat al die metadata wat u kliënt nodig het om met hierdie huurder te kommunikeer.

VeldBeskrywing
issuerDie huurder se issuer-URL
authorization_endpointURL vir magtigingsversoeke
token_endpointURL vir token-uitruiling
userinfo_endpointURL vir die ophaal van gebruiker-claims
jwks_uriURL vir die JSON Web Key Set
revocation_endpointURL vir token-herroeping
introspection_endpointURL vir token-inspeksie
end_session_endpointURL vir afmeld / sessie-beëindiging
device_authorization_endpointURL vir toestelmagtigingsversoeke
pushed_authorization_request_endpointURL van die Pushed Authorization Request-eindpunt (RFC 9126).
require_pushed_authorization_requestsOf die huurder globaal PAR vereis. Selfs as dit false is, kan individuele kliënte steeds RequirePushedAuthorizationRequests = true stel.
scopes_supportedLys van ondersteunde scopes
response_types_supportedOndersteunde responstipes
grant_types_supportedOndersteunde grant types
code_challenge_methods_supportedOndersteunde PKCE-metodes (S256)
backchannel_logout_supportedOf back-channel logout ondersteun word

GET /.well-known/openid-configuration/jwks

Gee die JSON Web Key Set terug wat gebruik word om token-handtekeninge te verifieer. Die respons bevat 'n keys-reeks van EC P-256-publieke sleutels (tokens word met ES256 onderteken), elk met kty- (EC), use-, kid-, alg-, crv-, x- en y-velde.

Fetch discovery document
curl https://acme.authagonal.io/.well-known/openid-configuration

Magtigingseindpunt

GET /connect/authorize

Begin 'n magtigingskodestroom. Die gebruiker moet 'n aktiewe sessie hê, anders word hy aangestuur na die aanmeldblad. By sukses word die gebruiker teruggestuur na u toepassing met 'n magtigingskode.

ParameterVereisBeskrywing
response_typeJaMoet "code" wees
client_idJaU geregistreerde kliënt-identifiseerder
redirect_uriJaMoet presies ooreenstem met 'n geregistreerde redirect URI
scopeJaSpasie-geskeidde lys van scopes (bv. "openid profile email")
stateAanbeveelOndeursigtige waarde vir CSRF-beskerming, onveranderd teruggestuur in die aanstuur
code_challengeVereis as PKCEBase64url-geënkodeerde SHA-256-hash van die code_verifier
code_challenge_methodVereis as PKCEMoet "S256" wees
nonceOpsioneelWaarde gebind aan die ID token vir herhalingbeskerming
login_hintOpsioneelVul die e-posveld op die aanmeldblad voor

Sukses-respons: 302-aanstuur na redirect_uri met code- en state-navraagparameters.

Fout-respons: 302-aanstuur met error-, error_description- en state-navraagparameters.

PKCE Vereis

PKCE word standaard vereis vir alle kliënte. Genereer 'n code_verifier ('n ewekansige string van 43 of meer karakters), hash dit met SHA-256, en base64url-enkodeer die resultaat om die code_challenge te skep.

Pushed Authorization Requests (PAR)

RFC 9126. In plaas van om elke magtigingsparameter op die URL te plaas, POST u kliënt hulle na /connect/par met normale kliënt-verifikasie en ontvang 'n kortstondige, ondeursigtige request_uri terug. Die blaaier besoek dan /connect/authorize?client_id=...&request_uri=... — niks anders beland in die blaaier se geskiedenis, bedienerlêers, of Referer-opskrifte nie, en die bediener het reeds die parameters onder kliënt-verifikasie se integriteit nagegaan.

POST /connect/par

Kliënt-verifikasie is dieselfde as vir /connect/token: HTTP Basic met client_id/client_secret, of vorm-geënkodeerde geloofsbriewe. Publieke kliënte stuur sonder 'n secret. Die liggaam dra dieselfde parameters as wat u normaalweg na /connect/authorize sou stuur; request_uri self word verwerp (koppeling van 'n PAR word verbied deur §2.1 van die spesifikasie). Gee 201 Created terug.

ParameterVereisBeskrywing
client_idJaU kliënt-ID. Moet ooreenstem met die geverifieerde kliënt.
client_secretVertroulike kliënteU kliënt-secret. Vereis vir vertroulike kliënte.
response_typeJaMoet "code" wees
redirect_uriJaMoet presies ooreenstem met 'n geregistreerde redirect URI
scopeJaSpasie-geskeidde lys van scopes (bv. "openid profile email")
code_challengeVereis as PKCEBase64url-geënkodeerde SHA-256-hash van die code_verifier
code_challenge_methodVereis as PKCEMoet "S256" wees
stateAanbeveelOndeursigtige waarde vir CSRF-beskerming, onveranderd teruggestuur in die aanstuur
nonceOpsioneelWaarde gebind aan die ID token vir herhalingbeskerming

Respons

VeldBeskrywing
request_uriEnkelmaal-gebruikte, ondeursigtige verwysing, bv. <code>urn:ietf:params:oauth:request_uri:abc123…</code>. Stuur dit na <code>/connect/authorize</code> as <code>request_uri</code>.
expires_inLewensduur van die <code>request_uri</code> in sekondes. Verstek is 90 — tipiese verwysing-IdP-waarde.

By die opvolgversoek GET /connect/authorize?client_id=…&request_uri=… word alle ander parameters uit die gestuurde lading gehaal en enige ekstra navraagparameters word geïgnoreer. Die client_id op die magtigingsoproep moet ooreenstem met die kliënt wat die versoek gestuur het. Sodra dit gebruik is (of sodra expires_in verstreke is), word die request_uri uit die stoor verwyder.

PAR per kliënt afdwing

Aktiveer Vereis pushed authorization requests op 'n kliënt (Portaal, Clients, maak die kliënt oop, Sekuriteit-oortjie) om gewone /connect/authorize-oproepe daarvandaan te weier. Die aanbevole postuur vir hoërisiko-kliënte kombineer RequirePushedAuthorizationRequests = true met PKCE, wat die URL-balk heeltemal as aanvalsvlak verwyder.
Push an authorization request and follow up
# 1. Push parameters (server returns request_uri + expires_in)
curl -X POST https://acme.authagonal.io/connect/par \
  -u "my-app:CLIENT_SECRET" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "response_type=code" \
  -d "redirect_uri=https://app.example.com/callback" \
  -d "scope=openid profile email" \
  -d "state=$(openssl rand -hex 16)" \
  -d "code_challenge=YOUR_CODE_CHALLENGE" \
  -d "code_challenge_method=S256"

# 2. Send the user to /authorize with only client_id + request_uri
# https://acme.authagonal.io/connect/authorize?client_id=my-app&request_uri=urn:ietf:params:oauth:request_uri:abc123...

Token-eindpunt

POST /connect/token

Ruil geloofsbriewe vir tokens uit. Versoeke moet Content-Type: application/x-www-form-urlencoded gebruik. Kliënt-verifikasie kan verskaf word via HTTP Basic auth (Authorization: Basic base64(client_id:client_secret)) of as vorm-liggaam-parameters (client_id + client_secret).

Magtigingskode-subsidie

ParameterVereisBeskrywing
grant_typeJa"authorization_code"
codeJaDie magtigingskode uit die aanstuur
redirect_uriJaMoet ooreenstem met die URI wat in die magtigingsversoek gebruik is
code_verifierVereis as PKCEDie oorspronklike ewekansige string wat gebruik is om die code_challenge te genereer
client_idJaU kliënt-identifiseerder (as u nie Basic auth gebruik nie)
client_secretVertroulike kliënteU kliënt-secret (as u nie Basic auth gebruik nie)

Refresh Token Grant

ParameterVereisBeskrywing
grant_typeJa"refresh_token"
refresh_tokenJaDie refresh token om uit te ruil
client_idJaU kliënt-identifiseerder
client_secretVertroulike kliënteU kliënt-secret

Client Credentials-subsidie

ParameterVereisBeskrywing
grant_typeJa"client_credentials"
client_idJaU kliënt-identifiseerder
client_secretJaU kliënt-secret
scopeOpsioneelSpasie-geskeidde scopes om te versoek

Toestelkode-subsidie

ParameterVereisBeskrywing
grant_typeJa"urn:ietf:params:oauth:grant-type:device_code"
device_codeJaDie toestelkode uit die toestelmagtigings-respons
client_idJaU kliënt-identifiseerder
client_secretVertroulike kliënteU kliënt-secret

Token-respons:

VeldBeskrywing
access_tokenDie access token vir API-oproepe
token_type"Bearer"
expires_inToken-lewensduur in sekondes
id_tokenOpenID Connect ID token (wanneer die openid-scope versoek word)
refresh_tokenRefresh token (wanneer die offline_access-scope toegestaan word)
Exchange authorization code with PKCE
curl -X POST https://acme.authagonal.io/connect/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code" \
  -d "code=AUTHORIZATION_CODE" \
  -d "redirect_uri=https://app.example.com/callback" \
  -d "client_id=my-app" \
  -d "code_verifier=YOUR_CODE_VERIFIER"

UserInfo-eindpunt

GET /connect/userinfo

Gee eise oor die geverifieerde gebruiker terug. Vereis 'n geldige access token met die openid-scope.

VeldTipeBeskrywing
substringUnieke gebruiker-identifiseerder
emailstringGebruiker se e-posadres
email_verifiedbooleanOf die e-pos geverifieer is
given_namestringVoornaam
family_namestringVan
namestringVolle vertoonnaam
phone_numberstringTelefoonnommer (indien verskaf). Vrygestel onder die <code>phone</code>-scope.
org_idstringDie organisasie waaraan die gebruiker behoort. Word deur jou eie voorsieningsapp toegeken (sien Voorsieningsapps) of met PUT /api/v1/users/{userId} gestel; Authagonal lei dit nooit af nie. Word onder die profile-scope vrygestel, en is afwesig wanneer die gebruiker nie een het nie.
rolesstring[]Reeks van toegewysde rolle. Word slegs vrygestel wanneer die token die <code>roles</code>-scope dra.
groupsobject[]Reeks van groeplidmaatskappe, elk met id en naam. Word slegs vrygestel wanneer die token die <code>groups</code>-scope dra.
Fetch user info
curl https://acme.authagonal.io/connect/userinfo \
  -H "Authorization: Bearer ACCESS_TOKEN"

Token-inspeksie (RFC 7662)

POST /connect/introspect

Valideer 'n token en gee sy metadata terug. Vereis kliëntgeloofsbriewe (Basic auth of vorm-liggaam-parameters).

ParameterVereisBeskrywing
tokenJaDie token om te inspekteer
token_type_hintOpsioneelLeidraad oor die tipe token (bv. "refresh_token")

Aktiewe token-respons:

VeldBeskrywing
activetrue
subOnderwerp (gebruiker-ID)
client_idKliënt waaraan die token uitgereik is
scopeSpasie-geskeidde scopes toegestaan
issUitreiker
expVerstekdatum (Unix-tydstempel)
iatUitgereik-op-tydstip (Unix-tydstempel)
audGehoor
token_typeToken-tipe (bv. "Bearer")

Onaktiewe token-respons: { "active": false }

Altyd 200 OK

Volgens RFC 7662 gee die inspeksie-eindpunt 200 OK terug vir enige token, sodat dit nie gebruik kan word om tokens te enumereer nie. 'n Ongeldige, verstreke of herroepte token gee eenvoudig active: false terug. Die een uitsondering is die oproeper self: 'n client wat stawing faal, kry 401 invalid_client.
Introspect a token
curl -X POST https://acme.authagonal.io/connect/introspect \
  -u "my-app:CLIENT_SECRET" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "token=ACCESS_OR_REFRESH_TOKEN"

Token-herroeping (RFC 7009)

POST /connect/revocation

Herroep 'n voorheen uitgereike token. Vereis kliëntgeloofsbriewe.

ParameterVereisBeskrywing
tokenJaDie token om te herroep
token_type_hintOpsioneelLeidraad oor die tipe token (bv. "refresh_token")

Die eindpunt gee altyd 200 OK terug, selfs vir ongeldige of reeds herroepde tokens, ooreenkomstig die RFC 7009-spesifikasie.

Access en refresh tokens

Beide refresh tokens en access tokens kan herroep word. Om 'n refresh token te herroep, herroep ook die access tokens wat daaruit gemunt is. 'n Herroepte access token word deur introspeksie en userinfo geweier, maar 'n hulpbronbediener wat die JWT plaaslik valideer, aanvaar dit steeds totdat dit verval, so hou access token-leeftye kort.

Toestelmagtiging (RFC 8628)

POST /connect/deviceauthorization

Begin die toestelmagtigingstroom vir invoer-beperkte toestelle (CLI's, slim TV's, IoT-toestelle). Die toestel vertoon 'n kode aan die gebruiker, wat dan die versoek op 'n aparte toestel met 'n blaaier goedkeur.

ParameterVereisBeskrywing
client_idJaU kliënt-identifiseerder
client_secretVertroulike kliënteU kliënt-secret
scopeOpsioneelSpasie-geskeidde scopes (verstek is "openid")

Respons:

VeldBeskrywing
device_codeToestelverifikasiekode (gebruik vir peiling)
user_codeGebruiker-kode in XXXX-XXXX-formaat
verification_uriURL wat die gebruiker besoek om die kode in te voer
verification_uri_completeURL met die user_code vooraf ingevul
expires_inStandaard 300 (sekondes, so die kode is 5 minute geldig). Per client gestel.
interval5 (sekondes — minimum peilingsinterval)

Goedkeuringstroom: Die gebruiker besoek die verification_uri, voer die user_code in en keur die versoek goed. Intussen peil die toestel die token-eindpunt met die device_code.

Peilings-foutkodes:

FoutBetekenis
authorization_pendingGebruiker het nog nie goedgekeur nie — hou aan met peiling
expired_tokenDie toestelkode het verval — herbegin die stroom
access_deniedDie gebruiker het die magtigingsversoek geweier
Request device authorization
curl -X POST https://acme.authagonal.io/connect/deviceauthorization \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=my-cli" \
  -d "scope=openid profile email"

Sessie-beëindiging / Afmeld

GET POST /connect/endsession

Meld die huidige gebruikerssessie af, stel elke kliënt met 'n geregistreerde back-channel- of front-channel-logout-URI in kennis, en herroep die grants wat aan daardie sessie gebind is. Sonder 'n id_token_hint wat met die huidige sessie ooreenstem, word die gebruiker eers gevra om die afmelding te bevestig.

ParameterVereisBeskrywing
id_token_hintOpsioneelDie ID token — gebruik om die post_logout_redirect_uri te valideer
post_logout_redirect_uriOpsioneelWaarheen om na afmeld aan te stuur (moet geregistreer wees)
stateOpsioneelOndeursigtige waarde teruggestuur in die aanstuur

As 'n geldige post_logout_redirect_uri verskaf word en met 'n geregistreerde URI ooreenstem, ontvang die gebruiker 'n 302-aanstuur. Andersins bevestig 'n JSON-respons dat die sessie beëindig is.

Back-Channel Logout

Wanneer 'n gebruiker afmeld, stuur Authagonal 'n ondertekende JWT na elke kliënt se BackChannelLogoutUri. Die JWT bevat sub, aud, iss, en die http://schemas.openid.net/event/backchannel-logout-gebeurtenis-claim. U toepassing moet die gebruiker se plaaslike sessie ongeldig maak wanneer dit hierdie kennisgewing ontvang.

SCIM 2.0 API-verwysing

Authagonal ondersteun die SCIM 2.0-protokol vir outomatiese gebruiker- en groepvoorsiening. Identiteitsverskaffer soos Okta, Azure AD en OneLogin kan hierdie API gebruik om jou Authagonal-huurder gesinkroniseer te hou met jou korporatiewe gids.

Basis-URL: https://{slug}.authagonal.io/scim/v2

Verifikasie: Alle versoeke vereis 'n Bearer-token. Genereer 'n SCIM-token in die portaal op die SCIM-bladsy: kies die client waarvoor jou IdP voorsien, dan Skep Token.

Algemene opskrifte:

OpskrifWaarde
AuthorizationBearer SCIM_TOKEN
Content-Typeapplication/scim+json

Lyseinpunte neem count (verstek 100, maks. 200; 0 gee slegs die totaal terug) en filtrering via die filter-parameter (bv. userName eq "[email protected]"). Gebruikers blaai met cursor: gee die vorige respons se nextCursor deur. Groepe aanvaar óf startIndex (1-gebaseer) óf cursor.

Gebruikers

GET /scim/v2/Users: Lys gebruikers met opsionele bladering en filtrering.

NavraagparameterBeskrywing
startIndexSlegs 1 word vir Users aanvaar; blaai eerder met cursor. 'n Groter waarde gee 400 invalidValue terug.
cursorOndeursigtige bladsywyser: gee die vorige bladsy se nextCursor deur om die volgende bladsy te kry
countMaksimum aantal resultate per bladsy (verstek: 100, maks.: 200; 0 gee slegs die totaal terug)
filterSCIM-filteruitdrukking (bv. userName eq "[email protected]")

GET /scim/v2/Users/{id}: Kry 'n enkele gebruiker aan die hand van hul Authagonal-gebruiker-ID.

POST /scim/v2/Users: Skep 'n nuwe gebruiker. Gee 201 Created terug.

VeldVereisBeskrywing
userNameJaE-posadres (moet uniek wees binne die huurder)
name.givenNameNeeVoornaam
name.familyNameNeeVan
displayNameNeeVolledige vertoonnaam
activeNeeOf die gebruiker aktief is (verstek: true)
externalIdNeeIdentifiseerder van die stroomop-identiteitsverskaffer

PUT /scim/v2/Users/{id}: Volledige vervanging van 'n gebruikerhulpbron. Alle velde moet verskaf word.

PATCH /scim/v2/Users/{id}: Gedeeltelike opdatering via SCIM PatchOp.

OperasieOndersteunde paaieVoorbeeldwaarde
replaceuserName, active, name.givenName, name.familyName, displayName, externalId, preferredLanguagetrue / false, of 'n stringwaarde
adduserName, active, name.givenName, name.familyName, displayName, externalId, preferredLanguagetrue / false, of 'n stringwaarde
removename.givenName, name.familyName, displayName, externalId, preferredLanguage(geen waarde nodig nie)

DELETE /scim/v2/Users/{id}: Sagte skrap van die gebruiker (deaktiveer die rekening en herroep alle tokens). Gee 204 No Content terug.

Create a user via SCIM
curl -X POST https://acme.authagonal.io/scim/v2/Users \
  -H "Authorization: Bearer SCIM_TOKEN" \
  -H "Content-Type: application/scim+json" \
  -d '{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "userName": "[email protected]",
    "name": {
      "givenName": "Jane",
      "familyName": "Smith"
    },
    "displayName": "Jane Smith",
    "active": true,
    "externalId": "ext-12345"
  }'

Groepe

GET /scim/v2/Groups: Lys alle groepe met opsionele bladering en filtrering.

GET /scim/v2/Groups/{id}: Kry 'n enkele groep aan die hand van ID, insluitend sy ledelist.

POST /scim/v2/Groups: Skep 'n nuwe groep. Gee 201 Created terug.

VeldVereisBeskrywing
displayNameJaGroep se vertoonnaam
membersNeeSkikking van lede-objekte, elk met 'n value-veld wat die gebruiker-ID bevat
externalIdNeeIdentifiseerder van die stroomop-identiteitsverskaffer

PUT /scim/v2/Groups/{id}: Volledige vervanging van 'n groephulpbron (insluitend sy ledelist).

PATCH /scim/v2/Groups/{id}: Gedeeltelike opdatering: voeg lede by, verwyder of vervang hulle, of verander displayName en externalId.

DELETE /scim/v2/Groups/{id}: Harde skrap van die groep. Gee 204 No Content terug.

Add members to a group via PATCH
curl -X PATCH https://acme.authagonal.io/scim/v2/Groups/GROUP_ID \
  -H "Authorization: Bearer SCIM_TOKEN" \
  -H "Content-Type: application/scim+json" \
  -d '{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
      {
        "op": "add",
        "path": "members",
        "value": [
          { "value": "USER_ID_1" },
          { "value": "USER_ID_2" }
        ]
      }
    ]
  }'

SCIM-foutreaksies

Wanneer 'n SCIM-versoek misluk, volg die reaksieliggaam die SCIM-foutskema: { "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "status": "400", "detail": "..." }. Algemene statuskodes sluit in 400 (ongeldig versoek), 404 (hulpbron nie gevind nie), 409 (konflik / duplikaat) en 429 (spoedbeperking).

Portal API (outomatisering)

Die Portal API laat jou eie agterkant toe om alles te outomatiseer wat jy in die portaal kan doen — bestuur gebruikers, clients, groepe, rolle, skope, SSO-verbindings en instellings — met 'n masjien-tot-masjien-geloofsbrief. Dit is dieselfde API wat die portaal-koppelvlak gebruik.

Basis-URL: https://portal-api.<your-domain>/api/v1. Versoeke verifieer met 'n Bearer access token; die huurder word uit die token geneem, nie die URL nie.

Skep 'n API-geloofsbrief

Maak in die portaal Clients → Skep API-geloofsbrief oop, kies 'n toegangsvlak en gee dit 'n naam. Authagonal genereer 'n OAuth client_credentials-client wat vir die Portal API opgestel is en gee 'n client-ID en -geheim terug.

Kopieer die geheim onmiddellik

Die client-geheim word slegs een keer vertoon, reg na skepping. Stoor dit in jou geheimbestuurder voor jy die dialoogvenster sluit — as jy dit verloor, skrap die geloofsbrief en skep 'n nuwe een.

Toegangsvlakke

SkopusToestane
tenant:ownerVolledige toegang, insluitend vernietigende eienaar-uitsluitlike aksies soos die skrap van die hele huurder.
tenant:adminBestuur alles behalwe eienaar-uitsluitlike aksies — gebruikers, clients, SSO, groepe, rolle, handelsmerk en instellings.
tenant:developerBestuur clients, skope, handelsmerk en voorsieningsprogramme.
tenant:supportLees en bestuur gebruikers vir ondersteuningstake, en lees die ouditlog.

Jy kan slegs toestaan wat jy besit

Geen geloofsbrief kan meer bevoeg wees as die persoon wat dit skep nie. 'n Admin kan nie 'n eienaar-geskopeerde geloofsbrief genereer nie, en die platform-administratiewe skopus kan nooit aan 'n geloofsbrief toegeken word nie.

Kry 'n token

Ruil die geloofsbrief vir 'n access token by jou huurder se token-eindpunt — https://<your-tenant>.<your-domain>/connect/token — en stuur dan die token as 'n Bearer-opskrif na die Portal API. Tokens is een uur geldig.

Kry 'n token, skakel dan die API
# 1. Exchange the credential for an access token (your tenant's token endpoint)
curl -X POST https://acme.authagonal.io/connect/token \
  -d grant_type=client_credentials \
  -d client_id=api-3f2a... \
  -d client_secret=YOUR_CLIENT_SECRET \
  -d scope=tenant:admin

# Response: { "access_token": "ey...", "token_type": "Bearer", "expires_in": 3600 }

# 2. Call the Portal API with the access token
curl https://portal-api.authagonal.io/api/v1/users \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Eindpunte

Alle paaie is relatief tot die basis-URL en vereis 'n Bearer access token. Die skopus langs elke groep is die minimum geloofsbrief-toegangsvlak wat dit benodig. Bladering verskil per hulpbron: gebruikers en die ouditlog neem count (1 tot 200, verstek 50) en after, gestel op die vorige respons se continuationToken; groepe neem startIndex en count; organisasies neem limit en cursor; clients, rolle en scopes gee elke ry terug.

Clientstenant:developer

GET/api/v1/clientsLys OAuth-clients.

GET/api/v1/clients/{id}Kry 'n enkele client aan die hand van ID.

POST/api/v1/clientsSkep 'n client. Gee 201 terug met die client-rekord. Geheime word nie hier teruggegee nie: munt een met POST /api/v1/clients/{clientId}/secrets, wat dit een keer wys.

PUT/api/v1/clients/{id}Werk 'n client by (herleidings-URI's, toekenningtipes, token-lewensduur, PKCE/PAR-vereistes).

DELETE/api/v1/clients/{id}Skrap 'n client.

POST/api/v1/clients/api-credentialGenereer 'n masjien-tot-masjien Portal API-geloofsbrief.

Gebruikerstenant:support

GET/api/v1/usersLys gebruikers. Ondersteun count, search (e-pos- of naamvoorvoegsel), organizationId om na een organisasie te filter, en after vir wyser-blaaiery.

GET/api/v1/users/countTotale gebruikertelling vir die huurder.

GET/api/v1/users/stats/mfaMFA-inskrywingstatistieke.

GET/api/v1/users/{id}Kry 'n enkele gebruiker.

POST/api/v1/users/inviteNooi 'n gebruiker per e-pos. Skep 'n hangende rekening en stuur 'n skakel per e-pos waar die genooide hul eie wagwoord stel. Opsionele organizationId en organizationRoles voeg ook 'n organisasielidmaatskap by.

PUT/api/v1/users/{id}Werk 'n gebruiker by (profiel, e-pos, isActive, emailConfirmed, organizationId). Om die e-pos of emailConfirmed te verander, is tenant:admin nodig.

DELETE/api/v1/users/{id}Skrap 'n gebruiker.

GET/api/v1/users/{id}/mfaGet a user's enrolled MFA methods.

DELETE/api/v1/users/{id}/mfaReset a user's MFA enrollment. Needs tenant:admin.

Rolletenant:admin

GET/api/v1/rolesLys rolle.

POST/api/v1/rolesSkep 'n rol.

DELETE/api/v1/roles/{id}Skrap 'n rol.

POST/api/v1/roles/assignKen 'n rol aan 'n gebruiker toe.

POST/api/v1/roles/unassignVerwyder 'n rol van 'n gebruiker.

Groepetenant:admin

GET/api/v1/groupsLys groepe.

GET/api/v1/groups/{id}Kry 'n groep met sy leede.

POST/api/v1/groupsSkep 'n groep.

POST/api/v1/groups/{id}/membersVoeg leede by 'n groep.

DELETE/api/v1/groups/{groupId}/members/{userId}Verwyder 'n lid van 'n groep.

DELETE/api/v1/groups/{id}Skrap 'n groep.

GET/api/v1/group-role-mappingsLys groep-tot-rol-koppelinge (rolle wat by token-uitreiking deur groeplidmaatskap toegeken word).

Skopetenant:developer

GET/api/v1/scopesLys API-skope.

POST/api/v1/scopesSkep 'n skopus.

DELETE/api/v1/scopes/{name}Skrap 'n skopus.

SSO-verbindingstenant:admin

GET/api/v1/saml/connectionsLys SAML-verbindings.

POST/api/v1/saml/connectionsSkep 'n SAML-verbinding.

DELETE/api/v1/saml/connections/{id}Skrap 'n SAML-verbinding.

GET/api/v1/oidc/connectionsLys OIDC-verbindings.

POST/api/v1/oidc/connectionsSkep 'n OIDC-verbinding.

DELETE/api/v1/oidc/connections/{id}Skrap 'n OIDC-verbinding.

GET/api/v1/sso/domainsLys die domeine wat na SSO-verbindings geroeteer word (tuis-realmontdekking).

Handelsmerktenant:developer

GET/api/v1/brandingKry die huurder se handelsmerk (kleure, logo, ondersteunde tale).

PUT/api/v1/brandingWerk die huurder se handelsmerk by.

Instellingstenant:admin

GET/api/v1/settingsKry huurderinstellings (webhooks, openbare aanmelding, token-beleid).

PUT/api/v1/settingsWerk huurderinstellings by.

POST/api/v1/settings/webhook-secret/regenerateRoteer die webhook-ondertekeningsgeheim.

POST/api/v1/settings/test-emailStuur 'n toets-e-pos met die huidige e-poskonfigurasie.

Pasgemaakte domeine en e-postenant:admin

GET/api/v1/custom-domainsLys pasgemaakte aanmelddomeine en hul verifikasietatus.

POST/api/v1/custom-domainsVoeg 'n pasgemaakte domein by.

POST/api/v1/custom-domains/{domain}/verifyBegin DNS-verifikasie vir 'n pasgemaakte domein.

DELETE/api/v1/custom-domains/{domain}Verwyder 'n pasgemaakte domein.

GET/api/v1/email/domains/{domainId}Kry 'n sender-e-posdomein se DNS-rekords en verifikasiestatus.

Ouditlogtenant:support

GET/api/v1/auditBevraagteken die huurder se ouditlog.

Gebruikersvoorsiening via SCIM

Vir massiewe gebruiker- en groepvoorsiening vanuit 'n IdP (Entra, Okta), gebruik die SCIM 2.0 API eerder as hierdie eindpunte.

Voorbeeld: nooi 'n gebruiker

POST /api/v1/users/invite
curl -X POST https://portal-api.authagonal.io/api/v1/users/invite \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "firstName": "Ada",
    "lastName": "Lovelace"
  }'

# 200 OK
# { "userId": "8f3a...", "email": "[email protected]" }

Enigiets wat die koppelvlak kan doen

Die Portal API stel dieselfde eindpunte bloot wat die portaal-koppelvlak gebruik, sodat enige bewerking wat jy in die portaal kan uitvoer, outomatiseer kan word — onderhewig aan die geloofsbrief se toegangsvlak.

Organisasies-API

Al die roetes hieronder vereis die TenantAdmin-beleid en is onder /api/v1/organizations tensy anders vermeld. Sien Portaal-API oor hoe om 'n credential te maak. Die twee lysroetes word met 'n wyser gebladsy: gee limit (verstek 50, 1 tot 200) en die vorige nextCursor as cursor; hulle antwoord { items, nextCursor }, en 'n slegte wyser is 400 invalid_cursor. Die organisasie-objek dra 'n slegs-lees domains-lys.

MetodePadLiggaamNotas
GET/api/v1/organizations–Een bladsy organisasies in id-volgorde. Navraag: cursor?, limit? (verstek 50, 1 tot 200). Gee { items, nextCursor }; 'n null nextCursor is die laaste bladsy.
POST/api/v1/organizationsslug, name, brandingJson?, enabled?, requireMembershipForTokens?, allowAutoMembership?, metadata?201 + die organisasie. 409 slug_taken.
GET/api/v1/organizations/{idOrSlug}–Eers op id opgesoek, dan op slug.
PUT/api/v1/organizations/{id}name?, brandingJson?, slug?, enabled?, requireMembershipForTokens?, allowAutoMembership?, metadata?Slegs die genoemde velde verander. 'n Verskillende slug word geweier: dit is onveranderlik sodra dit geskep is. domains kan nie hier verander word nie.
DELETE/api/v1/organizations/{id}–Vee eers elke lidmaatskap van die organisasie uit, dan die organisasie self.
GET/api/v1/organizations/{id}/members–Een bladsy lidmaatskappe in gebruiker-id-volgorde, met die lid se lewendige e-pos/naam uit die gebruikerstoor opgelos. Navraag: cursor?, limit?.
POST/api/v1/organizations/{id}/membersuserId? | email?, status?, roles?201 + die lidmaatskap. 404 user_not_found. 409 membership_exists. Voorbehoude tenant:*- en platform:*-rolle word met 400 invalid_role geweier, nie gestroop nie.
PUT/api/v1/organizations/{id}/members/{userId}status?, roles?Om status op active te stel, stempel joinedAt as dit nog nie gestel was nie.
DELETE/api/v1/organizations/{id}/members/{userId}–Verwyder die ry heeltemal, nie 'n statusverandering nie.
POST/api/v1/organizations/{id}/domainsdomainEis 'n e-posdomein op, ongeverifieer. 201 + { domain, verified, verifiedAt, createdAt, recordName, recordValue }. 400 domain_invalid. 409 domain_exists, domain_taken.
POST/api/v1/organizations/{id}/domains/{domain}/verify–Soek die TXT-rekord by recordName op en pas recordValue presies. 200 + die domein wanneer geverifieer ('n herhaling is 'n no-op 200); 409 verification_failed by 'n mis; 409 domain_taken; 404 domain_not_found.
DELETE/api/v1/organizations/{id}/domains/{domain}–204. Laat die eis val, geverifieer of nie. Bestaande lede bly. 404 domain_not_found.
POST/api/v1/organizations/backfilldryRun? = trueMigreer die ou AuthUser.organizationId-merker na werklike Organization/OrganizationMembership-rye.
GET/api/v1/users/{userId}/organizations–Elke organisasie waaraan hierdie gebruiker behoort, met hul status/rolle binne elkeen.

Aanmeldskerms

Dit is die aangebied skerms wat jou eindgebruikers op jou huurder se verifikasie-bediener sien. Authagonal lewer elke skerm gebruiksklaar, sodat jy 'n volledige, veilige aanmeld-ervaring kry sonder om enige koppelvlak te bou. Hierdie bladsy loop deur elke skerm en wys watter portaalinstellings dit beheer.

Volledig wit-etiket

Elke skerm hier word gestileer deur jou huurder se Branding-instellings — jou logo, kleur, app-naam en pasgemaakte CSS. Die skerms respekteer ook prefers-color-scheme, sodat hulle tussen lig en donker wissel om by die gebruiker se toestel te pas.

Aanmelding

Hosted sign-in screen with an email field, Continue button, single sign-on provider buttons, and forgot-password and create-account links
  • E-pos-eerste, tweestap-vloei: die gebruiker voer hul e-pos in en klik Gaan voort, dan verskyn die wagwoordveld.
  • "Gaan voort met {provider}" enkelteken-op-knoppies verskyn outomaties wanneer SSO-verbindings bestaan.
  • Wagwoord vergeet- en skep rekening-skakels, elk wat gewys of verberg kan word.
  • Opsionele Cloudflare Turnstile-captcha om outomatiese aanmeldpogings te ontmoedig.

Beheer in die portaal-admin

  • Branding stel die logo, kleur, app-naam, ondersteunings-e-pos en pasgemaakte CSS in.
  • Wys of verberg die wagwoord-vergeet- en registrasie-skakels (Branding).
  • SSO-verbindings voeg die sosiale aanmeldknoppies by (SSO-bladsy).
  • Sessie-lewensduur en blokkeringsdrempelwaardes (Instellings → Sessie).

Registrasie

Account registration screen with first and last name fields, email, password, and a live password-policy checklist
  • Versamel voor- en van (opsioneel), e-pos en 'n wagwoord.
  • 'n Lewendige wagwoordbeleid-kontrolelys werk by soos die gebruiker tik, sodat vereistes duidelik is voor indiening.
  • Opsionele Cloudflare Turnstile-captcha.
  • 'n "Meld aan"-skakel vir gebruikers wat reeds 'n rekening het.

Beheer in die portaal-admin

  • Wys of verberg die registrasie-skakel (Handelsmerk). Om registrasie heeltemal af te skakel, skakel Laat publieke registrasie toe af (Instellings → Sessie).
  • Jou huurder se wagwoordbeleid dryf die kontrolelys.
  • Branding stileer die hele skerm.

Wagwoord vergeet

Forgot-password screen with an email field and a neutral check-your-email confirmation state
  • Die gebruiker voer hul e-pos in en sien dan 'n neutrale "kyk jou e-pos"-bevestiging.
  • Die skerm onthul nooit of 'n rekening bestaan nie, wat rekeningopsomming-peiling verhinder.
  • 'n "Terug na aanmelding"-skakel neem die gebruiker terug na die aanmeldskerm.

Beheer in die portaal-admin

  • Wys of verberg die wagwoord-vergeet-skakel (Branding).
  • Jou huurder se e-posaflewering stuur die herstellingsboodskap.
  • Branding stileer die hele skerm.

Wagwoord herstel

Reset-password screen with new and confirm password fields and a live per-rule requirement checklist
  • Nuwe wagwoord- en bevestig wagwoord-velde met 'n lewendige per-reël-vereistelys.
  • 'n Duidelike ongeldige of verstreke skakel-toestand wanneer die herstel-token nie meer geldig is nie.
  • 'n Sukses-toestand wat bevestig dat die wagwoord verander is.

Beheer in die portaal-admin

  • Jou huurder se wagwoordbeleid dryf die kontrolelys.
  • Branding stileer die hele skerm.

MFA-uitdaging

MFA challenge screen with a method switcher, a six-digit authenticator code field, recovery-code entry, and a passkey button
  • 'n Metode-wisselaar tussen stawings-app, toegangssleutel en herstelkode.
  • 'n 6-syfer TOTP-veld wat outomaties indien sodra alle syfers ingevoer is.
  • Herstelkode-inskrywing vir gebruikers wat toegang tot hul stawer verloor het.
  • 'n Toegangssleutel-knoppie vir hardeware-gesteunde verifikasie.

Beheer in die portaal-admin

  • MFA-beleid word per toepassing ingestel (Clients → Sekuriteit).
  • Enige gebruiker met 'n geregistreerde faktor word altyd uitgedaag, ongeag beleid.

MFA-opstelling

MFA setup screen showing enrolled-method status, authenticator QR code and manual key, passkey enrolment, and recovery-code generation
  • Wys die status van geregistreerde metodes sodat die gebruiker weet wat reeds opgestel is.
  • Stawer-opstelling via QR-kode, 'n handmatige sleutelalternatief en 'n bevestigingstap.
  • Toegangssleutel-inskrywing vir hardeware-gesteunde stawing.
  • Herstelkode-generering vir rekeningherstel.
  • 'n Opsionele oorslaan wanneer MFA selfbedien eerder as vereis is.

Beheer in die portaal-admin

  • MFA-beleid word per toepassing ingestel; Vereis dwing opstelling by aanmelding (Clients → Sekuriteit).
  • Branding stileer die hele skerm.

Toestel-magtiging

Device authorization screen with a centered user-code entry field, an Approve button, and an approved confirmation state
  • 'n Gesentreerde gebruikerskode-inskrywing-veld vir die kode wat op die toestel gewys word.
  • 'n Goedkeur-stap om die toestel te magtig.
  • 'n Aanmeld-tussenblad wanneer die gebruiker nog nie geverifieer is nie.
  • 'n Goedgekeurde bevestiging sodra die toestel gemagtig is.

Beheer in die portaal-admin

  • Aktiveer die toestelkode-grant op die toepassing (Clients → Scopes & Grants).
  • Stel die toestelkode-lewensduur in (Clients → Tokens).
Consent screen showing the requesting application's logo and name, a per-scope permission list, and Allow and Deny buttons
  • Wys die versoekende client se logo en naam.
  • 'n Per-scope-lys met gebruikersvriendelike, leesbare etikette vir elke toestemming.
  • Toelaat- en Weier-knoppies om toegang toe te staan of te weier.
  • 'n Toestemming-wenk-voetteks wat verduidelik wat die beslissing beteken.

Beheer in die portaal-admin

  • Aktiveer Vereis toestemming per toepassing (Clients → Algemeen).
  • Die logo, naam en URL kom van die toepassing se eie metadata.
  • Branding stileer die toestemmingskaart.

Gekoppelde toepassings (grants)

Connected apps screen listing the applications a user has authorized with their scopes and granted date, plus a revoke control
  • Lys elke toepassing wat die gebruiker gemagtig het, met sy naam, scopes en toestemmingsdatum.
  • Herroep toegang tot 'n toepassing, met 'n bevestigingstap voordat dit van krag word.
  • 'n Vriendelike leë toestand wanneer die gebruiker geen toepassings gemagtig het nie.

Beheer in die portaal-admin

  • Die lys word gevul deur toestemming-vereiste toepassings.
  • Branding stileer die hele skerm.

Rekening

'n Aangebied selfbediens-rekeningbladsy by /login/account waar aangemelde gebruikers hul eie profiel en voorkeurstaal bestuur, sonder portaaltoegang.

Self-service account screen with editable profile fields and a preferred Language selector
  • Wysig voor- en van, maatskappy en telefoon; die e-posadres word leesalleen gewys.
  • Kies 'n voorkeurstaal uit die ondersteunde lande; die koppelvlak voorskou die keuse onmiddellik en stoor dit by stoor.
  • Die gestoorde taal dryf die gebruiker se aangebied koppelvlak en die taal van die transaksioneele e-posse wat hulle ontvang.

Beheer in die portaal-admin

  • Branding stileer die hele skerm.
  • Dieselfde voorkeurstaal is wysigbaar deur 'n admin op die portaal se Gebruikers-bladsy.

Stawingsvloeie

Stawingsvloeie dek hoe eindgebruikers met jou Authagonal-huurder kommunikeer — aanmeld, registreer, wagwoorde herstel en MFA opstel. Hierdie endpoints word gebruik deur die aangebied aanmeldbladsy en kan direk geroep word as jy 'n pasgemaakte aanmeld-koppelvlak bou.

Aanmelding

POST /api/auth/login

Staaf 'n gebruiker met e-pos en wagwoord. By sukses, teken 'n sessie-cookie en gee die gebruikersprofiel terug. As MFA opgestel is, dui die respons aan dat 'n tweede faktor vereis word voordat die sessie ten volle tot stand gekom het.

Versoekliggaam:

Login request
{
  "email": "[email protected]",
  "password": "correct-horse-battery-staple"
}

Sukses-respons:

VeldTipeBeskrywing
userIdstringUnieke gebruikersidentifiseerder
emailstringGebruiker se e-posadres
namestringVolledige vertoonnaam
mfaAvailablebooleanOf die gebruiker MFA-metodes geregistreer het

MFA-vereiste respons: Wanneer die gebruiker MFA geregistreer het, sluit die respons mfaRequired: true in saam met 'n challengeId en 'n methods-skikking wat beskikbare MFA-metodes lys.

MFA-opstelling vereiste respons: Wanneer die toepassing se MFA-beleid Vereis is maar die gebruiker nog nie geregistreer het nie, sluit die respons mfaSetupRequired: true in met 'n setupToken vir die registrasie-vloei.

Fout-responsies:

FoutkodeHTTP-statusBeskrywing
invalid_credentials401E-pos of wagwoord is verkeerd
account_disabled403Die rekening is deur 'n admin gedeaktiveer
email_not_confirmed403Die gebruiker het nie hul e-posadres geverifieer nie
locked_out423Rekening is tydelik gesluit (sluit retryAfter in sekondes in). Word slegs teruggegee wanneer die wagwoord korrek is; 'n verkeerde wagwoord terwyl gesluit gee invalid_credentials terug
sso_required409E-posdomein het SSO opgestel (sluit redirectUrl in)
too_many_attempts429Te veel aanmeldpogings vanaf hierdie IP of vir hierdie e-pos; probeer later weer
captcha_failed400Turnstile-uitdaging het misluk of ontbreek (slegs wanneer Turnstile geaktiveer is)

SSO-kontrole: As die gebruiker se e-posdomein 'n SSO-verbinding opgestel het, gee die aanmeld-endpoint sso_required terug met 'n redirectUrl. Die client moet die gebruiker na die SSO-verskaffer herlei.

Rekening-blokkering: Na maxFailedAttempts agtereenvolgende mislukte aanmeldpogings, word die rekening gesluit vir lockoutDurationMinutes. Beide waardes is instelbaar in huurder-instellings.

Aangebied Aanmeldbladsy

Die aanmeld-endpoint word gewoonlik geroep deur die aangebied aanmeldbladsy, nie direk deur jou toepassing nie. Gebruik die OIDC-magtigingskode-vloei om stawing te begin — jou gebruikers sal outomaties na die aangebied aanmeldbladsy herlei word.

Registrasie

POST /api/auth/register

Skep 'n nuwe gebruikersrekening en stuur 'n verifikasie-e-pos. Terwyl <strong>Vereis e-posverifikasie om aan te meld</strong> (Instellings &rarr; Sessie) aan is, wat die verstek is, moet die gebruiker hul e-pos verifieer voordat hulle kan aanmeld.

Versoekliggaam:

Registration request
{
  "email": "[email protected]",
  "password": "a-strong-password-here",
  "firstName": "Jane",
  "lastName": "Smith"
}
VeldVereisBeskrywing
emailJaE-posadres (moet uniek wees)
passwordJaMoet aan die huurder se wagwoordbeleid voldoen
firstNameNeeVoornaam
lastNameNeeVan

Sukses: 201 Geskep met die userId van die nuwe rekening. Registreer met 'n e-pos wat reeds gebruik word, gee ook 201 terug: ons onthul nooit of 'n e-pos bestaan nie (om rekeningopsomming te verhinder), en stel eerder die werklike rekeninghouer per e-pos in kennis.

Fout-responsies:

FoutkodeHTTP-statusBeskrywing
weak_password400Wagwoord voldoen nie aan die huurder se wagwoordbeleid nie
rate_limited429Te veel registrasiepogings
provisioning_rejected422'n Voorsiening-webhook het die registrasie verwerp
invalid_email400E-posadres is nie geldig nie
captcha_failed400Turnstile-uitdaging het misluk of ontbreek (slegs wanneer Turnstile geaktiveer is)
public_signup_disabled403Publieke registrasie is vir hierdie huurder afgeskakel (Instellings &rarr; Sessie)

Wagwoordbeleid

Kontroleer die huurder se wagwoordvereistes voor indiening via GET /api/auth/password-policy. Dit gee 'n rules-lys terug: minimum lengte en die vereiste karakterklasse.

Wagwoordherstel

POST /api/auth/forgot-password

Versoek 'n wagwoordherstel-e-pos. Die endpoint gee altyd 'n sukses-respons terug, ongeag of die e-pos bestaan, om e-posopsomming te verhinder.

Forgot password request
{
  "email": "[email protected]"
}

POST /api/auth/reset-password

Herstel die gebruiker se wagwoord met behulp van die token uit die e-pos-skakel.

Reset password request
{
  "token": "RESET_TOKEN_FROM_EMAIL",
  "newPassword": "new-strong-password"
}

Newe-effekte van 'n suksesvolle wagwoordherstel:

  • Mislukte aanmeldpoging-teller word na nul herstel
  • Alle bestaande refresh tokens word herroep
  • 'n Nuwe sekuriteitstempel word gegenereer (wat alle bestaande sessies ongeldig maak)

MFA-opstelling en -verifikasie

Authagonal ondersteun drie MFA-metodes: TOTP (stawings-apps), WebAuthn (sekuriteitssleutels en biometrie) en enkelmaal-herstelkodes.

TOTP-opstelling

POST /api/auth/mfa/totp/setup: Gee 'n <code>setupToken</code>, 'n QR-kode-data-URI en 'n handmatige invoersleutel terug. Die gebruiker skandeer die QR-kode met hul stawings-app (Google Authenticator, Authy, 1Password, ens.), en bevestig dan inskrywing.

POST /api/auth/mfa/totp/confirm: Bevestig TOTP-inskrywing deur die <code>setupToken</code> van die opstelling saam met 'n 6-syfer-kode van die stawings-app te stuur.

Confirm TOTP enrollment
{
  "setupToken": "SETUP_TOKEN_FROM_SETUP_RESPONSE",
  "code": "123456"
}

WebAuthn-opstelling

POST /api/auth/mfa/webauthn/setup — Gee geloofsbrief-skeppingsopsies vir die WebAuthn API terug. Die blaaier roep navigator.credentials.create() met hierdie opsies.

POST /api/auth/mfa/webauthn/confirm: Bevestig WebAuthn-inskrywing deur die bevestigingsrespons van die blaaier in te dien.

Herstelkodes

POST /api/auth/mfa/recovery/generate: Genereer 10 enkelmaal-gebruikbare herstelkodes van 10 karakters (formaat <code>XXXXX-XXXXX</code>). Elke kode kan presies een keer gebruik word om MFA te omseil. 'n Stawings-app of toegangssleutel moet eers geregistreer wees.

Herstelkodes Word Slegs Een Keer Gewys

Herstelkodes word slegs by generering gewys en kan nie later herwin word nie. As 'n gebruiker beide hul stawingstoestel en hul herstelkodes verloor, moet 'n admin hul MFA-geloofsbrief handmatig uit die portaal skrap voordat hulle weer kan aanmeld.

MFA-verifikasie

POST /api/auth/mfa/verify: Voltooi die MFA-uitdaging na 'n suksesvolle wagwoord-aanmelding.

VeldVereisBeskrywing
challengeIdJaDie uitdaging-ID uit die aanmeld-respons
methodJa"totp", "recovery" of "webauthn"
codeTOTP / Herstel6-syfer TOTP-kode of herstelkode (XXXXX-XXXXX)
assertionWebAuthnDie bevestigingsrespons van navigator.credentials.get()

MFA-status

GET /api/auth/mfa/status: Gee die gebruiker se tans geregistreerde MFA-metodes terug.

SSO-aanmeld-vloei

Authagonal ondersteun beide SAML 2.0 en OIDC-gebaseerde SSO-verbindings. Domein-gebaseerde roeteplanning speur outomaties watter SSO-verskaffer gebruik moet word op grond van die gebruiker se e-posadres.

SSO-kontrole

GET /api/auth/[email protected]

VeldTipeBeskrywing
ssoRequiredbooleanOf die e-posdomein SSO vereis
providerTypestring"saml" of "oidc"
connectionIdstringDie SSO-verbindingidentifiseerder
redirectUrlstringDie URL om die gebruiker na te herlei vir SSO-aanmelding

SAML-vloei

Die gebruiker word herlei na GET /saml/{connectionId}/login wat 'n SAML AuthnRequest na die identiteitsverskaffer stuur. Die IdP staaf die gebruiker en plaas 'n SAML-respons terug na die Assertion Consumer Service (ACS) endpoint. Authagonal valideer die bewering, skep of werk die gebruiker by, en teken 'n sessie-cookie.

SAML-metadata vir die opstelling van jou IdP is beskikbaar by GET /saml/{connectionId}/metadata.

OIDC-vloei

Die gebruiker word herlei na GET /oidc/{connectionId}/login wat na die boontoe identiteitsverskaffer herlei met PKCE. Nadat die gebruiker gestaaf het, ruil die callback by /oidc/callback die magtigingskode in, valideer die ID token en skep of werk die gebruiker by.

JIT-voorsiening: Beide SAML- en OIDC-vloeie ondersteun just-in-time-voorsiening, wat standaard af is op elke verbinding (Aktiveer JIT-voorsiening). Wanneer dit aan is en die gebruiker nog nie in die huurder bestaan nie, word hulle outomaties geskep uit die identiteitsverskaffer se eise. As hulle wel bestaan, word hul profieleienskappe opgedateer om die nuutste waardes van die verskaffer te weerspieël.

Domein-gebaseerde Roeteplanning

Domein-gebaseerde roeteplanning beteken jou gebruikers hoef nie te weet watter SSO-verskaffer hulle gebruik nie. Om hul e-posadres in te voer is genoeg — Authagonal pas die domein by die korrekte SSO-verbinding en herlei outomaties.

Backend-for-Frontend (BFF)

'n BFF hou OAuth-tokens heeltemal uit die blaaier uit. Jou enkelbladsy-toepassing hou niks meer as 'n httpOnly-sessiekoekie nie, en 'n vertroulike client op jou eie bediener doen die OpenID Connect-vloei en hou die tokens bedienerkant.

Enigiets wat 'n enkelbladsy-toepassing kan lees, kan kruisterrein-skripting steel, en dit sluit 'n access token in geheue en 'n refresh token in localStorage in. Om tokens in die blaaier te stoor, beperk ook hul lewensduur, want 'n langlewende refresh token binne bereik van skrifte is 'n staande risiko. Die IETF se beste huidige praktyk, OAuth 2.0 for Browser-Based Apps, beveel hierdie patroon om presies daardie rede aan.

In ruil kry jy 'n sessie wat 'n bladsyherlaai kan oorleef sonder dat 'n token te sien is, verversing wat bedienerkant vir jou hanteer word, onmiddellike herroeping deur agterkanaal-afmelding, en 'n gestaafde proxy sodat jou API nooit 'n token hoef te ontleed wat die blaaier kon gemanipuleer het nie.

Skep die client

Maak Clients in die portaal oop en kies Skep BFF-app. Gee dit die basis-URL waarvandaan jou toepassing bedien word, byvoorbeeld https://app.acme.com, en Authagonal registreer 'n korrek opgestelde vertroulike client vir jou eerder as om jou dit self te laat saamstel:

InstellingWaarde
Redirect URI{appBaseUrl}/bff/callback
Post-logout redirect URI{appBaseUrl}/
Agterkanaal-afmelding-URI{appBaseUrl}/bff/backchannel-logout
Grant typesauthorization_code, refresh_token
Scopesopenid, profile, email, offline_access
PKCE en client secretAlbei vereis

Die geheim word een keer gewys

Die respons dra clientId, clientSecret en authority, en die geheim is daarna nooit weer herwinbaar nie, want slegs die hash daarvan word gestoor. Sit dit dadelik in jou bediener se konfigurasie of geheimbestuurder. As jy dit verloor, skep 'n ander client eerder as om hierdie een te probeer herwin.

Koppel dit aan jou bediener

Twee looptydomgewings word ondersteun en deel dieselfde kernprotokol: Authagonal.Bff vir .NET en @authagonal/bff vir Node, laasgenoemde met adapters vir Express en Next.js. Rig enige van die twee op die waardes wat die portaal pas vir jou gegee het. Die Node-pakket benodig ook 'n eie cookieSecret, wat dit gebruik om sy koekies te enkripteer.

.NET
// dotnet add package Authagonal.Bff
builder.Services.AddAuthagonalBff(o =>
{
    o.Authority    = "https://acme.authagonal.io";       // your tenant auth host
    o.ClientId     = builder.Configuration["Bff:ClientId"]!;
    o.ClientSecret = builder.Configuration["Bff:ClientSecret"]!;
    o.Scope        = ["openid", "profile", "email", "offline_access"];
    o.PostLogoutRedirectUri = "https://app.acme.com/";
});

// Trust X-Forwarded-Proto from your ingress. With no options, UseForwardedHeaders() changes nothing.
builder.Services.Configure<ForwardedHeadersOptions>(o =>
{
    o.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
    o.KnownNetworks.Clear();
    o.KnownProxies.Clear();
});

var app = builder.Build();

app.UseForwardedHeaders();   // required behind a proxy or ingress, see the note below
app.MapAuthagonalBff();
app.MapFallbackToFile("index.html");   // your SPA
app.Run();
Node (Express)
// npm install @authagonal/bff
import express from 'express';
import { authagonalBff } from '@authagonal/bff/express';

const app = express();

app.use(authagonalBff({
  authority: 'https://acme.authagonal.io',
  clientId: process.env.BFF_CLIENT_ID,
  clientSecret: process.env.BFF_CLIENT_SECRET,
  cookieSecret: process.env.BFF_COOKIE_SECRET,   // encrypts the session and login cookies
  scope: ['openid', 'profile', 'email', 'offline_access'],
  postLogoutRedirectUri: 'https://app.acme.com/',
}));

app.listen(8080);

Agter 'n proxy, vertrou die aangestuurde opskrifte

Byna elke ontplooiing plaas die BFF agter 'n ingress of lasbalanseerder wat TLS beëindig en gewone HTTP met jou proses praat. Sonder die hantering van aangestuurde opskrifte glo die BFF die versoek is onveilig en stuur dit sy __Host--sessiekoekie sonder die Secure-attribuut uit, wat blaaiers dan stilweg weggooi. Die simptoom is 'n aanmelding wat skoon voltooi en 'n sessie wat nooit verskyn nie. Aktiveer in .NET XForwardedProto in ForwardedHeadersOptions en roep app.UseForwardedHeaders() voor MapAuthagonalBff() aan, soos hierbo: die kaal oproep vertrou geen opskrif nie. Die Node-adapters lees X-Forwarded-Proto self en merk 'n __Host--koekie altyd as Secure; stel jou raamwerk se trust-proxy-instelling sodat die kliëntadres wat na jou API aangestuur word, die regte een is.

Eindpunte

Word by verstek onder /bff gemonteer. Hulle moet vanaf dieselfde oorsprong as jou SPA bedien word, want die sessiekoekie is httpOnly en dieselfde-oorsprong: plaas hulle agter dieselfde gasheernaam eerder as op 'n aparte API-domein.

RoeteDoel
GET /bff/login?returnUrl=/Begin aanmelding en verwys na Authagonal. Bring die gebruiker daarna terug na returnUrl.
GET /bff/callbackDie OIDC-redirect URI. Word vir jou hanteer; jy skryf dit nooit self nie.
GET /bff/userGee isAuthenticated, die sessie se claims en sessionExpiresAt terug. Vereis die anti-vervalsing-opskrif.
GET|POST /bff/logoutBeëindig die sessie plaaslik en by Authagonal.
POST /bff/backchannel-logoutOntvang afmeldingkennisgewings van Authagonal, sodat 'n afmelding elders hierdie sessie ook beëindig.

Vanuit die blaaier

Elke versoek wat nie 'n navigasie is nie, moet 'n statiese anti-vervalsing-opskrif dra. Dit verdedig saam met die koekie se SameSite-attribuut teen kruisterrein-versoekvervalsing: 'n kruisterrein-vormplasing kan nie 'n pasgemaakte opskrif stel nie, so 'n versoek daarsonder word geweier.

Kontroleer wie aangemeld is
const me = await fetch('/bff/user', {
  headers: { 'X-Authagonal-Bff': '1' },
}).then(r => r.json());

if (!me.isAuthenticated) {
  // Navigate, do not fetch: this is a redirect to your identity provider.
  window.location.href = '/bff/login?returnUrl=' + encodeURIComponent(location.pathname);
}

Meld aan en af deur te navigeer, nie met 'n haalversoek nie: location.href = '/bff/login'. Daardie roetes antwoord met 'n herverwysing na jou identiteitsverskaffer, en 'n herverwysingsketting is nie iets wat fetch sinvol kan volg nie.

Om jou API te roep

Die BFF kan jou API onder sy eie basispad aanstuur en die sessie se access token op pad deur aanheg. Die blaaier stuur 'n koekie, jou API ontvang 'n bearer token wat dit normaalweg valideer, en niks van daardie token is vir die bladsy sigbaar of deur die bladsy vervalsbaar nie. Registreer 'n stroomop-diens en versoeke na /bff/api/** bereik dit gestaaf. Laat die lys leeg en die proxy is heeltemal gedeaktiveer.

Om 'n stroomop-API aan te stuur
o.Upstreams.Add(new BffUpstream
{
    Prefix        = "/orders",                        // matches /bff/api/orders/**
    TargetBaseUrl = "https://api.internal.acme.com",
    StripPrefix   = false,                            // keep /orders in the forwarded path
});
OpsieVerstekWat dit doen
Upstreams[]Die API's waarheen die proxy aanstuur. Leeg deaktiveer die proxy-eindpunt.
Prefix/Padvoorvoegsel ná /bff/api wat hierdie stroomop-diens hanteer, byvoorbeeld /orders.
TargetBaseUrl-Basis-URL waarheen versoeke aangestuur word.
StripPrefixfalseVerwyder die passende voorvoegsel voor aanstuur. Laat jou toe om 'n sintetiese roeteringsvoorvoegsel te gebruik om een BFF na verskeie bedieners uit te waaier wat 'n padnaamruimte deel.
AllowAnonymousProxyRequestsfalseStuur 'n versoek sonder 'n bruikbare sessie aan, sonder 'n Authorization-opskrif, in plaas daarvan om dit te weier. Vir 'n API wat beide aangemelde en anonieme oproepers bedien.
RequiredAuthority[]'n Bevoegdheidshek as type:action-pare, byvoorbeeld email:send. Wanneer dit gestel is, kontroleer die proxy die uitgaande token se RFC 9396-magtigingsbesonderhede voor aanstuur.
AuthorityLocation-Die RFC 9396 locations-wortel waaronder hierdie stroomop-diens bekend is, wanneer bevoegdheid toegeken word teen 'n publieke hulpbron-identifiseerder wat verskil van die interne adres wat die proxy roep.
StrictAuthorityfalseWeier 'n oproep wat 'n grant-beperking dra wat die proxy nie kan evalueer nie, eerder as om dit aan te stuur. Die proxy stuur blind aan en lei geen beperkingskonteks af nie, so dit is by verstek af.
ExchangeRoutes[]Proxy-roetes waarvan die stroomop-oproepe op 'n konteksgebonde uitgeruilde token ry eerder as op die sessie se primêre access token. Die eerste passende patroon wen.

WebSockets

'n WebSocket-handdruk kan nie 'n pasgemaakte opskrif of 'n bearer token dra nie, so nóg die anti-vervalsing-opskrif nóg die proxy help. Aktiveer kaartjies en die SPA kan GET /bff/ws-ticket roep, die kortlewende eenmalige kaartjie op die verbind-URL sit, en jou API dit laat inlos. Munt een net voor elke verbinding: dit word met die eerste gebruik geskrap en verval binne sekondes.

OpsieVerstekWat dit doen
WsTicketsEnabledfalseAktiveer die ws-ticket-eindpunt. By verstek af.
WsTicketLifetime30sHoe lank 'n kaartjie geldig is. Doelbewus kort gehou, aangesien dit in 'n URL reis.
TicketExchangeParams[]Navraagparameters wat 'n kaartjie-versoek in 'n token-uitruil mag aanstuur, sodat die kaartjie aan daardie konteks gebind is eerder as om vir alles geldig te wees.

Om doelbewus 'n token aan die blaaier te gee

Die hele punt van 'n BFF is dat die blaaier geen token hou nie, so dit moet doelbewus geaktiveer word en is eng afgebaken. Dit bestaan vir die een geval wat die koekiemodel nie kan bereik nie: 'n hulpbronbediener op 'n ander oorsprong, soos 'n toepassing wat jy in 'n iframe insluit, wat met 'n bearer geroep moet word. Wanneer dit geaktiveer is, gee GET /bff/token?resource=… 'n uitgeruilde token terug: die sessie se token, afgeskaal na een hulpbron op die toelaatlys en gebind aan enige konteksparameter op die toelaatlys. Die blaaier sien nooit die sessie se eie token nie, en wat dit wel kry, is kortlewend en het 'n enkele audience. 'n Versoek wat 'n hulpbron buite die toelaatlys noem, word geweier, en dit is wat verhoed dat dit 'n algemene muntery word.

OpsieVerstekWat dit doen
TokenEndpointEnabledfalseAktiveer die token-eindpunt. By verstek af.
TokenEndpointResources[]Die resource-waardes waaraan 'n token gerig mag word. Enigiets anders word geweier.
TokenEndpointExchangeParams[]Navraagparameters wat as konteksbindinge in die uitruil aangestuur word, byvoorbeeld project_id.

Om verskeie huurders vanaf een BFF te bedien

Stel 'n huurder-navraagparameter en een ontplooiing bedien baie huurders: /bff/login?slug=acme kies die huurder, 'n oplosser verskaf daardie huurder se authority en client-geloofsbriewe, die sleutel ry op die korrelasiekoekie tot in die sessie, en agterkanaal-afmelding los die huurder op uit die token se uitreiker. Die verstek-oplosser hou enkelhuurder-gedrag greep-identies, so jy betaal niks hiervoor tensy jy dit gebruik nie.

Om meer as een instansie te loop

Sessies leef agter IBffSessionStore, wat by verstek 'n in-proses-kas is. Dit is reg vir 'n enkele instansie en verkeerd vir meer as een: 'n gebruiker wie se volgende versoek op 'n ander replika beland, word afgemeld. Registreer 'n gedeelde stoor, soos Redis deur IDistributedCache, voordat jy die BFF byvoeg.

'n Gedeelde stoor is nie op sy eie genoeg nie

Jy het ook 'n verversingslot oor replikas heen nodig. Die enkelvlug-beheer vir verversing is proses-plaaslik, terwyl die sessie en sy roterende refresh token in die stoor leef wat elke replika deel. Twee replikas kan dieselfde sessie lees, albei besluit dit moet ververs word, en albei los dieselfde refresh token in. Dit is nie van die herspeling van 'n gesteelde token te onderskei nie, en die korrekte reaksie op herspeling is om die hele grant-familie te herroep, so 'n BFF met meer as een instansie en sonder 'n slot kan gebruikers as roetine afmeld. Verskaf dit op een van twee maniere: registreer 'n ILeaseProvider via clustering, of implementeer IBffRefreshLockStore op jou sessiestoor, wat 'n voorwaardelike skryf met 'n leeftyd is en die korter roete is as jy reeds Redis loop. 'n BFF waarvan die stoor gedeeld lyk maar wat geen slot het nie, waarsku daaroor tydens opstart eerder as om jou dit uit 'n ondersteuningskaartjie te laat ontdek.

Opsies wat die moeite werd is om te ken

Die volledige stel, in die .NET-spelling. Die Node-pakket neem die kernopsies in camelCase, so BasePath is basePath en SessionLifetime is sessionLifetimeSeconds. PersistentCookie, CorrelationLifetime (vas op 15 minute in Node) en LoginPassthroughParams is slegs .NET.

OpsieVerstekWat dit doen
Authority-Jou huurder se auth-gasheer. OIDC-metadata word daaruit ontdek. Vereis tensy jy multi-huurder is, waar die oplosser dit verskaf.
ClientId-Die vertroulike client id wat vir hierdie BFF geregistreer is.
ClientSecret-Die client secret. 'n BFF is 'n vertroulike client, so dit is vereis.
Scopeopenid profile offline_accessVersoekte scopes. Sluit offline_access in, anders is daar geen refresh token nie en eindig sessies wanneer die access token eindig.
BasePath/bffWaar die BFF-roetes gemonteer word.
CallbackPath/bff/callbackDie pad van die OIDC-redirect URI. Moet ooreenstem met dit waarmee die client geregistreer is.
CookieName__Host-agbffNaam van die sessiekoekie. Die voorvoegsel __Host- vereis HTTPS, so plaaslike ontwikkeling oor gewone HTTP het 'n ander naam nodig.
SessionLifetime8hHoe lank 'n sessie mag leef. Stel dit gelyk aan jou refresh token se absolute lewenstyd, anders word 'n ledige gebruiker afgemeld terwyl hy 'n geloofsbrief hou wat nog geldig was.
PersistentCookiefalseOf die koekie oorleef wanneer die blaaier toegemaak word. Die refresh token bly in albei gevalle bedienerkant.
CorrelationLifetime30mHoe lank 'n aanmelding mag neem tussen die begin daarvan en die terugroep. Dit begrens die koekie wat die state, nonce en PKCE-verifier dra, so 'n gebruiker wat die aanmeldskerm oop los en later terugkom, is die geval wat dit moet oorleef.
RefreshThresholdSeconds60Hoeveel sekondes voor verval die access token ververs word.
AntiForgeryHeaderX-Authagonal-BffDie opskrifnaam wat die blaaier moet stuur op versoeke wat nie navigasies is nie.
PostLogoutRedirectUri-Waar die blaaier beland nadat afmelding voltooi is.
ReturnUrlAllowlist[]Absolute oorspronge wat 'n nie-relatiewe returnUrl mag teiken. Relatiewe paaie word altyd toegelaat en alles anders word na / gedwing, sodat 'n oop herverwysing nie deur die aanmeldroete bereikbaar is nie.
LoginPassthroughParams[]Navraagparameters wat van /bff/login na die authorize-versoek aangestuur word, byvoorbeeld prompt sodat 'n begin-hier-skakel na registrasie eerder as na aanmelding kan lei.
TenantQueryParam-Stel dit om verskeie huurders vanaf een BFF te bedien. Sien hierbo.

Albei looptydomgewings gedra hulle dieselfde

Die .NET- en Node-pakkette implementeer dieselfde kernprotokolkontrak, so aanmelding, callback, gebruiker, afmelding en back-channel-afmelding, die koekie, die anti-vervalsing-opskrif, die verversingsgedrag en die basiese stroomop-proxy is identies. WebSocket-kaartjies, die token-eindpunt, uitruilroetes, StripPrefix, die authority-hekke en anonieme proxying is slegs .NET. Die name hierbo is die .NET-spelling; Node gebruik camelCase-ekwivalente.

Alles is uitruilbaar

Die dele is koppelvlakke, so jy kan die BFF na jou eie infrastruktuur skuif sonder om dit te vurk: IBffSessionStore vir waar sessies leef, ICookieProtector vir koekie-enkripsie (by verstek ASP.NET Data Protection), en ITokenClient om met die token- en herroepingseindpunte te praat. Een BFF kan ook verskeie huurders deur IBffTenantResolver bedien: dit kies die huurder uit 'n navraagparameter by aanmelding en los dit by agterkanaal-afmelding op uit die token se uitreiker.

Bestuur jou portaal vanaf 'n KI-assistent

Koppel 'n KI-assistent aan jou huurder en vra dit om die dinge te doen wat jy andersins self sou deurklik: vind 'n gebruiker wat nie kan aanmeld nie, kontroleer of hulle nog 'n tweede faktor het, nooi iemand, sien wie 'n admin-rol hou.

Dit is 'n gewone OAuth-verbinding, nie 'n API-sleutel nie. Elke persoon meld as hulself aan en keur die toegang goed, dus kan 'n assistent presies doen wat daardie persoon in die portaal kan doen, en niks meer nie. Niks nuuts word geskep wat kan uitlek nie, en om een assistent te herroep laat almal anders onaangeraak.

Om dit aan te skakel

Maak Instellings oop en aktiveer KI-assistenttoegang. Dit is af totdat jy dit doen, en terwyl dit af is bestaan die eindpunt nie, eerder as dat dit bloot weier. Sodra dit aan is, wys die paneel die URL wat jy in jou KI-client moet plak:

Jou MCP-URL
https://portal-api.authagonal.io/api/v1/mcp/{your-tenant}

Hoe 'n assistent toestemming kry

'n Assistent registreer homself voordat dit 'n aanmelding kan begin, en dit is die aanskakel van KI-assistenttoegang wat dit toelaat. Jy hoef niks anders aan te skakel nie, en jy moet veral nie dinamiese client-registrasie op jou eindgebruiker-huurder hiervoor aanskakel nie: daardie instelling geld vir die huurder wat jou eie gebruikers bedien, en dit is nie waar 'n assistent aanmeld nie. Registrasie is nie toegang nie. 'n Pas geregistreerde assistent het hoegenaamd niks nie, totdat iemand uit jou span aanmeld en dit goedkeur, en elke hulpmiddel kontroleer daarna weer daardie persoon se rol.

Wat 'n assistent kan doen

Presies wat die persoon wat dit gekoppel het kan doen, per oproep teen hul eie token besluit. 'n tenant:support-agent kry die diagnostiese en alledaagse hulpmiddels; die admin-hulpmiddels word nie bloot vir hulle weggesteek nie, dit word geweier as dit direk genoem word. Enigiets wat binne die portaal beperk is bly beperk: om 'n gebruiker se e-posadres te verander verg daar die admin-rol, en dit verg dit hier ook.

Omdat dit 'n gewone grant is, bestuur jy dit op die gewone manier: verwyder die assistent op die Gemagtigde Toepassings-bladsy van jou rekening en dit kan nie meer verfris nie, so dit hou op werk wanneer sy huidige access token verval. Elke verandering wat 'n assistent maak, word in jou ouditlys aangeteken as die persoon vir wie dit opgetree het, dus is die spoor dieselfde een wat jy reeds lees.

Die hulpmiddels

Drie-en-dertig in hierdie vrystelling. Jou KI-client besluit watter aangeskakel word, dus kan jy 'n assistent net die leeshulpmiddels gee as dit al is wat jy dit wil laat doen.

HulpmiddelRolWat dit doen
find_userOndersteuningVind gebruikers volgens e-pos, naamvoorvoegsel of id. Die vertrekpunt vir alles anders.
get_userOndersteuningEen gebruiker volledig, insluitend of hulle aktief, bevestig en uitgesluit is.
get_user_mfaOndersteuningWatter tweede faktore iemand ingeskryf het.
get_user_sessionsOndersteuningWaar 'n gebruiker tans aangemeld is.
search_auditOndersteuningDeursoek die ouditlys volgens akteur, aksie of die ding waarop opgetree is.
list_usersOndersteuningLys die gids, opsioneel gefiltreer tot een organisasie.
get_user_statsOndersteuningHoeveel gebruikers jy het en hoeveel 'n tweede faktor gebruik.
invite_userOndersteuningNooi iemand per e-pos.
resend_inviteOndersteuningStuur 'n uitnodiging weer.
send_verification_emailOndersteuningStuur die e-posverifikasieboodskap weer.
update_userOndersteuningWerk 'n profiel by. Om die e-posadres te verander, verg steeds admin.
revoke_user_sessionsOndersteuningMeld 'n gebruiker oral af.
list_rolesAdminDie rolle wat in jou huurder gedefinieer is.
list_role_membersAdminWie 'n gegewe rol hou.
assign_roleAdminGee 'n gebruiker 'n rol.
unassign_roleAdminNeem 'n rol weg.
reset_user_mfaAdminVerwyder elke tweede faktor, vir iemand wat hul outentiseerder verloor het.
get_settingsAdminJou huurder se konfigurasie.
list_sso_connectionsAdminJou SSO-verbindings en die domeine wat hulle dek.
list_organizationsAdminDie organisasies in jou huurder, een bladsy op 'n slag.
get_organizationAdminEen organisasie volgens id of slug, met sy e-posdomeine.
create_organizationAdminSkep 'n organisasie. Die slug is permanent.
update_organizationAdminVerander 'n organisasie se naam, beleidsopsies, metadata of handelsmerk. Die slug kan nie verander nie.
delete_organizationAdminSkrap 'n organisasie en al sy lidmaatskappe.
list_organization_membersAdminDie lede van 'n organisasie, een bladsy op 'n slag.
add_organization_memberAdminVoeg 'n gebruiker by 'n organisasie.
update_organization_memberAdminVerander 'n lid se status of rolle binne 'n organisasie.
remove_organization_memberAdminVerwyder 'n gebruiker uit 'n organisasie.
add_organization_domainAdminEis 'n e-posdomein vir 'n organisasie op. Gee die DNS TXT-rekord terug wat gepubliseer moet word.
verify_organization_domainAdminKontroleer die TXT-rekord en merk die domein as geverifieer. Veilig om te herhaal.
remove_organization_domainAdminLaat 'n domeineis vaar. Bestaande lede bly.
list_user_organizationsAdminDie organisasies waaraan 'n gebruiker behoort, met sy status en rolle in elk.
list_clientsOntwikkelaarDie OAuth-clients wat in jou huurder geregistreer is.

Lees- en skryfhulpmiddels is gemerk

Elke hulpmiddel sê vir jou client of dit net lees, of dit iets verander, en of daardie verandering vernietigend is. 'n Goeie client gebruik dit om 'n opsoek te loop sonder om jou te onderbreek, en om te wag voor iets soos die verwydering van 'n tweede faktor. Behandel dit as 'n gerief eerder as 'n beheer: die ding wat werklik besluit wat 'n assistent mag doen is jou eie rol, wat by elke oproep nagegaan word.

Wat nog nie ingesluit is nie

Die verwydering van gebruikers, die skep of redigeer van SSO-verbindings, fakturering, rugsteune en client secrets ontbreek almal in hierdie vrystelling. Verwydering hoort saam met jou uitwissingstou, eerder as langs dit; 'n SSO-verbinding is groot genoeg dat een verkeerde redigering 'n hele werksmag uitsluit, dus is daardie een voorlopig leesalleen; en 'n hulpmiddel wat 'n client secret teruggee sou dit in 'n assistent se transkripsie plaas. Sê vir ons watter van hierdie jy wil hê en in watter volgorde.

MCP-bediener-verifikasie

As jy 'n Model Context Protocol-bediener blootstel, kan Authagonal die magtigingsbediener daaragter wees. 'n KI-assistent koppel, die persoon daaragter meld aan en verleen toegang, en jou bediener ontvang 'n gewone bearer token wat jy soos enige ander API valideer.

Die alternatief is 'n API-sleutel wat in 'n assistent se konfigurasie geplak word, en dit is 'n geloofsbrief met geen gebruiker daaragter nie, geen vervaldatum nie, geen toestemmingstap nie, en geen manier om een koppelaar te herroep sonder om vir almal te roteer nie. Om dit as OAuth te doen, beteken die grant behoort aan 'n benoemde persoon, is sigbaar in jou ouditlys, en kan vanaf die portaal herroep word sonder om aan enigiets anders te raak.

Hoe die verbinding tot stand kom

Die hele uitruil word deur ontdekking gedryf, dus het 'n konforme client niks gekonfigureer nodig behalwe jou bediener se URL nie.

StapWat gebeur
1Die koppelaar roep jou MCP-bediener sonder 'n token aan en kry 'n 401 wat noem waar om te kyk.
2Dit haal jou beskermde-hulpbron-metadata op, wat jou Authagonal-huurder as die magtigingsbediener noem.
3Dit haal die huurder se magtigingsbediener-metadata op en, aangesien dit nog nêrens geregistreer is nie, registreer dit homself.
4Dit stuur die gebruiker om aan te meld en die toegang goed te keur, en noem jou MCP-bediener as die hulpbron waarvoor dit 'n token wil hê.
5Dit roep jou bediener weer aan met die gevolglike bearer token, wat afgebaken is tot jou bediener en tot daardie gebruiker.

Niks in daardie volgorde is Authagonal-spesifiek nie: dit is die MCP-magtigingspesifikasie, gebou op RFC 9728 vir die hulpbronmetadata, RFC 8414 om die magtigingsbediener te ontdek, RFC 7591 vir registrasie en RFC 8707 om die hulpbron te noem. 'n Koppelaar wat die spesifikasie volg, werk sonder om ons as 'n spesiale geval te hanteer.

Laat koppelaars hulself registreer

'n Koppelaar wat jy nog nooit teëgekom het nie, kan nie 'n client gebruik wat jy met die hand geskep het nie, dus registreer dit een tydens looptyd. Dit is by verstek af. Skakel dinamiese client-registrasie in Instellings aan en die registrasie-eindpunt verskyn in jou ontdekkingsdokument; laat dit af en die eindpunt word nie geadverteer nie en weier. Om dit te aktiveer, open registrasie vir jou huurder alleen, nooit vir iemand anders s'n nie.

BeskermingWat gebeur
Grant typesSlegs die authorization code- en refresh-vloeie kan geregistreer word. Self-registrasie kan nie 'n masjien-tot-masjien-client uitreik wat 'n gebruiker heeltemal sou omseil nie.
PKCEOp elke geregistreerde client afgedwing, ongeag wat die registrasie gevra het.
ToestemmingOok afgedwing. 'n Geregistreerde koppelaar kan nie 'n token kry voordat 'n persoon gesien het waarvoor dit vra en dit goedgekeur het nie.
ScopesDie OIDC-ingeboudes is altyd beskikbaar. Daarbenewens mag 'n self-registrerende client slegs vra vir 'n scope genaamd mcp, en slegs sodra jou huurder dit sonder rolbeperkings definieer. roles en groups kan nie self-geregistreer word nie.
TempolimietTien registrasies per IP-adres per uur, sodat 'n oop eindpunt nie gebruik kan word om jou clientstoor vol te maak nie.

Albei ontdekkingspaaie word bedien

MCP-clients vind die magtigingsbediener deur /.well-known/oauth-authorization-server (RFC 8414), terwyl OIDC-clients /.well-known/openid-configuration gebruik. Jou huurder antwoord op albei met dieselfde metadata, sodat 'n koppelaar wat die MCP-spesifikasie volg jou vind sonder om vertel te word waar om te kyk.

Wat jou MCP-bediener implementeer

Twee klein dingetjies, en daarna is dit 'n gewone hulpbronbediener. Eerstens, publiseer beskermde-hulpbron-metadata wat jou huurder as die magtigingsbediener noem. Bedien dit by die well-known-pad en, as jou MCP-eindpunt op 'n subpad is, ook in die pad-agtervoegselvorm, want clients probeer albei.

Beskermde-hulpbron-metadata
GET https://your-app.example/.well-known/oauth-protected-resource

{
  "resource": "https://your-app.example/mcp",
  "authorization_servers": ["https://acme.authagonal.io"],
  "bearer_methods_supported": ["header"],
  "scopes_supported": ["mcp"]
}

Tweedens, wanneer 'n oproep sonder 'n geldige token aankom, antwoord 401 met 'n WWW-Authenticate-kopstuk wat na daardie metadata wys. Daardie kopstuk is wat 'n weiering in 'n verbinding verander: daarsonder het die client geen manier om te ontdek waar om te verifieer nie, en misluk eenvoudig.

Die token valideer
// Validate the connector's token like any other resource server.
builder.Services.AddAuthentication().AddJwtBearer("McpBearer", o =>
{
    o.Authority = "https://acme.authagonal.io";              // your tenant
    o.TokenValidationParameters.ValidAudience = "https://your-app.example/mcp";
});

// Unauthenticated? Point the connector at the metadata rather than just refusing.
http.Response.Headers.WWWAuthenticate =
    "Bearer resource_metadata=\"https://your-app.example/.well-known/oauth-protected-resource\"";
return Results.Unauthorized();

Kontroleer die audience, nie net die handtekening nie

Valideer dat die token vir jou bediener uitgereik is. Die koppelaar noem jou MCP-bediener as die hulpbron, dus is die token se audience jou hulpbron-URL. 'n Hulpbronbediener wat net die handtekening en die uitreiker kontroleer, sal 'n token aanvaar wat vir 'n ander hulpbron in dieselfde huurder uitgereik is, en so word die een koppelaar se toegang die ander s'n.

Scopes, planne en herroeping

Definieer 'n scope genaamd mcp op jou Scopes-bladsy, sonder rolbeperkings, en 'n self-registrerende koppelaar mag dit versoek; dit verskyn op die toestemmingskerm sodat die gebruiker kan sien wat hulle goedkeur. Die token se subjek is die persoon wat aangemeld het, sodat jou bediener kan besluit wat hierdie spesifieke persoon mag doen eerder as om elke koppelaar eenders te behandel. 'n Self-geregistreerde koppelaar kan nie die roles- of groups-scopes versoek nie, so soek dit aan jou kant op eerder as om dit in die token te verwag.

Omdat dit 'n gewone OAuth-grant is, werk herroeping op die gewone manier: die gebruiker verwyder die koppelaar op die Gemagtigde Toepassings-bladsy van hul rekening, wat sy grant en refresh token laat val sodat dit nie kan hernu nie. Sy bestaande access tokens word dadelik deur /connect/introspect en /connect/userinfo geweier; 'n bediener wat die JWT slegs plaaslik valideer, aanvaar een totdat dit verval. Die ouditlys teken elke aanmelding aan saam met die client waarvoor dit was.

InstellingWat gebeur
Dynamic client registrationPortaalinstelling wat koppelaars toelaat om hulself te registreer. By verstek af.
mcpDie een scope bo en behalwe die OIDC-ingeboudes wat 'n self-registrerende client mag versoek. Definieer dit in jou huurder, sonder rolbeperkings, om dit aan te bied.
resourceDie parameter wat 'n koppelaar stuur om jou MCP-bediener te noem, wat die token se audience daartoe vernou.

Bou 'n pasgemaakte aanmeld-UI

Vervang Authagonal se aangebode aanmeld-, registrasie-, wagwoordherstel- en MFA-skerms met jou eie UI, terwyl Authagonal steeds stawing, MFA, SSO, sessies en token-uitreiking hanteer. Twee opsies: gebruik ons React-komponentbiblioteek, of roep die auth API direk vanuit enige raamwerk. Dit is opt-in: aktiveer eers Pasgemaakte aanmeld-UI onder Instellings → Sessie.

A fully customized hosted login page with a tenant logo, brand color, and support email in the footer

Vereiste: 'n pasgemaakte domein op jou wortel

Die aanmeldsessie is 'n eerste-party-koekie, sodat jou UI en die Authagonal-auth-bediener 'n registreerbare domein moet deel. Wys 'n pasgemaakte auth-domein na Authagonal op dieselfde wortel as jou toepassing — bv. auth by login.acme.com, toepassing by app.acme.com. Die Pasgemaakte aanmeld-UI-instelling bly gedeaktiveer totdat 'n aktiewe pasgemaakte domein bestaan.

Jou UIAuth-gasheerWerk?
app.acme.comlogin.acme.com✅ selfde wortel
acme.comauth.acme.com✅ selfde wortel
app.acme.comacme.authagonal.io❌ kruis-werf
myapp.iologin.acme.com❌ kruis-werf

Waarom 'n pasgemaakte domein vereis word

'n Kruis-werf-sessiekoekie sou 'n derde-party-koekie wees — wat blaaiers (Safari, Chrome) uitfaseer. Om auth op jou eie wortel te hou maak die koekie eerste-party en toekoms-bestand, en dit is wat die platform afdwing: kruis-oorsprong-auth-oproepe word slegs gehonoreer vanaf 'n oorsprong wat die auth-gasheer se worteldomein deel.

Geen client-CORS-instelling is nodig vir die /api/auth-oproepe nie: sodra Pasgemaakte aanmeld-UI aan is, word enige oorsprong op dieselfde registreerbare domein as jou auth-domein outomaties toegelaat. Voeg jou UI se oorsprong (bv. https://app.acme.com) slegs by die client se Toegelate CORS-oorspronge (Clients → URIs) as die blaaier ook die token-uitruiling doen.

React: @authagonal/login

npm i @authagonal/login lewer die auth-logika en UI as een pakket — dieselfde as waarop Authagonal se aangebode aanmelding gebou is. Kies jou vlak:

  • Volledige toepassing — sit App in en temeer dit via handelsmerking.
  • Stel bladsye saam — gebruik LoginPage, MfaChallengePage, ResetPasswordPage… binne jou eie uitleg.
  • Primitiewe + logika — bou jou eie skerms met AuthLayout/Button/Input en die API-kliënt (login, mfaVerify, forgotPassword, …).
'n Pasgemaakte skerm met die @authagonal/login API
import { AuthLayout, Input, Button, login, ApiRequestError } from '@authagonal/login';

// returnUrl: the /connect/authorize URL your login page was opened with
function MyLogin({ returnUrl }: { returnUrl: string }) {
  async function onSubmit(email: string, password: string) {
    try {
      const res = await login(email, password, returnUrl);  // POST /api/auth/login (sets the session cookie)
      if (res.mfaRequired) {/* render your MFA step, then mfaVerify(res.challengeId!, 'totp', code) */}
      else if (res.mfaSetupRequired) {/* enrol first: mfaTotpSetup(res.setupToken) */}
      else window.location.href = returnUrl;                 // resume /connect/authorize
    } catch (e) {
      if (e instanceof ApiRequestError) {/* show e.message; e.error is the error code */}
    }
  }
  return <AuthLayout>{/* your own markup + <Input/> <Button/> */}</AuthLayout>;
}

Enige raamwerk: roep die auth API

Nie op React nie? Roep die auth-vloei-eindpunte direk (onder /api/auth), gee dan oor aan die standaard OIDC /connect/authorize-vloei. Stuur credentials: 'include' sodat die sessiekoekie gestoor word.

EindpuntDoel
POST /api/auth/loginStaaf; gee mfaRequired of 'n terugkeer-URL terug
POST /api/auth/registerSelf-diens-registrasie (wanneer geaktiveer)
POST /api/auth/forgot-passwordBegin 'n wagwoordherstel
POST /api/auth/reset-passwordVoltooi 'n wagwoordherstel
GET /api/auth/password-policyWagwoordbeleid (om die reëls te vertoon)
POST /api/auth/mfa/*MFA-opstelling + verifikasie (TOTP, WebAuthn, herstel)

Gebruik credentials: 'include'

Die sessie is 'n koekie, sodat jou haalversoeke geloofsbriewe moet stuur. Kruis-oorsprong-oproepe slaag slegs wanneer Pasgemaakte aanmeld-UI geaktiveer is en jou oorsprong die auth-gasheer se worteldomein deel — andersins word hulle met 403 geweier.
Staaf, gee dan oor aan OIDC
# 1. Authenticate (browser fetch; credentials:'include' so the session cookie is stored)
curl -i -X POST https://login.acme.com/api/auth/login \
  -H "Content-Type: application/json" \
  -H "Origin: https://app.acme.com" \
  --data '{"email":"[email protected]","password":"..."}'
# (handle {"mfaRequired":true} → POST /api/auth/mfa/verify, then continue)

# 2. Hand off to the OAuth flow: top-level navigation to the authorize endpoint with PKCE:
# https://login.acme.com/connect/authorize?client_id=my-app&redirect_uri=...&response_type=code
#   &scope=openid%20profile%20email&code_challenge=...&code_challenge_method=S256
# The session cookie (same-site) authenticates the user; you get back a code → exchange at /connect/token.

Een Huurder, Baie Kliënte

'n Patroon vir een integreerder, een huurder en N gebrandmerkte kliënte, elk met hul eie aanmelddomein en hul eie gebruikers, sonder 'n huurder per kliënt. Dit is waarvoor deklaratiewe voorsiening en organisasies bestaan: om dit 'n konfigurasieverandering te maak in plaas van 'n ingenieurstaak.

Die vorm

  • Een organisasie per kliënt, binne 'n enkele huurder.
  • Een gebrandmerkte aanmelddomein per kliënt, elk vasgepen aan daardie kliënt se organisasie. Aanmelding daarop kan net ooit 'n token vir daardie organisasie maak.
  • Die toepassing word ook per kliëntgasheer bedien, alles vanaf dieselfde ontplooiing. Niks aan die kode, bou of image verskil tussen kliënte nie.
  • Die relying party kies sy authority volgens die gasheer waarop dit loop, nie volgens 'n boutydkonstante nie. Dieselfde bundel koppel homself aan 'n ander aanmelddomein, afhangend van watter kliëntgasheer dit bedien het.

Stap vir stap

Voorsien die kliënt. Roep die deklaratiewe voorsiening-eindpunt aan met 'n spesifikasie wat die nuwe organisasie en sy domein noem. Die oproep is idempotent en afdeling-omvat.

Voorsieningspesifikasie
{
  "organizations": [
    { "slug": "acme", "name": "Acme Pty Ltd" }
  ],
  "customDomains": [
    { "domain": "login.acme.example", "organizationSlug": "acme" }
  ]
}

Wys die kliënt se DNS na die huurder. Een CNAME vanaf die kliënt se eie sone, wat beheer en voorneme bewys, geen TXT-token nie.

CNAME record
_authagonal-challenge.login.acme.example.  CNAME  <slug>.<platformDomain>.

Dieselfde Cloudflare-rekening as die platform?

Die rekord moet net DNS wees (nie geproxy nie): 'n geproxiede CNAME tussen twee sones in dieselfde rekening bereik nooit die platform se SaaS-pasgemaakte gasheernaam nie. 'n Kliëntsone in 'n ander rekening het glad nie 'n proxy-skakelaar om verkeerd te kry nie.

Wys die toepassing na die kliënt se gasheer. Die relying party los sy eie OIDC-authority per versoek op, volgens die gasheer wat dit tans bedien. 'n Gasheer sonder inskrywing in die kliëntekaart val terug op die klassieke enkelhuurder-afleiding, so om 'n kliënt by te voeg is suiwer additief.

oidc.ts
export function resolveCustomer(): { authority: string; clientId: string } {
  const cfg = getConfig();
  const customer = cfg.customers?.[window.location.host];
  if (customer) return customer;
  const baseDomain = cfg.baseDomain || window.location.hostname.replace(/^consumer\./, '');
  return { authority: `https://${cfg.tenantSlug}.${baseDomain}`, clientId: cfg.clientId };
}

Die client vra vir niks organisasie-spesifiek nie: geen organization-parameter, geen per-kliënt-scope nie. Die domeinpen doen die organisasiekeuse geheel en al bedienerkant, wat "die toepassing is dieselfde kode vir elke kliënt" werklik waar maak.

Wat die kliënt sien

Die aanmeldbladsy wys elke organisasie se eie handelsmerk saamgevoeg oor die huurder s'n. Sien Handelsmerk-oorheersing. Elke kliënt kan sy eie toepassingsnaam, logo, kleur en ondersteunings-e-pos hê sonder om die ander te raak.

'n Gebruiker van kliënt A wat probeer aanmeld op kliënt B se gasheer word geweier en kry nie kliënt B se data te sien nie, in een van twee vorme, afhangend van hoe die konflik ontstaan het:

  • Die relying party stuur niks en beland net op die vasgepende domein. Die pen verskaf die organisasie namens die gebruiker, keuse is dan uitdruklik, en 'n kliënt-A-gebruiker sonder lidmaatskap in B word geweier op die punt waar die token gemaak sou word.
  • Die relying party noem self 'n ander organisasie. Dit word direk deur die domeinpen-middleware met 'n 400 geweier, voordat enige aanmeldbladsy getoon word.

Die lidmaatskapweiering herlei terug na die toepassing

Die eerste vorm hierbo is nie 'n stukkende aanmeldbladsy nie. Dit is 'n gewone error=access_denied OIDC-herleiding terug na die relying party se eie redirect_uri, met 'n beskrywing wat presies noem watter organisasielidmaatskap ontbreek het.

Inskakeling van kliënt N+1

Met Terraform wat die voorsieningsoproep aandryf, is die inskakeling van nog 'n kliënt 'n wysiging aan een lêer: nog 'n inskrywing in die organizations-skikking, nog 'n domeininskrywing wat dit vaspen, nog 'n DNS-rekord. Niks aan die toepassing, sy ontplooiing of sy bou verander nie. Die gasheergebaseerde resolver tel die nuwe kliënt op die oomblik op wanneer sy konfigurasie-inskrywing bestaan.

Verwysingsimplementering

'n Aanhoudende dev-huurder oefen hierdie hele patroon van begin tot einde teen twee werklike kliëntdomeine uit, met 'n end-to-end-toetsstel wat lede voorsien, handelsmerk en die org_id-claim nagaan, en albei weieringsvorme hierbo bevestig: uitvoerbare dokumentasie, nie net 'n beskrywing nie.

Laat dit plaaslik loop
cd e2e-consumer && DOMAIN=authagonal.dev npx playwright test organizations-domains

Die toetsstel loop by verstek soos elke ander spec; dit kan oorgeslaan word in 'n omgewing waar die verwysingsdomeine nie voorsien is nie, aangesien dit die een spec in die stel is wat afhang van infrastruktuur buite die repo se eie beheer.

Planne & Limiete

Authagonal bied 'n Gratis-plan en vier betaalde vlakke aan. Elke plan sluit elke stawingsfunksie in. Planne verskil in die Maandelikse Aktiewe Gebruiker (MAU)-limiet en oorskrydingsprysing, en die Gratis-plan het slegs gemeenskapsondersteuning, sonder die huurder-ondersteuningstoonbank.

Plantrae

PlanMAU-limietOorskrydingOorskrydingskoste/Gebruiker
Gratis250Nee—
Starter1,000Nee—
Pro5,000Ja$0.04/gebruiker
Scale25,000Ja$0.025/gebruiker
Enterprise100,000Ja$0.015/gebruiker

Maandelikse Aktiewe Gebruikers (MAU)

'n Maandelikse Aktiewe Gebruiker is enige unieke gebruiker wat minstens een keer suksesvol verifieer tydens 'n kalendermaand (UTC). Gebruikers wat via SCIM voorsien is maar nie aangemeld het nie, tel nie teen jou MAU-totaal nie.

Oorskryding: as jou plan oorskryding ondersteun (Pro en hoër) en oorskryding vir jou huurder geaktiveer is (dit is standaard af), word gebruikers bo die MAU-limiet gefaktureer teen die per-gebruiker-tarief in die plantabel hierbo. 'n Oorskrydingsgrens stel die maksimum aantal ekstra gebruikers wat bo die limiet toegelaat word.

Handhawing: as jou plan nie oorskryding ondersteun nie (Gratis, Starter) of oorskryding nie geaktiveer is nie, behou gebruikers wat reeds hierdie maand aangemeld het altyd toegang. Wanneer die huurder sy limiet die eerste keer oorskry, begin 'n grasietydperk van 10 dae waartydens nuwe gebruikers steeds kan aanmeld. Daarna word gebruikers wat nie hierdie maand aangemeld het nie, geweier tot die volgende maand of totdat jy opgradeer.

Volle Funksiestel op Elke Plan

Alle planne sluit die volle funksiestel in — SSO, SCIM, MFA, pasgemaakte domeine, handelsmerk, webhooks, ouditlog en die portaal.