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:
- Bevilja åtkomst till webbprogram med hjälp av OAuth 2.0 och Azure Active Directory
- Komma igång med Azure AD-autentisering
- Integrera program med Azure Active Directory
- Förstå OAuth 2.0
Registrera appar för att använda Microsoft Graph API
Registrera en app för att använda Microsoft Graph API:
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.
Välj Alla tjänster > M365 Azure Active Directory > Azure Active Directory > Appregistreringar.
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.)
I fönstret Registrera ett program anger du följande:
Ett Namn på programmet (visas när användarna loggar in).
Kontotypen som stöds.
Ett omdirigerings-URI-värde. Det här värdet är alternativet .
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.
Läs mer i Autentiseringsscenarier för Azure AD.
Från programfönstret:
Observera värdet program-ID (klient).
Välj API-behörigheter.
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:
Välj Manifest i programfönstret.
Ändra värdet i inställningen
availableToOtherTenantstilltrue.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.
Starta Visual Studio och skapa sedan ett nytt projekt i Visual C#-konsolens app (.NET Framework).
Ange ett namn på ditt projekt och även annan information om du vill.
Använd Solution Explorer för att lägga till Microsoft ADAL NuGet-paketet i projektet:
- Högerklicka på Solution Explorer.
- Välj Hantera NuGet-paket... > Bläddra.
- Välj
Microsoft.IdentityModel.Clients.ActiveDirectoryoch sedan Installera.
Lägg till följande uttryck överst i Program.cs:
using Microsoft.IdentityModel.Clients.ActiveDirectory; using System.Net.Http;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_IDså att det minst matchar behörighetsomfattningenDeviceManagementManagedDevices.Read.All, enligt beskrivningen ovan.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"); }Uppdatera Main att anropa GetMyManagedDevices:
string devices = GetMyManagedDevices().GetAwaiter().GetResult(); Console.WriteLine(devices);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:
Kontrollera att klientens konto finns i målets Azure AD-klient.
Kontrollera att ditt klientkonto tillåter att användare registrerar program (se Användarinställningar).
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:
Välj Lägg till en gästanvändare i panelen Snabbuppgifter.
Ange klientens e-postadress och lägg till ett personligt meddelande i inbjudan (valfritt).
Välj Bjud in.
En inbjudan skickas till användaren.
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.comoch klientens klientdomän ärnorthwind.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/";på
string authority = "https://login.microsoftonline.com/northwind.onmicrosoft.com/";