Använda Azure AD för att få åtkomst till Intune API:er i Microsoft Graph

Microsoft Graph API har nu stöd för Microsoft Intune med specifika API:er och behörighetsroller. Microsoft Graph API använder Azure Active Directory (Azure AD) för autentisering och åtkomstkontroll.
För åtkomst till Intune API:er i Microsoft Graph krävs:

  • Ett program-ID med:

    • Behörighet att anropa Azure AD och Microsoft Graph API:er.
    • Behörighetsomfattning som avser aktiviteter för specifika program.
  • Användarautentiseringsuppgifter med:

    • Behörighet att få åtkomst till Azure AD-klienten som är associerad med programmet.
    • Rollbehörigheter krävs för att stödja behörighetsomfattningen för programmet.
  • Slutanvändaren kan bevilja behörighet så att appen kan utföra uppgifter för program i sin Azure-klient.

Den här artikeln:

  • Visar hur du registrerar ett program med åtkomst till Microsoft Graph API och relevanta behörighetsroller.

  • Beskriver Intune API:ns behörighetsroller.

  • Visar exempel på autentisering av Intune API för C# och PowerShell.

  • Beskriver hur du ger stöd för flera klientorganisationer.

Mer information finns i:

Registrera appar för att använda Microsoft Graph API

Registrera en app för att använda Microsoft Graph API:

  1. Logga in på Microsoft Endpoint Manager administrationscenter med administratörsbehörighet.

    Om det behövs kan du använda:

    • Klientorganisationens administratörskonto.
    • Ett användarkonto för klientorganisationen med inställningen Användare kan registrera program aktiverad.
  2. Välj Alla tjänster > M365 Azure Active Directory > Azure Active Directory > Appregistreringar.

    The App registrations menu command
  3. Välj antingen Ny registrering för att skapa ett nytt program eller välj ett befintligt program. (Om du väljer ett befintligt program hoppar du över nästa steg.)

  4. I fönstret Registrera ett program anger du följande:

  5. Från programfönstret:

    1. Observera värdet program-ID (klient).

    2. Välj API-behörigheter.

  6. I fönstret API-behörigheter väljer du Lägg till en behörighet Microsoft > API:er > Microsoft Graph. Välj sedan den typ av behörigheter som programmet kräver.

    Välj de roller som krävs för din app genom att göra en bockmarkering till vänster om namnen. Mer information om specifika behörighetsomfattningar för Intune finns i Intunes behörighetsomfattningar. Mer information om andra behörighetsomfattningar för Graph API finns i Behörighetsreferens för Microsoft Graph.

    För att få bäst resultat väljer du det minsta antal roller som krävs för att implementera ditt program.

Informationslager- och rapporteringsbehörigheter

När du lägger till ett program via Azure Active Directory administrationscenter kan du välja Intune API-behörigheter baserat på kraven för ditt program.

  • get_data_warehouse – Använd den här API-behörigheten för att bevilja åtkomst till API:et för Intune-informationslager från Microsoft Intune. Mer information finns i Använda Microsoft Intune Data Warehouse.

API:er för partnerlösningar

Följande Intune API-behörigheter är tillgängliga när du lägger till ett program via Azure Active Directory administrationscenter:

  • get_device_compliance – Den här API-behörigheten används för att hämta information om enhetstillstånd och efterlevnad från Microsoft Intune. Den här API-behörigheten används av Network Access Control-partner. Mer information finns i Network Access Control integration with Intune.
  • manage_partner_compliance_policy – Den här API-behörigheten används för att hantera partnerefterlevnadsprinciper med Microsoft Intune. Med den här API-behörigheten kan appen skicka partnerefterlevnadsprinciper och dess Azure AD-grupptilldelning till Microsoft Intune utan en inloggad användare. Den används av partner för enhetsefterlevnad. Mer information finns i Tredjepartspartner för enhetsefterlevnad.
  • pfx_cert_provider – Den här API-behörigheten används för att skicka PFX-certifikat till Intune för en specifik användare. Intune levererar certifikatet till alla enheter som har registrerats av användaren. Mer information finns i PFX Import Powershell.
  • scep_challenge_provider – Den här API-behörigheten används för att skicka SCEP-utmaningar till Intune för verifiering av certifikatbegäran. Den används av certifikatutfärdares partner. Mer information finns i Partner Certification Authority.
  • send_data_usage – Den här API-behörigheten används för att utlösa principändringar för enheter baserat på tröskelvärden för kostnadshantering av telekommunikation. Den används för partnerintegrering av kostnadshantering för telekommunikation. Mer information finns i Kostnadshantering av telekommunikation i Intune.
  • update_device_attributes – Den här API-behörigheten används för att skicka enhetsinformation till Intune från partner för enhetsefterlevnad och skydd mot mobilhot. Mer information finns i Mobile Threat Defense-integrering med Intune och Tredjepartspartner för enhetsefterlevnad.
  • update_device_health – Den här API-behörigheten används för att skicka information om enhetens hälsotillstånd och hotstatus till Intune från mobile threat defense-partner. Mer information finns i Mobile Threat Defense-integrering med Intune.

Om du är en partner som är intresserad av att integrera med Intune med hjälp av dessa API-behörigheter kan du kontakta Microsoft Intelligent Security Association]-teamet för information.

När du är klar väljer du Lägg till behörigheter för att spara ändringarna.

Du kan nu också:

  • Välja att bevilja behörighet för att alla klientkonton ska kunna använda appen utan att ange autentiseringsuppgifter.

    Om du vill göra det kan du bevilja behörigheter och godkänna bekräftelsemeddelandet.

    När du kör programmet första gången uppmanas du att ge appen behörighet att utföra de valda rollerna.

  • Gör appen tillgänglig för användare utanför din klientorganisation. (Detta krävs vanligtvis endast för partners som har stöd för flera innehavare/organisationer.)

    Så här gör du:

    1. Välj Manifest i programfönstret.

      The Edit manifest blade
    2. Ändra värdet i inställningen availableToOtherTenants till true.

    3. Spara ändringarna.

Behörighetsomfattningar för Intune

Azure AD och Microsoft Graph använder behörighetsomfattningar för att styra åtkomsten till företagets resurser.

Behörighetsomfattningen (kallas även OAuth-omfattningar) styr åtkomsten till specifika Intune-entiteter och deras egenskaper. Det här avsnittet sammanfattar behörighetsomfattningarna för Intune API-funktionerna.

Mer information:

När du beviljar behörighet för Microsoft Graph kan du ange följande omfattningar för att styra åtkomsten till Intune-funktioner: I följande tabell sammanfattas behörighetsomfattningarna för Intune API. Den första kolumnen visar namnet på funktionen som det visas i Microsoft Endpoint Manager administrationscenter och den andra kolumnen innehåller namnet på behörighetsomfånget.

Inställningen Aktivera åtkomst Namn på sökomfång
Utföra användarpåverkande fjärråtgärder på Microsoft Intune-enheter DeviceManagementManagedDevices.PrivilegedOperations.All
Läsa och skriva Microsoft Intune-enheter DeviceManagementManagedDevices.ReadWrite.All
Läsa Microsoft Intune-enheter DeviceManagementManagedDevices.Read.All
Läsa och skriva RBAC-inställningar för Microsoft Intune DeviceManagementRBAC.ReadWrite.All
Läsa RBAC-inställningar för Microsoft Intune DeviceManagementRBAC.Read.All
Läsa och skriva Microsoft Intune-appar DeviceManagementApps.ReadWrite.All
Läsa Microsoft Intune-appar DeviceManagementApps.Read.All
Läsa och skriva enhetskonfiguration och principer för Microsoft Intune DeviceManagementConfiguration.ReadWrite.All
Läsa enhetskonfiguration och principer för Microsoft Intune DeviceManagementConfiguration.Read.All
Läsa och skriva Microsoft Intune-konfiguration DeviceManagementServiceConfig.ReadWrite.All
Läsa Microsoft Intune-konfiguration DeviceManagementServiceConfig.Read.All

Tabellen visar inställningarna som de visas i Microsoft Endpoint Manager administrationscentret. I följande avsnitt beskrivs omfattningarna i alfabetisk ordning.

Behörighetsomfattningar för Intune kräver för närvarande administratörsåtkomst. Detta innebär att du måste ha motsvarande autentiseringsuppgifter när du kör appar eller skript som har åtkomst till Intune API-resurser.

DeviceManagementApps.Read.All

  • Inställningen Aktivera åtkomst: Läsa Microsoft Intune-appar

  • Tillåter läsbehörighet till följande entitetsegenskaper och status:

    • Klientappar
    • Kategorier för mobilappar
    • Appskyddsprinciper
    • Appkonfigurationer

DeviceManagementApps.ReadWrite.All

  • Inställningen Aktivera åtkomst: Läsa och skriva Microsoft Intune-appar

  • Tillåter samma åtgärder som DeviceManagementApps.Read.All

  • Tillåter också ändringar i följande entiteter:

    • Klientappar
    • Kategorier för mobilappar
    • Appskyddsprinciper
    • Appkonfigurationer

DeviceManagementConfiguration.Read.All

  • Inställningen Aktivera åtkomst: Läs Microsoft Intune-enhetskonfiguration och principer

  • Tillåter läsbehörighet till följande entitetsegenskaper och status:

    • Enhetskonfiguration
    • Efterlevnadsprincip för enhet
    • Meddelanden

DeviceManagementConfiguration.ReadWrite.All

  • Inställningen Aktivera åtkomst: Läs och skriv Microsoft Intune-enhetskonfiguration och principer

  • Tillåter samma åtgärder som DeviceManagementConfiguration.Read.All

  • Appar kan också skapa, tilldela, ta bort och ändra följande entiteter:

    • Enhetskonfiguration
    • Efterlevnadsprincip för enhet
    • Meddelanden

DeviceManagementManagedDevices.PrivilegedOperations.All

  • Inställningen Aktivera åtkomst: Utföra användarpåverkande fjärråtgärder på Microsoft Intune-enheter

  • Tillåter följande fjärråtgärder på en hanterad enhet:

    • Pensionera
    • Rensning
    • Återställa lösenord
    • Fjärrlåsning
    • Aktivera/inaktivera borttappat läge
    • Rensa datorn
    • Starta om datorn
    • Ta bort användare från en delad enhet

DeviceManagementManagedDevices.Read.All

  • Inställningen Aktivera åtkomst: Läsa Microsoft Intune-enheter

  • Tillåter läsbehörighet till följande entitetsegenskaper och status:

    • Hanterad enhet
    • Enhetskategori
    • Identifierad app
    • Fjärråtgärder
    • Information om skadlig kod

DeviceManagementManagedDevices.ReadWrite.All

  • Inställningen Aktivera åtkomst: Läsa och skriva Microsoft Intune-enheter

  • Tillåter samma åtgärder som DeviceManagementManagedDevices.Read.All

  • Appar kan också skapa, ta bort och ändra följande entiteter:

    • Hanterad enhet
    • Enhetskategori
  • Följande fjärråtgärder är också tillåtna:

    • Hitta enheter
    • Inaktivera aktiveringslås
    • Begära fjärrhjälp

DeviceManagementRBAC.Read.All

  • Inställningen Aktivera åtkomst: Läsa RBAC-inställningar för Microsoft Intune

  • Tillåter läsbehörighet till följande entitetsegenskaper och status:

    • Rolltilldelningar
    • Rolldefinitioner
    • Resursåtgärder

DeviceManagementRBAC.ReadWrite.All

  • Inställningen Aktivera åtkomst: Läsa och skriva RBAC-inställningar för Microsoft Intune

  • Tillåter samma åtgärder som DeviceManagementRBAC.Read.All

  • Appar kan också skapa, tilldela, ta bort och ändra följande entiteter:

    • Rolltilldelningar
    • Rolldefinitioner

DeviceManagementServiceConfig.Read.All

  • Inställningen Aktivera åtkomst: Läsa Microsoft Intune-konfiguration

  • Tillåter läsbehörighet till följande entitetsegenskaper och status:

    • Enhetsregistrering
    • Apple Push Notification-certifikat
    • Apples DEP (Device Enrollment Program)
    • Apples volymköpsprogram
    • Exchange Connector
    • Villkor
    • Kostnadsuppföljning av telekommunikation
    • Moln-PKI
    • Anpassning
    • Mobile Threat Defense

DeviceManagementServiceConfig.ReadWrite.All

  • Inställningen Aktivera åtkomst: Läsa och skriva Microsoft Intune-konfiguration

  • Tillåter samma åtgärder som DeviceManagementServiceConfig.Read.All_

  • Appar kan också konfigurera följande Intune-funktioner:

    • Enhetsregistrering
    • Apple Push Notification-certifikat
    • Apples DEP (Device Enrollment Program)
    • Apples volymköpsprogram
    • Exchange Connector
    • Villkor
    • Kostnadsuppföljning av telekommunikation
    • Moln-PKI
    • Anpassning
    • Mobile Threat Defense

Azure AD-autentiseringsexempel

I det här avsnittet visas hur du införlivar Azure AD i dina C#- och PowerShell-projekt.

I varje exempel måste du ange ett program-ID som har minst behörighetsomfattningen DeviceManagementManagedDevices.Read.All (se ovan).

När du testar något av exemplen kan du få HTTP-statusfel 403 (Förbjuden) som liknar följande:

{
  "error": {
    "code": "Forbidden",
    "message": "Application is not authorized to perform this operation - Operation ID " +
       "(for customer support): 00000000-0000-0000-0000-000000000000 - " +
       "Activity ID: cc7fa3b3-bb25-420b-bfb2-1498e598ba43 - " +
       "Url: https://example.manage.microsoft.com/" +
       "Service/Resource/RESTendpoint?" +
       "api-version=2017-03-06 - CustomApiErrorPhrase: ",
    "innerError": {
      "request-id": "00000000-0000-0000-0000-000000000000",
      "date": "1980-01-0112:00:00"
    }
  }
}

Om det händer kontrollerar du att:

  • Du har uppdaterat program-ID:t till en behörighet att använda Microsoft Graph-API och behörighetsomfattningen DeviceManagementManagedDevices.Read.All.

  • Dina autentiseringsuppgifter för klienten har stöd för administrativa funktioner.

  • Koden liknar de exempel som visas.

Autentisera Azure AD i C#

I det här exemplet visas hur du använder C# för att hämta en lista med enheter som är kopplade till ditt Intune-konto.

Anteckning

Azure Active Directory-autentiseringsbibliotek (ADAL) och Azure AD Graph API kommer att bli inaktuella. Mer information finns i Uppdatera dina program för användning med Microsoft Authentication Library (MSAL) och Microsoft Graph API.

  1. Starta Visual Studio och skapa sedan ett nytt projekt i Visual C#-konsolens app (.NET Framework).

  2. Ange ett namn på ditt projekt och även annan information om du vill.

    Creating a C# console app project in Visual Studio
  3. Använd Solution Explorer för att lägga till Microsoft ADAL NuGet-paketet i projektet:

    1. Högerklicka på Solution Explorer.
    2. Välj Hantera NuGet-paket... > Bläddra.
    3. Välj Microsoft.IdentityModel.Clients.ActiveDirectory och sedan Installera.
    Selecting the Azure AD identity model module
  4. Lägg till följande uttryck överst i Program.cs:

    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using System.Net.Http;
    
  5. Lägg till en metod för att skapa auktoriseringsrubriken:

    private static async Task<string> GetAuthorizationHeader()
    {
        string applicationId = "<Your Application ID>";
        string authority = "https://login.microsoftonline.com/common/";
        Uri redirectUri = new Uri("urn:ietf:wg:oauth:2.0:oob");
        AuthenticationContext context = new AuthenticationContext(authority);
        AuthenticationResult result = await context.AcquireTokenAsync(
            "https://graph.microsoft.com",
            applicationId, redirectUri,
            new PlatformParameters(PromptBehavior.Auto));
        return result.CreateAuthorizationHeader();
    

    Kom ihåg att ändra värdet för application_ID så att det minst matchar behörighetsomfattningen DeviceManagementManagedDevices.Read.All, enligt beskrivningen ovan.

  6. Lägg till en metod för att hämta listan med enheter:

    private static async Task<string> GetMyManagedDevices()
    {
        string authHeader = await GetAuthorizationHeader();
        HttpClient graphClient = new HttpClient();
        graphClient.DefaultRequestHeaders.Add("Authorization", authHeader);
        return await graphClient.GetStringAsync(
            "https://graph.microsoft.com/beta/me/managedDevices");
    }
    
  7. Uppdatera Main att anropa GetMyManagedDevices:

    string devices = GetMyManagedDevices().GetAwaiter().GetResult();
    Console.WriteLine(devices);
    
  8. Kompilera och kör programmet.

Du bör få två frågor när du kör programmet första gången. Först begär den dina autentiseringsuppgifter och sedan ger den behörighet för managedDevices-begäran.

Som referens visas här det slutförda programmet:

using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace IntuneGraphExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string devices = GetMyManagedDevices().GetAwaiter().GetResult();
            Console.WriteLine(devices);
        }

        private static async Task<string> GetAuthorizationHeader()
        {
            string applicationId = "<Your Application ID>";
            string authority = "https://login.microsoftonline.com/common/";
            Uri redirectUri = new Uri("urn:ietf:wg:oauth:2.0:oob");
            AuthenticationContext context = new AuthenticationContext(authority);
            AuthenticationResult result = await context.AcquireTokenAsync("https://graph.microsoft.com", applicationId, redirectUri, new PlatformParameters(PromptBehavior.Auto));
            return result.CreateAuthorizationHeader();
        }

        private static async Task<string> GetMyManagedDevices()
        {
            string authHeader = await GetAuthorizationHeader();
            HttpClient graphClient = new HttpClient();
            graphClient.DefaultRequestHeaders.Add("Authorization", authHeader);
            return await graphClient.GetStringAsync("https://graph.microsoft.com/beta/me/managedDevices");
        }
    }
}

Autentisera Azure AD (PowerShell)

Följande PowerShell-skript använder AzureAD PowerShell-modulen för autentisering. Läs mer i Azure Active Directory PowerShell Version 2 och Intune PowerShell-exempel.

I det här exemplet uppdateras värdet för $clientID så att det matchar ett giltigt program-ID.

function Get-AuthToken {
    [cmdletbinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $User
    )

    $userUpn = New-Object "System.Net.Mail.MailAddress" -ArgumentList $User
    $tenant = $userUpn.Host

    Write-Host "Checking for AzureAD module..."

    $AadModule = Get-Module -Name "AzureAD" -ListAvailable
    if ($AadModule -eq $null) {
        Write-Host "AzureAD PowerShell module not found, looking for AzureADPreview"
        $AadModule = Get-Module -Name "AzureADPreview" -ListAvailable
    }

    if ($AadModule -eq $null) {
        write-host
        write-host "AzureAD Powershell module not installed..." -f Red
        write-host "Install by running 'Install-Module AzureAD' or 'Install-Module AzureADPreview' from an elevated PowerShell prompt" -f Yellow
        write-host "Script can't continue..." -f Red
        write-host
        exit
    }

    # Getting path to ActiveDirectory Assemblies
    # If the module count is greater than 1 find the latest version

    if ($AadModule.count -gt 1) {
        $Latest_Version = ($AadModule | select version | Sort-Object)[-1]
        $aadModule = $AadModule | ? { $_.version -eq $Latest_Version.version }
        $adal = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
        $adalforms = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"
    }

    else {
        $adal = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
        $adalforms = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"
    }

    [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null
    [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null

    $clientId = "<Your Application ID>"
    $redirectUri = "urn:ietf:wg:oauth:2.0:oob"
    $resourceAppIdURI = "https://graph.microsoft.com"
    $authority = "https://login.microsoftonline.com/$Tenant"

    try {
        $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
        # https://msdn.microsoft.com/library/azure/microsoft.identitymodel.clients.activedirectory.promptbehavior.aspx
        # Change the prompt behaviour to force credentials each time: Auto, Always, Never, RefreshSession
        $platformParameters = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" -ArgumentList "Auto"
        $userId = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier" -ArgumentList ($User, "OptionalDisplayableId")
        $authResult = $authContext.AcquireTokenAsync($resourceAppIdURI, $clientId, $redirectUri, $platformParameters, $userId).Result
        # If the accesstoken is valid then create the authentication header
        if ($authResult.AccessToken) {
            # Creating header for Authorization token
            $authHeader = @{
                'Content-Type' = 'application/json'
                'Authorization' = "Bearer " + $authResult.AccessToken
                'ExpiresOn' = $authResult.ExpiresOn
            }
            return $authHeader
        }
        else {
            Write-Host
            Write-Host "Authorization Access Token is null, please re-run authentication..." -ForegroundColor Red
            Write-Host
            break
        }
    }
    catch {
        write-host $_.Exception.Message -f Red
        write-host $_.Exception.ItemName -f Red
        write-host
        break
    }   
}

$authToken = Get-AuthToken -User "<Your AAD Username>"

try {
    $uri = "https://graph.microsoft.com/beta/me/managedDevices"
    Write-Verbose $uri
    (Invoke-RestMethod -Uri $uri –Headers $authToken –Method Get).Value
}
catch {
    $ex = $_.Exception
    $errorResponse = $ex.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($errorResponse)
    $reader.BaseStream.Position = 0
    $reader.DiscardBufferedData()
    $responseBody = $reader.ReadToEnd();
    Write-Host "Response content:`n$responseBody" -f Red
    Write-Error "Request to $Uri failed with HTTP Status $($ex.Response.StatusCode) $($ex.Response.StatusDescription)"
    write-host
    break
}

Stöd för flera klienter och partners

Om din organisation har stöd för organisationer med egna Azure AD-klienter, kanske du vill tillåta att de använder programmet med sina klienter.

Så här gör du:

  1. Kontrollera att klientens konto finns i målets Azure AD-klient.

  2. Kontrollera att ditt klientkonto tillåter att användare registrerar program (se Användarinställningar).

  3. Upprätta en relation mellan varje klient.

    Gör detta genom att antingen:

    a. Använda Microsoft Partner Center till att definiera en relation med din klient och deras e-postadress.

    b. Bjuda in användaren att bli gäst i din klient.

Så här bjuder du in användaren att bli gäst i din klient:

  1. Välj Lägg till en gästanvändare i panelen Snabbuppgifter.

    Use Quick Tasks to add a guest user
  2. Ange klientens e-postadress och lägg till ett personligt meddelande i inbjudan (valfritt).

    Inviting an external user as a guest
  3. Välj Bjud in.

En inbjudan skickas till användaren.

A sample guest invitation

Användaren måste välja länken Kom igång för att acceptera din inbjudan.

När relationen upprättas (eller när din inbjudan har accepterats), läggs användarkontot till i Katalogroll.

Kom ihåg att lägga till användaren i andra roller om det behövs. Om du till exempel vill tillåta att användarna hanterar Intune-inställningar, måste de antingen vara Global administratör eller Intune-tjänstadministratör.

Du kan också:

  • Använd https://admin.microsoft.com om du vill tilldela en Intune-licens till ditt användarkonto.

  • Uppdatera programkod för att autentisera till klientens Azure AD-klientdomän i stället för din egen.

    Om din klientdomän exempelvis är contosopartner.onmicrosoft.com och klientens klientdomän är northwind.onmicrosoft.com, uppdaterar du din kod till att autentisera till klientens klient.

    Om du gör det i ett C#-program baserat på det tidigare exemplet, ändrar du värdet för authority-variabeln:

    string authority = "https://login.microsoftonline.com/common/";
    

    string authority = "https://login.microsoftonline.com/northwind.onmicrosoft.com/";