Felsökning

invalid_request — client_id saknas

Anropet till auktoriseringsändpunkten saknar client_id. Vanligaste orsaken är att formuläret eller omdirigeringen tappat frågesträngen på vägen.

invalid_client

Klienten finns inte, eller så stämmer inte hemligheten. Kontrollera att du använder rätt client_id för rätt miljö — det är lätt att blanda ihop utveckling och drift.

invalid_request — not allowed to use the specified scope

Klienten saknar behörighet för ett scope som begärs. Vilka scopes en klient får begära bockas i när klienten skapas eller redigeras i arbetsytan. Kodexemplen begär openid profile email tenant.role — se till att tenant.role är ibockat, eller ta bort det ur begäran.

Callbacken kommer utan code och state

Klienten får ett anrop på sin callback-adress, men utan code, state eller andra parametrar. ASP.NET Core rapporterar det som message.State is null or empty.

Så ser det ut när användaren själv, eller något i webbläsaren, gått direkt till callback-adressen. Aegis skickar alltid tillbaka code, state och iss — som frågesträng (response_mode=query) eller som ett POST-formulär (response_mode=form_post, förvalet i ASP.NET Core). Båda lägena stöds. Om din egen sajt har en innehållspolicy med form-action, se till att den släpper formulär från Aegis till din callback-adress — det är en egen sida hos oss som skickar formuläret.

502 från din egen sajt direkt efter callbacken

Koden löstes in, men användaren ser 502 från din omvända proxy på callback-adressen, och en omladdning ger invalid_grant: already redeemed. Svaret från callbacken satte en kaka som är större än proxyn buffrar — vanligt med ASP.NET Cores SaveTokens = true, som lägger id- och access-token i kakan. Stäng av SaveTokens om du inte använder tokens efteråt, eller höj proxy_buffer_size i Nginx.

invalid_grant när koden ska lösas in

Fyra möjliga orsaker, i fallande sannolikhet:

  1. Fel code_verifier. Verifieraren som skickas vid utbytet måste vara exakt den som utmaningen räknades fram ur. Tappas den bort mellan anropen — till exempel för att sessionen bytts — går koden inte att lösa in.
  2. Koden är redan använd. Den fungerar en enda gång.
  3. Koden har gått ut. Den är kortlivad med flit. Lös in den direkt.
  4. redirect_uri skiljer sig från den som användes vid auktoriseringen. Den måste vara identisk i båda anropen.

invalid_grant vid förnyelse

Refresh token har återkallats. Det sker när kontot stängts av, medlemskapet dragits in, eller när en auktoriseringskod återanvänts — då ogiltigförklaras hela kedjan.

Behandla det som "användaren måste logga in igen", inte som ett fel att försöka om.

Redirect-adressen godtas inte

Adressen måste matcha tecken för tecken, inklusive protokoll, avslutande snedstreck och skiftläge i sökvägen. https://din-sajt.se/callback och https://din-sajt.se/callback/ är två olika adresser.

Knappen syns inte

Kontrollera i tur och ordning:

  • Finns <div class="aegis-signin"></div> på sidan?
  • Laddas embed.js utan fel i konsolen?
  • Blockerar din CSP login.aegiscentralid.se? Se Knappen.

Knappen syns, men inget händer när man klickar

Servern svarar rätt — en 302 till login.aegiscentralid.se/connect/authorize — men webbläsaren stannar kvar på sidan. Kontrollera konsolen: står det något om form-action är det din egen innehållspolicy (CSP) som stoppar hoppet.

Startar inloggningen med ett formulär (POST, som ASP.NET Cores Challenge brukar göra) tillämpar Chrome och Safari form-action även på omdirigeringen efter formuläret. form-action 'self' blockerar då hoppet till Aegis, tyst. Släpp fram oss:

form-action 'self' https://login.aegiscentralid.se;

Alternativet är att starta inloggningen med en vanlig länk (GET) i stället för ett formulär — länkar omfattas inte av form-action.

CORS-fel vid utbytet i webbläsaren

Token-ändpunkten tillåter anrop från vilket ursprung som helst, men utan credentials. Skickar din kod med credentials: "include" avvisas anropet. Ta bort det — det finns ingen kaka att skicka.

Användaren fastnar på MFA-registreringen

MFA är obligatoriskt. Kontot måste ha en andrafaktor innan någon auktorisering kan slutföras. Det går inte att hoppa över, och det är avsiktligt.

Inget av detta hjälpte

Titta i upptäcktsdokumentet först — det visar exakt vad servern erbjuder:

https://login.aegiscentralid.se/.well-known/openid-configuration

Avkoda sedan din ID-token på en sida du litar på, och jämför iss, aud och exp med vad din kod förväntar sig. De tre stämmer inte överens oftare än man tror.