Dela via


Anropa ett API från ett annat API

Hur ser du som utvecklare till Nolltillit när du har ett API som behöver anropa ett annat API? I den här artikeln får du lära dig hur du på ett säkert sätt utvecklar ditt program när det fungerar för en användares räkning.

När en användare kör en apps användargränssnitt kan appen använda en delegerad behörighet så att API:et vet vilken användare för vars räkning appen fungerar. Den skulle granska anspråket för ämne (under) eller objekt-ID (oid) och klient-ID (tid) i åtkomsttoken som appen tillhandahåller när api:et anropas. API:et skulle inte förlita sig på den ej betrodda appen, vilket bara är ett anrop som kommer från någonstans i nätverket. I stället validerar den token för att säkerställa att API:et endast fungerar för den appanvändare som Microsoft Entra-ID:t har verifierat.

När ett API (vi refererar till det som det ursprungliga API:et) anropar ett annat, är det viktigt att det API som vi anropar (vi kallar det underordnade API:et) följer den valideringsprocess som beskrivs ovan. Underordnade API:et kan inte förlita sig på en nätverkskälla som inte är betrodd. Den måste hämta användaridentiteten från en korrekt verifierad åtkomsttoken.

Om det underordnade API:et inte följer rätt valideringsprocess måste underordnade API:et förlita sig på det ursprungliga API:et för att tillhandahålla användarens identitet på ett annat sätt. Api:et för nedströms kan felaktigt använda en programbehörighet för att utföra åtgärden. Sedan skulle det ursprungliga API:et bli den enda auktoritet som användarna kan uppnå, vilket resulterar mot api:et downstream. Det ursprungliga API:et kan avsiktligt (eller oavsiktligt) tillåta en användare att utföra en uppgift som användaren annars inte kunde utföra. En användare kan till exempel ändra information om en annan användare eller läsa och uppdatera dokument som användaren inte har behörighet att komma åt. Felaktig validering kan orsaka allvarliga säkerhetsproblem.

För bättre säkerhet hämtar det ursprungliga API:et en delegerad behörighetsåtkomsttoken som ska tillhandahållas till api:et nedströms när det ursprungliga API:et gör anropet. Låt oss gå igenom hur det här fungerar.

Klientappen hämtar åtkomsttoken för att anropa ursprungligt API

Följande diagram visar klientappen och det ursprungliga API:et.

Diagrammet visar klientappen med ID och åtkomsttoken och det ursprungliga API som kräver auktorisering.

Klientprogrammet förvärvade en delegerad behörighetsåtkomsttoken (som anges av pentagonformen med etiketten "A") till det ursprungliga API:et. Den delegerade behörighetsåtkomsttoken gör att den kan fungera åt användaren för att anropa det ursprungliga API:et som kräver auktorisering.

Klientappen ger åtkomsttoken till det ursprungliga API:et

Följande animering visar klientappen som ger åtkomsttoken till det ursprungliga API:et. Det ursprungliga API:et verifierar och inspekterar åtkomsttoken för att fastställa identiteten för klientappens användare.

Animerat diagram visar klientappen som ger en åtkomsttoken till det ursprungliga API:et som kräver auktorisering.

Det ursprungliga API:et utför tokenverifiering och tillämpning

Nästa animering visar att när klientappen ger åtkomsttoken till det ursprungliga API:et utför det ursprungliga API:et tokenverifiering och tvingande. Om allt är bra fortsätter API:et och skickar begäran för klientappen.

Animerat diagram visar Klientapp med ID-token till vänster som ger åtkomsttoken till det ursprungliga API:et till höger.

Det ursprungliga API:et kan inte använda åtkomsttoken för att anropa nedströms-API

Följande animering visar att det ursprungliga API:et nu vill anropa ett underordnade API. Det ursprungliga API:et kan dock inte använda åtkomsttoken för att anropa underordnade API:et.

Animerat diagram visar klientappen som ger åtkomsttoken till ursprungligt API. Auktorisering krävs förhindrar att det ursprungliga API:et ger token till nedströms-API:et.

Ursprungligt API går tillbaka till Microsoft Entra-ID

I följande animering måste det ursprungliga API:et gå tillbaka till Microsoft Entra-ID. Den behöver en åtkomsttoken för att anropa nedströms-API:et för användarens räkning.

Animerat diagram visar klientapp som ger åtkomsttoken till ursprungligt API som behöver validering från Microsoft Entra-ID för att anropa underordnade API.

Nästa animering visar det ursprungliga API:et som tillhandahåller den token som det ursprungliga API:et tog emot från klientappen och det ursprungliga API:ets klientautentiseringsuppgifter.

Animerat diagram visar klientappen som ger åtkomsttoken till ursprungligt API som tar emot validering från Microsoft Entra-ID för att anropa underordnade API.

Microsoft Entra-ID söker efter saker som medgivande eller tillämpning av villkorsstyrd åtkomst. Du kan behöva gå tillbaka till den anropande klienten och ange en anledning till att inte kunna hämta token. Du använder vanligtvis en anspråksutmaningsprocess för att gå tillbaka till det anropande programmet med information om att samtycke inte tas emot (till exempel att vara relaterat till principer för villkorlig åtkomst).

Microsoft Entra ID utför kontroller

I följande animering utför Microsoft Entra ID sina kontroller. Om allt är okej utfärdar Microsoft Entra-ID en åtkomsttoken till det ursprungliga API:et för att anropa nedströms-API:et för användarens räkning.

Animerat diagram visar ursprungligt API som ger åtkomsttoken till nedströms-API efter validering med Microsoft Entra-ID.

Det ursprungliga API:et har användarkontext med on-behalf-of-flöde

Följande animering illustrerar OBO-processen (On-Behalf-Of Flow ) som gör att ett API kan fortsätta att ha användarkontexten när den anropar nedströms-API.

Animerat diagram visar det ursprungliga API:et som ger åtkomsttoken till nedströms-API:et.

Ursprungliga API-anrop nedströms-API

I nästa animering anropar vi api:et downstream. Den token som api:et för nedströms tar emot har rätt målgruppsanspråk (aud) som anger api:et underordnad.

Animerat diagram visar nedströms-API:et som validerar åtkomsttoken från det ursprungliga API:et.

Token innehåller omfången för beviljat medgivande och den ursprungliga appanvändaridentiteten. Underordnade API:et kan implementera effektiva behörigheter korrekt för att säkerställa att den identifierade användaren har behörighet att utföra den begärda uppgiften. Du vill använda för flödets räkning för att hämta token för ett API för att anropa ett annat API för att se till att användarkontexten skickas till alla underordnade API:er.

Bästa alternativet: Det ursprungliga API:et utför flödet För räkning

Den senaste animeringen visar att det bästa alternativet är att det ursprungliga API:et utför OBO (On-Behalf-Of Flow). Om api:et Downstream tar emot rätt token kan det svara korrekt.

Animerat diagram visar nedströms-API:et som tar emot åtkomsttoken från det ursprungliga API:et.

När ett API agerar för en användares räkning och behöver anropa ett annat API måste API:et använda OBO för att hämta en delegerad behörighetsåtkomsttoken för att anropa nedströms-API:et för användarens räkning. API:er bör aldrig använda programbehörigheter för att anropa underordnade API:er när API:et agerar för en användares räkning.

Nästa steg