Exempel på API som skyddas av Microsofts ramverk för identitetsmedgivande

Den här artikeln kan hjälpa dig som utvecklare att utforma din strategi för programbehörigheter för att ge minst behörighet. Innan du fortsätter kan du läsa artikeln om API-skydd för att lära dig metodtips för registrering, definiera behörigheter och medgivande samt framtvinga åtkomst.

Låt oss ta en titt på hur ett API som skyddas av Microsofts identitetsplattform använder Microsofts ramverk för identitetsmedgivande. Vi använder Microsoft Graph-API:et som vårt exempel eftersom det gör den mest omfattande användningen av ramverket för Microsofts identitetsplattform medgivande.

Namngivningskonvention för behörighetsnamn

Microsoft Graph-teamet skapade en namngivningskonvention för behörighetsnamn för att göra det enklare att ansluta behörigheten till den resursåtkomst som behörigheten aktiverar. Microsoft Graph-behörighetsnamn följer ett enkelt resource.operation.constraint-mönster . De två primära åtgärderna är Read och ReadWrite (som inkluderar uppdatering och borttagning).

Villkorselementet påverkar den åtkomstgrad som appen har i katalogen. Microsoft Graph har stöd för följande begränsningar:

  • Alla beviljar behörighet för din app att utföra åtgärderna på alla resurser av den angivna typen i en katalog.
  • Delade beviljar behörighet för din app att utföra åtgärder på resurser som andra användare har delat med den inloggade användaren.
  • AppFolder ger din app behörighet att läsa och skriva filer i en dedikerad mapp i OneDrive. Den här begränsningen exponeras endast för objektet Filer-behörigheter och är endast giltig för Microsoft-konton.
  • Om du anger Ingen begränsning kan appen bara utföra åtgärderna på de resurser som den inloggade användaren äger.

Åtkomst och åtgärder mot specifika resurser

Nu ska vi titta på några behörigheter eller omfång för användarobjektet i Microsoft Graph för att se hur Microsoft API-designers har aktiverat specifik åtkomst och åtgärder mot specifika resurser:

Behörighet Visa sträng beskrivning
User.Read Logga in och läsa användarprofil Tillåter användare att logga in på appen och gör att appen kan läsa profilen för inloggade användare. Det gör också att appen kan läsa grundläggande företagsinformation för inloggade användare.
User.ReadWrite Läs- och skrivåtkomst till användarprofil Tillåter att appen läser den inloggade användarens fullständiga profil. Det gör också att appen kan uppdatera den inloggade användarens profilinformation för deras räkning.

User.Readoch User.ReadWrite finns (i motsats till en enda behörighet som User.Access den finns inte) så att program kan följa Nolltillit principen om lägsta behörighet. Om utvecklaren inte har något krav och kod för att uppdatera användarens profil kommer appen inte att be User.ReadWriteom . Därför kan en angripare inte kompromettera programmet och använda det för att ändra data.

Observera att User.Read inte bara ger programmet åtkomst till användarobjektet. Varje behörighet representerar ett visst åtgärdsområde. Det är viktigt att utvecklare och administratörer läser behörighetsbeskrivningen för att se exakt vad en specifik behörighet möjliggör. User.Read, förutom att aktivera läsning av den aktuella användarens fullständiga profil, gör det möjligt för programmet att se grundläggande information från organisationsobjektet i Microsoft Graph.

Nu ska vi titta på en annan behörighet:

Behörighet Visa sträng beskrivning
User.ReadBasic.All Läs alla användares grundläggande profiler Gör att appen kan läsa en grundläggande uppsättning profilegenskaper för andra användare i organisationen för den inloggade användarens räkning. Innehåller visningsnamn, för- och efternamn, e-postadress, öppna tillägg och foto. Tillåter att appen läser den inloggade användarens fullständiga profil.

Åtgärdsintervallet som User.ReadBasic.All börjar med allt som gör det User.Read . Dessutom kan du komma åt visningsnamn, för- och efternamn, e-postadress, foto och öppna tillägg för andra organisationsanvändare. Det specifika åtgärdsintervallet gör det möjligt för program att ha ett trevligt användargränssnitt för personväljaren och är ett exempel på API-designers som använder en behörighet för att aktivera ett visst åtgärdsintervall.

Nu ska vi titta på några fler behörigheter för Microsoft Graph-användarobjektet:

Behörighet Visa sträng beskrivning
User.Read.All Läs alla användares fullständiga profiler Gör att appen kan läsa den fullständiga uppsättningen profilegenskaper, rapporter och chefer för andra användare i din organisation för den inloggade användarens räkning.
User.ReadWrite.All Läsa och skriva alla användares fullständiga profiler Gör att appen kan läsa och skriva hela uppsättningen profilegenskaper, rapporter och chefer för andra användare i din organisation för den inloggade användarens räkning. Gör också att appen kan skapa och ta bort användare och återställa användarlösenord för den inloggade användarens räkning.

Precis som med User.Read och User.Read.AllUser.ReadWrite, och User.ReadWrite.All är distinkta behörigheter som gör det möjligt för ett program att följa principen med minst behörighet Nolltillit.

User.Read.All är intressant eftersom alla användare i organisationen har den här funktionen (till exempel öppna Outlook, gå upp och ned i en rapporteringskedja). Som individ kan du se den fullständiga användarprofilen för alla andra användare i din organisation. Microsoft Graph API-designers beslutade dock att endast administratörer ska tillåta att ett program utför samma åtgärd eftersom User.Read.All den innehåller klientorganisationens organisationshierarki. Om en dålig aktör har åtkomst till den här informationen kan de utföra en riktad nätfiskeattack där nätfiskemeddelandet kom från en persons chef eller chefens chef.

User.ReadWrite.All är ett kraftfullt åtgärdsområde. Ett program som beviljats den här behörigheten kan uppdatera eller till och med ta bort alla användare i klientorganisationen. När en användare är framför appen som delegerad behörighet kan appen bara göra vad den aktuella användaren kan göra. Vanliga användare kan inte uppdatera eller ta bort andra användare oavsett appens behörigheter. Men när en klientorganisationsadministratör använder appen kan de utföra dessa åtgärder. När du bestämmer dig för att bevilja eller neka den här behörigheten bör du utvärdera din app med en klientadministratörsanvändare i åtanke.

Med tanke på kraften i User.Read.All och User.ReadWrite.Allangav Microsoft Graph API-designers dessa behörigheter som kräver administratörsmedgivande. Ska vi lägga till en administratör? Kolumn till vår tabell med behörigheter för att ange när behörigheten kräver administratörsmedgivande:

Behörighet Visa sträng beskrivning Admin?
User.Read Logga in och läsa användarprofil Tillåter användare att logga in på appen och gör att appen kan läsa profilen för inloggade användare. Det gör också att appen kan läsa grundläggande företagsinformation för inloggade användare. Nej
User.ReadWrite Läs- och skrivåtkomst till användarprofil Tillåter att appen läser den inloggade användarens fullständiga profil. Det gör också att appen kan uppdatera den inloggade användarens profilinformation för deras räkning. Nej
User.ReadBasic.All Läs alla användares grundläggande profiler Gör att appen kan läsa en grundläggande uppsättning profilegenskaper för andra användare i organisationen för den inloggade användarens räkning. Innehåller visningsnamn, för- och efternamn, e-postadress, öppna tillägg och foto. Tillåter att appen läser den inloggade användarens fullständiga profil. Nej
User.Read.All Läs alla användares fullständiga profiler Gör att appen kan läsa den fullständiga uppsättningen profilegenskaper, rapporter och chefer för andra användare i din organisation för den inloggade användarens räkning. Ja
User.ReadWrite.All Läsa och skriva alla användares fullständiga profiler Gör att appen kan läsa och skriva hela uppsättningen profilegenskaper, rapporter och chefer för andra användare i din organisation för den inloggade användarens räkning. Gör också att appen kan skapa och ta bort användare och återställa användarlösenord för den inloggade användarens räkning. Ja

Som visas i artikeln Begära behörigheter som kräver administrativt medgivande kan klientadministratörer åsidosätta kraven och ange alla eller alla programbehörigheter i klientorganisationen som kräver administratörsmedgivande. Det är klokt att utforma din app så att den hanteras korrekt när du inte tar emot en token från din begäran. Brist på medgivande är en av många orsaker till att din app kanske inte får en token.

Nästa steg