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:
- 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. - Koden är redan använd. Den fungerar en enda gång.
- Koden har gått ut. Den är kortlivad med flit. Lös in den direkt.
redirect_uriskiljer 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.jsutan 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.