• invalid_grant
  • invalid grant error
  • oidc grant
  • oauth
  • auth
  • authentication

Utforska OIDC-bidrag: förstå och felsök felet "invalid_grant"

Lär dig grunderna i OpenID Connect (OIDC)-bidrag och hur du felsöker felet "invalid_grant".

Charles
Charles
Developer

Bakgrund

I vårt community hör vi ofta en återkommande fråga från våra användare: Vad handlar det om felet "invalid_grant" i Logto? Som #503

Det är en vanlig utmaning och ett hinder för vissa av våra användare när de integrerar Logto i sina egna applikationer. Men orsakerna bakom detta fel varierar från fall till fall, och ibland är det svårt att förklara med begränsad kontext. Därför är det viktigt för alla att förstå det exakta OIDC-konceptet och lära sig sättet att felsöka problemet.

Låt oss nu gå in i grunderna i OIDC-bidrag.

OIDC-bidrag förklarade

Som vi har presenterat i ett blogginlägg tidigare är OpenID Connect (OIDC) ett protokoll byggt på OAuth 2.0.

I sammanhanget av OIDC eller OAuth2 är ett bidrag en uppsättning behörigheter beviljade av resursägaren (vanligtvis användaren) till en klientapplikation. Bidrag är viktiga för att klientapplikationen ska få tillgång till användarens identitetsinformation och andra skyddade resurser. OIDC definierar flera bidragstyper, var och en passar för ett annat scenario och hur en applikation får en åtkomsttoken.

Här är en analogi för att hjälpa dig bättre förstå OIDC-bidrag.

Föreställ dig att du reser till olika länder, och varje land kräver ett visumstämplar för inresa. I detta scenario fungerar ditt pass som ditt användarkonto, innehållande din personliga information. OIDC-bidrag är som sätten du ansöker om ett visum för att komma in i ett land. När ett visum utfärdas till dig, erhåller du i princip "token" för att komma in i det landet.

På samma sätt, när du använder en applikation, är bidragsbegäran den åtgärd du ber auktorisationsservern att bevilja dig åtkomst. Auktorisationsservern validerar din identitet och utfärdar dig "visumet" (åtkomsttoken) för att logga in i applikationen.

Vanligt använda OIDC-bidragstyper:

  1. Auktorisationskodbidrag: Detta är den vanligaste bidragstypen i OIDC. Det innebär att omdirigera användaren till en auktorisationsserver, erhålla en auktorisationskod, omdirigera tillbaka till applikationen och byta ut koden mot en åtkomsttoken. Tänk på det som den standardprocessen att ansöka om ett visum från ambassaden innan du går in i ett främmande land.
  2. Förnya token-bidrag: I OIDC tillåter denna bidragstyp en klientapplikation att erhålla en ny åtkomsttoken med hjälp av en tidigare utfärdad förnyelsetoken. Det används ofta för att förlänga en användarsession utan att behöva återigen ange sina referenser. Föreställ dig att ditt visum kommer med ett magiskt kort som låter dig förlänga din vistelse i det främmande landet utan att gå igenom tullen igen.
  3. Implicit bidrag: Denna bidragstyp används för äldre webbläsarbaserade applikationer och är mindre säker än Auktorisationskodbidraget. Den returnerar åtkomsttoken direkt till klientapplikationen. Det fungerar som ett "visum vid ankomst", eftersom ingen tidigare visumansökan krävs.
  4. Klientreferensbidrag: Lämplig för server-till-server-kommunikation, denna bidragstyp tillåter en klientapplikation att autentisera direkt med auktorisationsservern med hjälp av sina referenser (klient-ID och klienthemlighet). Det är som en specialagent som visar ett specialjobbemblem för att komma in i landet utan att gå igenom visumansökningsprocessen.

Bidragsobjektmodell:

I Logto lagras bidrag som ett objekt i databasen, innehållande information som användarkonto-ID, applikations-ID, associerade OIDC-resurser och omfång, utgångstid och mer. Varje förnyelsetoken och åtkomsttoken är associerad med ett specifikt bidragsobjekt.

Bidragsförfrågningar:

HTTP-förfrågningar gjorda till auktorisationsservern genom API:er. En klientapplikation kan skicka bidragsförfrågningar till OIDC-token slutpunkt för olika ändamål, inklusive att ansöka om ett nytt bidrag (t.ex. logga in och få förnyelsetoken och åtkomsttoken), uppdatera bidragsdetaljer (t.ex. byta ut en förnyelsetoken mot en ny åtkomsttoken) eller återkalla ett bidrag (t.ex. återkalla alla token utfärdade till inloggade användare och avbryta deras åtkomst).

En typisk auktorisationskodbidragsförfrågan ser ut som följer:

Förstå felet "invalid_grant"

Att stöta på ett invalid_grant-fel i OIDC indikerar vanligtvis att bidragstypen eller data associerad med bidragsförfrågan är ogiltig eller inte stöds. Här är några vanliga orsaker bakom detta fel:

  1. Felaktig bidragstyp: Användning av fel bidragstyp för din applikation kan resultera i ett invalid_grant-fel. Se till att du använder rätt bidragstyp genom att använda Logto SDK:er.
  2. Felaktiga omdirigerings-URIer: När du byter ut en auktorisationskod mot token måste omdirigerings-URIen som används i förfrågan överensstämma med den som användes under den ursprungliga auktorisationsförfrågan. En mismatch kan resultera i ett invalid_grant-fel.
  3. Utgången eller förbrukad auktorisationskod: I auktorisationskodens inloggningsflöde har auktorisationskoden en begränsad livslängd och kommer att markeras som "förbrukad" när den används för att få token. Att försöka byta ut en utgången eller förbrukad kod mot en åtkomsttoken kommer att resultera i ett invalid_grant-fel.
  4. Utgången eller roterad förnyelsetoken: När du byter ut en förnyelsetoken mot en åtkomsttoken, inträffar invalid_grant-felet om förnyelsetoken redan är utgången. Dessutom, för ökad säkerhet, aktiverar Logto förnyelsetokenrotation som standard. Att begära token-slutpunkten med samma förnyelsetoken en andra gång anses använda en "roterad" förnyelsetoken och kommer att avvisas.
  5. Saknade obligatoriska data eller förfrågningshuvuden: När du skapar en bidragsförfrågan måste de obligatoriska parametrarna och förfrågningshuvudena anges för den givna bidragstypen. Till exempel måste klient-ID anges i alla bidragsförfrågningar, och klient-ID och klienthemlighet måste anges för klientreferensbidraget. Denna risk kan också minimeras genom att använda Logto SDK:er.
  6. Andra orsaker: Detta fel kan också uppstå på grund av orsaker som att klientreferenserna inte stämmer överens, bidrag har gått ut eller inte hittats, förnyelsetoken inte hittats, etc.

Felsökning

Några tips för att effektivt felsöka felet "invalid_grant":

  1. Använd alltid en Logto-klient SDK för att integrera Logto i din applikation, för att säkerställa att bidragsförfrågningarna görs till den respektive slutpunkten och med rätt data.
  2. Kontrollera att dina appreferenser och omdirigerings-URI:er stämmer överens med konfigurationerna i administrationskonsolen.
  3. Undvik att göra överflödiga förfrågningar, särskilt för SPAs som React och Vue, där sidkomponenter kan återges på grund av beroendeförändringar. Se till att funktionerna som används för att byta ut koder eller förnyelsetoken mot åtkomsttoken inte utlöses flera gånger med samma förfrågningsparametrar. Detta är ett vanligt misstag som gjorts av några av våra användare. Vanligtvis om du kan se flera "token"-förfrågningar i din felsökningskonsol, är den första framgångsrik men de efterföljande misslyckas alla, kontrollera deras förfrågningsparametrar för att se om de använder samma "kod" eller "förnyelsetoken". Kom ihåg, du kan bara använda en kod och förnyelsetoken EN GÅNG i bidragsförfrågningar.
  4. Kontrollera utgångstider. Till exempel, om din förnyelsetoken har gått ut (som standard 14 dagar) och du får felet invalid_grant, bör du hantera det korrekt genom att initiera en användarinloggningsflöde igen. Om du använder Logto SDK kan du anropa funktionen signIn() igen för att omdirigera dina användare tillbaka till inloggningssidan.
  5. Övervaka granskningsloggar. Gå till administrationskonsolen → Granskningsloggar, hitta felloggen som är associerad med incidenten och kontrollera den detaljerade felstackspåret. Vanligtvis finns det en mer specifik anledning i stackspåret bakom felet invalid_grant, såsom "Bidrag inte hittades" eller "Förnyelsetoken utgången".

Avslutande kommentarer

Felet invalid_grant kan vara utmanande och förvirrande för nybörjare, men med en klar förståelse av OIDC-bidrag och uppmärksamhet på detaljer kan du identifiera och hantera problemet själv. Delta i våra diskussioner på Discord eller GitHub, och låt oss veta om denna blogg har hjälpt till att klargöra förvirringen och identifiera de problem du står inför. Logto-utvecklingsteamet är alltid glada att hjälpa dig.

Tillsammans, låt oss bygga en sömlös och säker autentiseringsupplevelse för dina älskade applikationer.