Förstå åtkomst endast för program
När ett program har direkt åtkomst till en resurs, till exempel Microsoft Graph, är dess åtkomst inte begränsad till de filer eller åtgärder som är tillgängliga för en enskild användare. Appen anropar API:er direkt med sin egen identitet, och en användare eller app med administratörsbehörighet måste ge den behörighet att komma åt resurserna. Det här scenariot är endast programåtkomst.
När ska jag använda endast programåtkomst?
I de flesta fall är endast programåtkomst bredare och kraftfullare än delegerad åtkomst, så du bör bara använda åtkomst endast för appar där det behövs. Det är vanligtvis rätt val om:
- Programmet måste köras på ett automatiserat sätt utan användarindata. Till exempel ett dagligt skript som kontrollerar e-postmeddelanden från vissa kontakter och skickar automatiserade svar.
- Programmet måste komma åt resurser som tillhör flera olika användare. En app för säkerhetskopiering eller dataförlustskydd kan till exempel behöva hämta meddelanden från många olika chattkanaler, var och en med olika deltagare.
- Du är frestad att lagra autentiseringsuppgifter lokalt och låta appen logga in "som" användaren eller administratören.
Däremot bör du aldrig använda åtkomst endast för program där en användare normalt skulle logga in för att hantera sina egna resurser. Dessa typer av scenarier måste använda delegerad åtkomst för att vara minst privilegierad.
Auktorisera en app för att göra anrop endast för program
Om du bara vill göra appanrop måste du tilldela klientappen lämpliga approller. Approller kallas även för programbehörigheter. De är approller eftersom de endast beviljar åtkomst i kontexten för den resursapp som definierar rollen.
Om du till exempel vill läsa en lista över alla team som skapats i en organisation måste du tilldela programmet rollen Microsoft Graph-app Team.ReadBasic.All
. Den här approllen ger möjlighet att läsa dessa data när Microsoft Graph är resursappen. Den här tilldelningen tilldelar inte klientprogrammet till en Teams-roll som kan göra det möjligt för den att visa dessa data via andra tjänster.
Som utvecklare måste du konfigurera alla nödvändiga appbehörigheter, även kallade approller i din programregistrering. Du kan konfigurera appens begärda appbehörigheter via Azure Portal eller Microsoft Graph. Endast appåtkomst stöder inte dynamiskt medgivande, så du kan inte begära enskilda behörigheter eller uppsättningar med behörigheter vid körning.
När du har konfigurerat alla behörigheter som din app behöver måste den få administratörsmedgivande för att den ska få åtkomst till resurserna. Till exempel kan endast användare med rollen Privilegierad rolladministratör bevilja appbehörigheter (approller) för Microsoft Graph-API:et. Användare med andra administratörsroller, till exempel programadministratör och molnprogramadministratör, kan bevilja endast appbehörighet för andra resurser.
Administratörsanvändare kan bevilja endast appbehörigheter med hjälp av Azure Portal eller genom att skapa bidrag programmatiskt via Microsoft Graph API. Du kan också fråga efter interaktivt medgivande inifrån din app, men det här alternativet är inte att föredra eftersom endast appåtkomst inte kräver någon användare.
Konsumentanvändare med Microsoft-konton, till exempel Outlook.com- eller Xbox Live-konton, kan aldrig auktorisera åtkomst endast för program.
Följ alltid principen om minsta behörighet: du bör aldrig begära approller som appen inte behöver. Den här principen hjälper till att begränsa säkerhetsrisken om din app komprometteras och gör det enklare för administratörer att bevilja din app åtkomst. Om din app till exempel bara behöver identifiera användare utan att läsa deras detaljerade profilinformation bör du begära den mer begränsade Microsoft Graph-approllen User.ReadBasic.All
User.Read.All
i stället för .
Utforma och publicera approller för en resurstjänst
Om du skapar en tjänst på Microsoft Entra-ID som exponerar API:er för andra klienter att anropa, kanske du vill ha stöd för automatisk åtkomst med approller (endast appbehörigheter). Du kan definiera approllerna för ditt program i avsnittet Approller i din appregistrering i administrationscentret för Microsoft Entra. Mer information om hur du skapar approller finns i Deklarera roller för ett program.
När du exponerar approller som andra kan använda ger du tydliga beskrivningar av scenariot till administratören som ska tilldela dem. Approller bör i allmänhet vara så smala som möjligt och ha stöd för specifika funktionella scenarier, eftersom endast appåtkomst inte begränsas av användarrättigheter. Undvik att exponera en enskild roll som ger fullständig read
eller fullständig read/write
åtkomst till alla API:er och resurser som din tjänst innehåller.
Kommentar
Approller (endast appbehörigheter) kan också konfigureras för att stödja tilldelning till användare och grupper. Se till att du konfigurerar approllerna korrekt för ditt avsedda åtkomstscenario. Om du vill att api:ets approller ska användas för endast appåtkomst väljer du program som de enda tillåtna medlemstyperna när du skapar approllerna.
Hur fungerar endast programåtkomst?
Det viktigaste att komma ihåg om åtkomst endast för appar är att den anropande appen agerar för sin egen räkning och som sin egen identitet. Det finns ingen användarinteraktion. Om appen har tilldelats en viss approll för en resurs har appen fullständigt obegränsad åtkomst till alla resurser och åtgärder som styrs av den approllen.
När en app har tilldelats en eller flera approller (endast appbehörigheter) kan den begära en apptoken från Microsoft Entra-ID med hjälp av flödet för klientautentiseringsuppgifter eller något annat autentiseringsflöde som stöds. De tilldelade rollerna läggs till i anspråket roles
för appens åtkomsttoken.
I vissa scenarier kan programidentiteten avgöra om åtkomst beviljas, på samma sätt som användarrättigheter i ett delegerat anrop. Approllen Application.ReadWrite.OwnedBy
ger till exempel en app möjlighet att hantera tjänstens huvudnamn som själva appen äger.
Exempel på endast programåtkomst – Automatiserad e-postavisering via Microsoft Graph
I följande exempel visas ett realistiskt automatiseringsscenario.
Alice vill meddela ett team via e-post varje gång delningsrapporteringsmappen som finns i en Windows-filresurs registrerar ett nytt dokument. Alice skapar en schemalagd uppgift som kör ett PowerShell-skript för att undersöka mappen och hitta nya filer. Skriptet skickar sedan ett e-postmeddelande med en postlåda som skyddas av ett resurs-API, Microsoft Graph.
Skriptet körs utan någon användarinteraktion, därför kontrollerar auktoriseringssystemet endast programauktoriseringen. Exchange Online kontrollerar om klienten som anropar har beviljats programbehörighet (approll) Mail.Send
av administratören. Om Mail.Send
inte beviljas till appen misslyckas Exchange Online-begäran.
POST /users/{id}/{userPrincipalName}/sendMail | Klientappen har beviljats Mail.Send | Klientappen har inte beviljats Mail.Send |
---|---|---|
Skriptet använder Alices postlåda för att skicka e-postmeddelanden. | 200 – Åtkomst beviljas. Administratören tillät appen att skicka e-post som alla användare. | 403 – Obehörig. Administratören har inte tillåtit den här klienten att skicka e-postmeddelanden. |
Skriptet skapar en dedikerad postlåda för att skicka e-postmeddelanden. | 200 – Åtkomst beviljas. Administratören tillät appen att skicka e-post som alla användare. | 403 – Obehörig. Administratören har inte tillåtit den här klienten att skicka e-postmeddelanden. |
Exemplet är en enkel bild av programauktorisering. Exchange Online-produktionstjänsten stöder många andra åtkomstscenarier, till exempel att begränsa programbehörigheter till specifika Exchange Online-postlådor.