Verwalten einer Azure AD-Anwendung mit Microsoft Graph
Artikel
16 Minuten Lesedauer
Ihre App muss in Azure AD registriert werden, bevor die Microsoft Identity Platform sie für den Zugriff auf Daten autorisieren kann, die in Azure Active Directory (Azure AD) oder Microsoft 365-Mandanten gespeichert sind. Diese Bedingung gilt für Apps, die Sie selbst entwickeln, die sich im Besitz Ihrer Organisation befinden oder auf die Sie über ein aktives Abonnement zugreifen.
Viele Einstellungen für Apps werden als Objekte aufgezeichnet, auf die mit Microsoft Graph zugegriffen, aktualisiert oder gelöscht werden kann. In diesem Artikel erfahren Sie, wie Sie Microsoft Graph verwenden, um App- und Dienstprinzipalobjekte zu verwalten, einschließlich der Eigenschaften, Berechtigungen und Rollenzuweisungen.
Voraussetzungen
Für dieses Tutorial benötigen Sie die folgenden Ressourcen und Berechtigungen:
Ein funktionierender Azure AD-Mandant.
Melden Sie sich beim Graph-Explorer als Benutzer mit einer Anwendungsadministratorrolle oder als Benutzer an, der zum Erstellen und Verwalten von Anwendungen im Mandanten berechtigt ist.
Registrieren einer Anwendung bei Azure AD
Anforderung
Delegierte Berechtigung mit den geringsten Rechten: Application.ReadWrite.All
POST https://graph.microsoft.com/v1.0/applications
Content-type: application/json
{
"displayName": "My application"
}
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new Application
{
DisplayName = "My application",
};
var result = await graphClient.Applications.PostAsync(requestBody);
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)
requestBody := graphmodels.NewApplication()
displayName := "My application"
requestBody.SetDisplayName(&displayName)
result, err := graphClient.Applications().Post(context.Background(), requestBody, nil)
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Application();
$requestBody->setDisplayName('My application');
$requestResult = $graphServiceClient->applications()->post($requestBody);
Der folgende Code ist ein Beispiel für die Standardantwort, die alle standardmäßig zurückgegebenen Eigenschaften enthält. Der Anwendung wird eine ID zugewiesen, die im Azure AD-Ökosystem global eindeutig ist.
Der signInAudience-Eigenschaft wird der Standardwert AzureADandPersonalMicrosoftAccountzugewiesen. Diese Konfiguration ermöglicht es allen Benutzern, die mit einem beliebigen Kontotyp angemeldet sind, einschließlich Azure AD-Konten, persönlichen Microsoft-Konten und Anmeldeinformationen für soziale Medien, Ihre App zu verwenden. Sie können signInAudience in einen anderen Bereich ändern.
Wenn Sie die Anwendung als Benutzer mit Administratorrechten erstellt haben, wurde Ihnen automatisch der Besitz der Anwendung zugewiesen. Sie können den Besitz bestätigen, indem Sie die Besitzer-Navigationseigenschaft über GET https://graph.microsoft.com/v1.0/applications/0d0021e2-eaab-4b9f-a5ad-38c55337d63e/ownersabrufen. Sie können der Anwendung auch den Besitz eines anderen Benutzers oder einer Anderen App zuweisen.
Konfigurieren anderer grundlegender Eigenschaften für Ihre App
Delegierte Berechtigung mit den geringsten Rechten: Application.ReadWrite.All
Sie konfigurieren die folgenden grundlegenden Eigenschaften für die App.
Fügen Sie Tags für die Kategorisierung in der Organisation hinzu. Verwenden Sie außerdem das HideApp -Tag, um die App vor Meine Apps und dem Microsoft 365-Startprogramm auszublenden.
Fügen Sie grundlegende Informationen hinzu, einschließlich des Logos, der Nutzungsbedingungen und der Datenschutzerklärung.
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Application();
$requestBody->setTags(['HR', 'Payroll', 'HideApp', ]);
$info = new InformationalUrl();
$info->setLogoUrl('https://cdn.pixabay.com/photo/2016/03/21/23/25/link-1271843_1280.png');
$info->setMarketingUrl('https://www.contoso.com/app/marketing');
$info->setPrivacyStatementUrl('https://www.contoso.com/app/privacy');
$info->setSupportUrl('https://www.contoso.com/app/support');
$info->setTermsOfServiceUrl('https://www.contoso.com/app/termsofservice');
$requestBody->setInfo($info);
$web = new WebApplication();
$web->setHomePageUrl('https://www.contoso.com/');
$web->setLogoutUrl('https://www.contoso.com/frontchannel_logout');
$web->setRedirectUris(['https://localhost', ]);
$requestBody->setWeb($web);
$requestBody->setServiceManagementReference('Owners aliases: Finance @ contosofinance@contoso.com; The Phone Company HR consulting @ hronsite@thephone-company.com;');
$requestResult = $graphServiceClient->applicationsById('application-id')->patch($requestBody);
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new ServicePrincipal
{
AppRoleAssignmentRequired = true,
};
var result = await graphClient.ServicePrincipals["{servicePrincipal-id}"].PatchAsync(requestBody);
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new ServicePrincipal();
$requestBody->setAppRoleAssignmentRequired(true);
$requestResult = $graphServiceClient->servicePrincipalsById('servicePrincipal-id')->patch($requestBody);
Sie können einer App zwar Über die Azure-Portal Berechtigungen zuweisen, aber Sie weisen Berechtigungen auch über Microsoft Graph zu, indem Sie die requiredResourceAccess-Eigenschaft des App-Objekts aktualisieren. Sie müssen sowohl vorhandene als auch neue Berechtigungen übergeben. Die Übergabe nur neuer Berechtigungen überschreibt und entfernt die vorhandenen Berechtigungen, denen noch keine Zustimmung erteilt wurde.
Durch das Zuweisen von Berechtigungen werden diese nicht automatisch für die App gewährt. Sie müssen weiterhin die Administratoreinwilligung mithilfe der Azure-Portal erteilen. Informationen zum Erteilen von Berechtigungen ohne interaktive Zustimmung finden Sie unter Programmgesteuertes Gewähren oder Widerrufen von API-Berechtigungen.
Delegierte Berechtigung mit den geringsten Rechten: Application.ReadWrite.All
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new Application
{
RequiredResourceAccess = new List<RequiredResourceAccess>
{
new RequiredResourceAccess
{
ResourceAppId = "00000002-0000-0000-c000-000000000000",
ResourceAccess = new List<ResourceAccess>
{
new ResourceAccess
{
Id = Guid.Parse("311a71cc-e848-46a1-bdf8-97ff7156d8e6"),
Type = "Scope",
},
new ResourceAccess
{
Id = Guid.Parse("3afa6a7d-9b1a-42eb-948e-1650a849e176"),
Type = "Role",
},
},
},
},
};
var result = await graphClient.Applications["{application-id}"].PatchAsync(requestBody);
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new Application
{
AppRoles = new List<AppRole>
{
new AppRole
{
AllowedMemberTypes = new List<string>
{
"User",
"Application",
},
Description = "Survey.Read",
DisplayName = "Survey.Read",
Id = Guid.Parse("7a9ddfc4-cc8a-48ea-8275-8ecbffffd5a0"),
IsEnabled = false,
Origin = "Application",
Value = "Survey.Read",
},
},
};
var result = await graphClient.Applications["{application-id}"].PatchAsync(requestBody);
Identifizieren von besitzerlosen Dienstprinzipalen und Dienstprinzipalen mit einem Besitzer
Delegierte Berechtigung mit den geringsten Rechten: Application.ReadWrite.All
Für diese Anforderung muss die Kopfzeile ConsistencyLevel auf eventual festgelegt werden, da $count in der Anforderung enthalten ist. Weitere Informationen zur Verwendung von ConsistencyLevel und $count finden Sie unter Erweiterte Abfragefunktionen für Azure AD-Verzeichnisobjekte.
Diese Anforderung gibt auch die Anzahl der Apps zurück, die der Filterbedingung entsprechen.
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestConfiguration = new ServicePrincipalsRequestBuilderGetRequestConfiguration();
$queryParameters = new ServicePrincipalsRequestBuilderGetQueryParameters();
$queryParameters->filter = "owners/$count eq 0 or owners/$count eq 1";
$queryParameters->count = true;
$headers = [
'ConsistencyLevel' => 'eventual',
];
$requestConfiguration->queryParameters = $queryParameters;
$requestConfiguration->headers = $headers;
$requestResult = $graphServiceClient->servicePrincipals()->get($requestConfiguration);
POST https://graph.microsoft.com/v1.0/applications/7b45cf6d-9083-4eb2-92c4-a7e090f1fc40/owners/$ref
Content-Type: application/json
{
"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new Microsoft.Graph.Models.ReferenceCreate
{
OdataId = "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26",
};
await graphClient.Applications["{application-id}"].Owners.Ref.PostAsync(requestBody);
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)
requestBody := graphmodels.NewReferenceCreate()
odataId := "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
requestBody.SetOdataId(&odataId)
graphClient.ApplicationsById("application-id").Owners().Ref().Post(context.Background(), requestBody, nil)
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new ReferenceCreate();
$requestBody->set@odataid('https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26');
$graphServiceClient->applicationsById('application-id')->owners()->ref()->post($requestBody);
Delegierte Berechtigung mit den geringsten Rechten: Application.ReadWrite.All
Die folgende Anforderung verweist mithilfe seiner appId auf den Dienstprinzipal. 8afc02cb-4d62-4dba-b536-9f6d73e9be26 ist die Objekt-ID für einen Benutzer oder Dienstprinzipal.
POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='46e6adf4-a9cf-4b60-9390-0ba6fb00bf6b')/owners/$ref
Content-Type: application/json
{
"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}