Authentifizierung im Partner Center

Gilt für: Partner Center | Partner Center-Betrieb durch 21Vianet | Partner Center für Microsoft Cloud for US Government

Partner Center nutzt Microsoft Entra ID für die Authentifizierung. Bei der Interaktion mit der Partner Center-API, dem SDK oder dem PowerShell-Modul müssen Sie eine Microsoft Entra-Anwendung ordnungsgemäß konfigurieren und dann ein Zugriffstoken anfordern. Zugriffstoken, die nur mithilfe der App oder der App und Benutzerauthentifizierung abgerufen werden, können mit Partner Center verwendet werden. Es gibt jedoch zwei wichtige Punkte, die berücksichtigt werden müssen.

  • Verwenden Sie die mehrstufige Authentifizierung beim Zugriff auf die Partner Center-API mithilfe der App- und Benutzerauthentifizierung. Weitere Informationen zu dieser Änderung finden Sie unter Aktivieren eines sicheren Anwendungsmodells.

  • Nicht alle Vorgänge der Partner Center-API unterstützen reine App-Authentifizierung. Es gibt bestimmte Szenarien, in denen es erforderlich ist, App- und Benutzerauthentifizierung zu verwenden. Unter der Überschrift "Voraussetzungen" in den einzelnen Artikeln finden Sie Dokumentationen, die angibt, ob nur Die App-Authentifizierung, app+ Benutzerauthentifizierung oder beides unterstützt werden.

Wichtig

Azure Active Directory (Azure AD) Graph ist ab dem 30. Juni 2023 veraltet. In Zukunft investieren wir nicht mehr in Azure AD Graph. Azure AD Graph-APIs haben keine SLA- oder Standard Zusicherung über sicherheitsbezogene Fixes hinaus. Investitionen in neue Features und Funktionalitäten werden nur für Microsoft Graph vorgenommen.

Azure AD Graph wird inkrementellen Schritten eingestellt, sodass Sie genügend Zeit haben, um Ihre Anwendungen zu Microsoft Graph-APIs zu migrieren. Zu einem späteren Zeitpunkt, an dem wir ihnen mitteilen werden, werden wir die Erstellung neuer Anwendungen mit Azure AD Graph blockieren.

Weitere Informationen finden Sie unter "Wichtig": Veraltetes Azure AD Graph- und Powershell-Modul.To learn more, see Important: Azure AD Graph Retirement and Powershell Module Deprecation.

Erste Einrichtung

  1. Zunächst müssen Sie sicherstellen, dass Sie über ein primäres Partner Center-Konto und ein Partner Center-Konto für die Integrationssandbox verfügen. Weitere Informationen finden Sie unter Einrichten von Partner Center-Konten für den API-Zugriff. Notieren Sie sich die Microsoft Entra App-Registrierungs-ID und den geheimen Schlüssel (client secret is required for App only identification) für Ihr primäres Konto und Ihr Integrations-Sandbox-Konto.

  2. Melden Sie sich von der Azure-Portal bei Microsoft Entra-ID an. Legen Sie in Berechtigungen für andere Anwendungen Berechtigungen für Windows Azure Active Directory auf Delegierte Berechtigungen fest, und wählen Sie Als angemeldeter Benutzer auf das Verzeichnis zugreifen und Anmelden und Benutzerprofil lesen aus.

  3. Wählen Sie im Azure-Portal Anwendung hinzufügen aus. Suchen Sie nach "Microsoft Partner Center", bei dem es sich um die Microsoft Partner Center-Anwendung handelt. Legen Sie die Option Delegierte Berechtigungen auf Auf Partner Center-API zugreifen fest. Wenn Sie Partner Center für Microsoft Cloud for US Government verwenden, ist dieser Schritt obligatorisch. Wenn Sie die globale Partner Center-Instanz verwenden, ist dieser Schritt optional. CSP-Partner können das App-Verwaltungsfeature im Partner Center verwenden, um diesen Schritt für die globale Partner Center-Instanz zu umgehen.

Reine App-Authentifizierung

Wenn Sie reine App-Authentifizierung für den Zugriff auf die REST-API, die .NET-API, die Java-API oder das PowerShell-Modul von Partner Center verwenden möchten, können Sie dazu die folgenden Anweisungen verwenden.

.NET (reine App-Authentifizierung)

public static IAggregatePartner GetPartnerCenterTokenUsingAppCredentials()
{
    IPartnerCredentials partnerCredentials =
        PartnerCredentials.Instance.GenerateByApplicationCredentials(
            PartnerApplicationConfiguration.ApplicationId,
            PartnerApplicationConfiguration.ApplicationSecret,
            PartnerApplicationConfiguration.ApplicationDomain);

    // Create operations instance with partnerCredentials.
    return PartnerService.Instance.CreatePartnerOperations(partnerCredentials);
}

Java (reine App-Authentifizierung)

Das Partner Center Java SDK kann zum Verwalten von Partner Center-Ressourcen verwendet werden. Es handelt sich um ein Open-Source-Projekt, Standard von der Partnercommunity unterstützt und nicht offiziell von Microsoft unterstützt wird. Sie können Hilfe von der Community erhalten oder ein Issue auf GitHub öffnen, wenn ein Problem auftritt.

public IAggregatePartner getAppPartnerOperations()
{
    IPartnerCredentials appCredentials =
        PartnerCredentials.getInstance().generateByApplicationCredentials(
        PartnerApplicationConfiguration.getApplicationId(),
        PartnerApplicationConfiguration.getApplicationSecret(),
        PartnerApplicationConfiguration.getApplicationDomain());

    return PartnerService.getInstance().createPartnerOperations( appCredentials );
}

REST (reine App-Authentifizierung)

REST-Anforderung

POST https://login.microsoftonline.com/{tenantId}/oauth2/token HTTP/1.1
Accept: application/json
return-client-request-id: true
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: login.microsoftonline.com
Content-Length: 194
Expect: 100-continue

resource=https%3A%2F%2Fgraph.windows.net&client_id={client-id-here}&client_secret={client-secret-here}&grant_type=client_credentials

REST-Antwort

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 1406

{"token_type":"Bearer","expires_in":"3600","ext_expires_in":"3600","expires_on":"1546469802","not_before":"1546465902","resource":"https://graph.windows.net","access_token":"value-has-been-removed"}

App- und Benutzerauthentifizierung

In der Vergangenheit wurde Gewährung für Kennwortanmeldeinformationen des Ressourcenbesitzers verwendet, um ein Zugriffstoken für die Verwendung mit der REST-API, der .NET-API, der Java-API oder dem PowerShell-Modul von Partner Center anzufordern. Diese Methode wurde verwendet, um ein Zugriffstoken von Microsoft Entra ID mithilfe einer Client-ID und Benutzeranmeldeinformationen anzufordern. Dieser Ansatz funktioniert jedoch nicht mehr, da Partner Center mehrstufige Authentifizierung erfordert, wenn app+ Benutzerauthentifizierung verwendet wird. Um diese Anforderung zu erfüllen, hat Microsoft ein sicheres, skalierbares Framework für die Authentifizierung von Cloud Solution Provider (CSP)-Partnern und Systemsteuerungsanbietern (CPV) mit mehrstufiger Authentifizierung eingeführt. Dieses Framework wird als sicheres Anwendungsmodell bezeichnet und besteht aus einem Zustimmungsprozess und einer Anforderung für ein Zugriffstoken mithilfe eines Aktualisierungstokens.

Der Partnerzustimmungsprozess ist ein interaktiver Prozess, bei dem sich der Partner mithilfe der mehrstufigen Authentifizierung authentifiziert, der Anwendung zustimmt und ein Aktualisierungstoken in einem sicheren Repository wie Azure Key Vault gespeichert wird. Es wird empfohlen, für diesen Vorgang ein dediziertes Konto für Integrationszwecke zu verwenden.

Wichtig

Die entsprechende mehrstufige Authentifizierungslösung sollte für das im Partnerzustimmungsprozess verwendete Dienstkonto aktiviert werden. Wenn dies nicht der Fall ist, ist das sich ergebende Aktualisierungstoken nicht mit den Sicherheitsanforderungen kompatibel.

Beispiele für App- und Benutzerauthentifizierung

Der Partner-Zustimmungsprozess kann auf viele Arten durchgeführt werden. Um Partnern zu helfen, zu verstehen, wie sie jeden erforderlichen Vorgang ausführen können, haben wir die folgenden Beispiele entwickelt. Wenn Sie die entsprechende Lösung in Ihrer Umgebung implementieren, ist es wichtig, dass Sie eine Lösung entwickeln, die mit Ihren Codierungsstandards und Sicherheitsrichtlinien beanstanden wird.

.NET (Anwendungs- und Benutzerauthentifizierung)

Das Beispielprojekt für Partnerzustimmung veranschaulicht, wie eine mit ASP.NET entwickelte Website verwendet wird, um die Zustimmung zu erfassen, ein Aktualisierungstoken anzufordern und dieses sicher in Azure Key Vault zu speichern. Führen Sie die folgenden Schritte aus, um die erforderlichen Voraussetzungen für dieses Beispiel zu erstellen.

  1. Erstellen Sie eine Instanz von Azure Key Vault mithilfe des Azure-Portals oder der folgenden PowerShell-Befehle. Stellen Sie vor dem Ausführen des Befehls sicher, dass die Parameterwerte entsprechend geändert wurden. Der Tresorname muss eindeutig sein.

    Login-AzureRmAccount
    
    # Create a new resource group
    New-AzureRmResourceGroup -Name ContosoResourceGroup -Location EastUS
    
    New-AzureRmKeyVault -Name 'Contoso-Vault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East US'
    

    Weitere Informationen zum Erstellen eines Azure Key Vault finden Sie in der Schnellstartanleitung: Festlegen und Abrufen eines geheimen Schlüssels aus Azure Key Vault mithilfe der Azure-Portal oder Schnellstart: Festlegen und Abrufen eines geheimen Schlüssels aus Azure Key Vault mithilfe von PowerShell. Legen Sie anschließend ein Geheimnis fest, und rufen Sie es ab.

  2. Erstellen Sie eine Microsoft Entra-Anwendung und einen Schlüssel mit dem Azure-Portal oder den folgenden Befehlen.

    Connect-MgGraph -Scopes "Application.ReadWrite.OwnedBy"
    
    $Context = Get-MgContext
    
    $app = New-MgApplication -DisplayName 'My Vault Access App' -Web @{ RedirectUris = 'https://$($Context.TenantId)/$((New-Guid).ToString())' }
    $password = Add-MgApplicationPassword -ApplicationId $app.AppId
    
    Write-Host "ApplicationId       = $($app.AppId)"
    Write-Host "ApplicationSecret   = $($password.SecretText)"
    

    Notieren Sie sich unbedingt den Anwendungsbezeichner und die Geheimniswerte, da sie in den folgenden Schritten verwendet werden.

  3. Gewähren Sie der neu erstellten Microsoft Entra-Anwendung die Berechtigungen zum Lesen geheimer Schlüssel mithilfe der Azure-Portal oder der folgenden Befehle.

    # Connect to Microsoft Graph
    Connect-MgGraph -Scopes "User.Read"
    
    # Get the application
    $app = Get-MgApplication -Filter "appId eq 'ENTER-APP-ID-HERE'"
    
    # Set the Key Vault access policy
    Set-AzKeyVaultAccessPolicy -VaultName ContosoVault -ObjectId $app.Id -PermissionsToSecrets get
    
  4. Erstellen Sie eine Microsoft Entra-Anwendung, die für Partner Center konfiguriert ist. Führen Sie die folgenden Aktionen aus, um diesen Schritt abzuschließen.

    • Navigieren Sie zum App-Verwaltungsfeature von Partner Center.
    • Wählen Sie "Neue Web-App hinzufügen" aus, um eine neue Microsoft Entra-Anwendung zu erstellen.

    Stellen Sie sicher, dass Sie die Werte für die App-ID, die Konto-ID und den Schlüssel dokumentieren, da sie in den folgenden Schritten verwendet werden.

  5. Klonen Sie mit Visual Studio oder dem folgenden Befehl das Repository Partner-Center-DotNet-Samples.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  6. Öffnen Sie das Projekt PartnerConsent im Verzeichnis Partner-Center-DotNet-Samples\secure-app-model\keyvault.

  7. Geben Sie die Anwendungseinstellungen aus der Datei web.config ein.

    <!-- AppID that represents CSP application -->
    <add key="ida:CSPApplicationId" value="" />
    <!--
        Please use certificate as your client secret and deploy the certificate to your environment.
        The following application secret is for sample application only. please do not use secret directly from the config file.
    -->
    <add key="ida:CSPApplicationSecret" value="" />
    
    <!--
        Endpoint address for the instance of Azure KeyVault. This is
        the DNS Name for the instance of Key Vault that you provisioned.
     -->
    <add key="KeyVaultEndpoint" value="" />
    
    <!-- App ID that is given access for KeyVault to store refresh tokens -->
    <add key="ida:KeyVaultClientId" value="" />
    
    <!--
        Please use certificate as your client secret and deploy the certificate
        to your environment. The following application secret is for sample
        application only. please do not use secret directly from the config file.
    -->
    <add key="ida:KeyVaultClientSecret" value="" />
    

    Wichtig

    Vertrauliche Informationen wie Anwendungsgeheimnisse sollten nicht in Konfigurationsdateien gespeichert werden. Dies ist hier nur der Fall, weil es sich um eine Beispielanwendung handelt. Für die Produktionsanwendung wird dringend empfohlen, zertifikatbasierte Authentifizierung zu verwenden. Weitere Informationen finden Sie unter Zertifikatanmeldeinformationen für die Anwendungsauthentifizierung.

  8. Wenn Sie dieses Beispielprojekt ausführen, werden Sie zur Authentifizierung aufgefordert. Nach der erfolgreichen Authentifizierung wird ein Zugriffstoken von der Microsoft Entra-ID angefordert. Die von der Microsoft Entra-ID zurückgegebenen Informationen enthalten ein Aktualisierungstoken, das in der konfigurierten Instanz von Azure Key Vault gespeichert ist.

Java (Anwendungs- und Benutzerauthentifizierung)

Das Beispielprojekt für Partnerzustimmung veranschaulicht, wie eine mit JSP entwickelte Website verwendet wird, um die Zustimmung zu erfassen, ein Aktualisierungstoken anzufordern und dieses sicher in Azure Key Vault zu speichern. Führen Sie die folgenden Schritte aus, um die erforderlichen Voraussetzungen für dieses Beispiel zu erstellen.

  1. Erstellen Sie eine Instanz von Azure Key Vault mithilfe des Azure-Portals oder der folgenden PowerShell-Befehle. Stellen Sie vor dem Ausführen des Befehls sicher, dass die Parameterwerte entsprechend geändert wurden. Der Tresorname muss eindeutig sein.

    Login-AzureRmAccount
    
    # Create a new resource group
    New-AzureRmResourceGroup -Name ContosoResourceGroup -Location EastUS
    
    New-AzureRmKeyVault -Name 'Contoso-Vault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East US'
    

    Weitere Informationen zum Erstellen eines Azure Key Vault finden Sie in der Schnellstartanleitung: Festlegen und Abrufen eines geheimen Schlüssels aus Azure Key Vault mithilfe der Azure-Portal oder Schnellstart: Festlegen und Abrufen eines geheimen Schlüssels aus Azure Key Vault mithilfe von PowerShell.

  2. Erstellen Sie eine Microsoft Entra-Anwendung und einen Schlüssel mit dem Azure-Portal oder den folgenden Befehlen.

    Connect-MgGraph -Scopes "Application.ReadWrite.OwnedBy"
    
    $Context = Get-MgContext
    
    $app = New-MgApplication -DisplayName 'My Vault Access App' -IdentifierUri 'https://$($Context.TenantDomain)/$((New-Guid).ToString())'
    $password = Add-MgApplicationPassword -ApplicationId $app.AppId
    
    Write-Host "ApplicationId       = $($app.AppId)"
    Write-Host "ApplicationSecret   = $($password.SecretText)"
    

    Dokumentieren Sie unbedingt den Anwendungsbezeichner und die Geheimniswerte, da sie in den folgenden Schritten verwendet werden.

  3. Gewähren Sie der neu erstellten Microsoft Entra-Anwendung die Berechtigungen zum Lesen geheimer Schlüssel mithilfe der Azure-Portal oder der folgenden Befehle.

    Connect-MgGraph -Scopes "User.Read"
    $app = Get-MgApplication -Filter "appId eq 'ENTER-APP-ID-HERE'"
    
    Set-AzKeyVaultAccessPolicy -VaultName ContosoVault -ObjectId $app.Id -PermissionsToSecrets get
    
  4. Erstellen Sie eine Microsoft Entra-Anwendung, die für Partner Center konfiguriert ist. Führen Sie die folgenden Aktionen aus, um diesen Schritt abzuschließen.

    • Navigieren Sie zum App-Verwaltungsfeature von Partner Center.
    • Wählen Sie "Neue Web-App hinzufügen" aus, um eine neue Microsoft Entra-Anwendung zu erstellen.

    Stellen Sie sicher, dass Sie die Werte für die App-ID, die Konto-ID und den Schlüssel dokumentieren, da sie in den folgenden Schritten verwendet werden.

  5. Klonen Sie mit dem folgenden Befehl das Repository Partner-Center-Java-Samples.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  6. Öffnen Sie das Projekt PartnerConsent im Verzeichnis Partner-Center-Java-Samples\secure-app-model\keyvault.

  7. Geben Sie die Anwendungseinstellungen aus der Datei web.xml ein.

    <filter>
        <filter-name>AuthenticationFilter</filter-name>
        <filter-class>com.microsoft.store.samples.partnerconsent.security.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>client_id</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>client_secret</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_base_url</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_client_id</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_client_secret</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_certifcate_path</param-name>
            <param-value></param-value>
        </init-param>
    </filter>
    

    Wichtig

    Vertrauliche Informationen wie Anwendungsgeheimnisse sollten nicht in Konfigurationsdateien gespeichert werden. Dies ist hier nur der Fall, weil es sich um eine Beispielanwendung handelt. Für die Produktionsanwendung wird dringend empfohlen, zertifikatbasierte Authentifizierung zu verwenden. Weitere Informationen finden Sie unter Key Vault Certificate authentication (Key Vault-Zertifikatauthentifizierung).

  8. Wenn Sie dieses Beispielprojekt ausführen, werden Sie zur Authentifizierung aufgefordert. Nach der erfolgreichen Authentifizierung wird ein Zugriffstoken von der Microsoft Entra-ID angefordert. Die von der Microsoft Entra-ID zurückgegebenen Informationen enthalten ein Aktualisierungstoken, das in der konfigurierten Instanz von Azure Key Vault gespeichert ist.

Cloud Solution Provider-Authentifizierung

Cloud Solution Provider-Partner können das Aktualisierungstoken verwenden, das über den Partnerzustimmungsprozess abgerufen wird.

Beispiele für Cloud Solution Provider-Authentifizierung

Um Partnern zu helfen, zu verstehen, wie sie jeden erforderlichen Vorgang ausführen können, haben wir die folgenden Beispiele entwickelt. Wenn Sie die entsprechende Lösung in Ihrer Umgebung implementieren, ist es wichtig, dass Sie eine Lösung entwickeln, die mit Ihren Codierungsstandards und Sicherheitsrichtlinien beanstanden wird.

.NET (CSP-Authentifizierung)

  1. Wenn Sie dies noch nicht getan haben, führen Sie den Partner-Zustimmungsprozess aus.

  2. Klonen Sie mit Visual Studio oder dem folgenden Befehl das Repository Partner-Center-DotNet-Samples:

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Öffnen Sie das Projekt CSPApplication im Verzeichnis Partner-Center-DotNet-Samples\secure-app-model\keyvault.

  4. Aktualisieren Sie die Anwendungseinstellungen in der Datei App.config.

    <!-- AppID that represents CSP application -->
    <add key="ida:CSPApplicationId" value="" />
    <!--
        Please use certificate as your client secret and deploy the certificate to your environment.
        The following application secret is for sample application only. please do not use secret directly from the config file.
    -->
    <add key="ida:CSPApplicationSecret" value="" />
    
    <!-- Endpoint address for the instance of Azure KeyVault -->
    <add key="KeyVaultEndpoint" value="" />
    
    <!-- AppID that is given access for keyvault to store the refresh tokens -->
    <add key="ida:KeyVaultClientId" value="" />
    
    <!--
        Please use certificate as your client secret and deploy the certificate to your environment.
        The following application secret is for sample application only. please do not use secret directly from the config file.
    -->
    <add key="ida:KeyVaultClientSecret" value="" />
    
  5. Legen Sie die entsprechenden Werte für die Variablen PartnerId und CustomerId fest, die in der Datei Program.cs enthalten sind.

    // The following properties indicate which partner and customer context the calls are going to be made.
    string PartnerId = "<Partner tenant id>";
    string CustomerId = "<Customer tenant id>";
    
  6. Wenn Sie dieses Beispielprojekt ausführen, wird das Aktualisierungstoken abgerufen, das während des Partnerzustimmungsprozesses abgerufen wurde. Anschließend wird ein Zugriffstoken für die Interaktion mit dem Partner Center SDK im Namen des Partners angefordert. Schließlich wird ein Zugriffstoken für die Interaktion mit Microsoft Graph im Namen des angegebenen Kunden angefordert.

Java (CSP-Authentifizierung)

  1. Wenn Sie dies noch nicht getan haben, führen Sie den Partner-Zustimmungsprozess aus.

  2. Klonen Sie mit Visual Studio oder dem folgenden Befehl das Repository Partner-Center-Java-Samples:

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Öffnen Sie das Projekt cspsample im Verzeichnis Partner-Center-Java-Samples\secure-app-model\keyvault.

  4. Aktualisieren Sie die Anwendungseinstellungen in der Datei application.properties.

    azuread.authority=https://login.microsoftonline.com
    keyvault.baseurl=
    keyvault.clientId=
    keyvault.clientSecret=
    partnercenter.accountId=
    partnercenter.clientId=
    partnercenter.clientSecret=
    
  5. Wenn Sie dieses Beispielprojekt ausführen, wird das Aktualisierungstoken abgerufen, das während des Partnerzustimmungsprozesses abgerufen wurde. Anschließend wird ein Zugriffstoken für die Interaktion mit dem Partner Center SDK im Namen des Partners angefordert.

  6. Optional: Kommentieren Sie die Funktionsaufrufe RunAzureTask und RunGraphTask aus, wenn Sie sehen möchten, wie mit Azure Resource Manager und Microsoft Graph im Namen des Kunden interagiert wird.

CPV-Authentifizierung

CPVs (Control Panel Vendor) müssen jeden Partner, den sie unterstützen, den Partnerzustimmungsprozess ausführen lassen. Sobald dies abgeschlossen ist, wird das durch diesen Prozess abgerufene Aktualisierungstoken verwendet, um auf die REST-API und die .NET-API von Partner Center zuzugreifen.

Hinweis

Control Panel Vendor sollten im Tenant des Kunden mindestens die Rolle des Cloudanwendungsadministrators besitzen.

Beispiele für CPV-Authentifizierung

Um den Systemsteuerungsanbietern zu helfen, zu verstehen, wie sie jeden erforderlichen Vorgang ausführen können, haben wir die folgenden Beispiele entwickelt. Wenn Sie die entsprechende Lösung in Ihrer Umgebung implementieren, ist es wichtig, dass Sie eine Lösung entwickeln, die mit Ihren Codierungsstandards und Sicherheitsrichtlinien beanstanden wird.

.NET (CPV-Authentifizierung)

  1. Entwickeln und implementieren Sie einen Prozess für Cloud Solution Provider-Partner, um die entsprechende Zustimmung zu erteilen. Weitere Informationen und ein Beispiel finden Sie unter Partnerzustimmung.

    Wichtig

    Benutzeranmeldeinformationen von einem Cloud Solution Provider-Partner sollten nicht gespeichert werden. Das Aktualisierungstoken, das durch den Partnerzustimmungsprozess abgerufen wird, sollte gespeichert und verwendet werden, um Zugriffstoken für die Interaktion mit einer beliebigen Microsoft-API anzufordern.

  2. Klonen Sie mit Visual Studio oder dem folgenden Befehl das Repository Partner-Center-DotNet-Samples:

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Öffnen Sie das Projekt CPVApplication im Verzeichnis Partner-Center-DotNet-Samples\secure-app-model\keyvault.

  4. Aktualisieren Sie die Anwendungseinstellungen in der Datei App.config.

    <!-- AppID that represents Control panel vendor application -->
    <add key="ida:CPVApplicationId" value="" />
    
    <!--
        Please use certificate as your client secret and deploy the certificate to your environment.
        The following application secret is for sample application only. please do not use secret directly from the config file.
    -->
    <add key="ida:CPVApplicationSecret" value="" />
    
    <!-- Endpoint address for the instance of Azure KeyVault -->
    <add key="KeyVaultEndpoint" value="" />
    
    <!-- AppID that is given access for keyvault to store the refresh tokens -->
    <add key="ida:KeyVaultClientId" value="" />
    
    <!--
        Please use certificate as your client secret and deploy the certificate to your environment.
        The following application secret is for sample application only. please do not use secret directly from the config file.
    -->
    <add key="ida:KeyVaultClientSecret" value="" />
    
  5. Legen Sie die entsprechenden Werte für die Variablen PartnerId und CustomerId fest, die in der Datei Program.cs enthalten sind.

    // The following properties indicate which partner and customer context the calls are going to be made.
    string PartnerId = "<Partner tenant id>";
    string CustomerId = "<Customer tenant id>";
    
  6. Wenn Sie dieses Beispielprojekt ausführen, wird das Aktualisierungstoken für den angegebenen Partner abgerufen. Anschließend fordert es ein Zugriffstoken an, um im Namen des Partners auf Partner Center und Microsoft Graph zuzugreifen. Die nächste Aufgabe, die ausgeführt wird, ist das Löschen und Erstellen von Berechtigungszuweisungen für den Kundenmandanten. Da es keine Beziehung zwischen dem CPV und dem Kunden gibt, müssen diese Berechtigungen mithilfe der Partner Center-API hinzugefügt werden. Das folgende Beispiel zeigt, wie dies erreicht wird.

    JObject contents = new JObject
    {
        // Provide your application display name
        ["displayName"] = "CPV Marketplace",
    
        // Provide your application id
        ["applicationId"] = CPVApplicationId,
    
        // Provide your application grants
        ["applicationGrants"] = new JArray(
            JObject.Parse("{\"enterpriseApplicationId\": \"00000003-0000-0000-c000-000000000000\", \"scope\":\"Domain.ReadWrite.All,User.ReadWrite.All,Directory.Read.All\"}"), // for Microsoft Graph access,  Directory.Read.All
            JObject.Parse("{\"enterpriseApplicationId\": \"797f4846-ba00-4fd7-ba43-dac1f8f63013\", \"scope\":\"user_impersonation\"}")) // for Azure Resource Manager access
    };
    
    /**
     * The following steps have to be performed once per customer tenant if your application is
     * a control panel vendor application and requires customer tenant Microsoft Graph access.
     **/
    
    // delete the previous grant into customer tenant
    JObject consentDeletion = await ApiCalls.DeleteAsync(
        tokenPartnerResult.Item1,
        string.Format("https://api.partnercenter.microsoft.com/v1/customers/{0}/applicationconsents/{1}", CustomerId, CPVApplicationId));
    
    // create new grants for the application given the setting in application grants payload.
    JObject consentCreation = await ApiCalls.PostAsync(
        tokenPartnerResult.Item1,
        string.Format("https://api.partnercenter.microsoft.com/v1/customers/{0}/applicationconsents", CustomerId),
        contents.ToString());
    

Nachdem diese Berechtigungen eingerichtet wurden, führt das Beispiel Vorgänge im Namen des Kunden mithilfe von Microsoft Graph aus.

Hinweis

Weitere Informationen über Microsoft Graph finden Sie in der Microsoft Graph Übersicht.

Java (CPV-Authentifizierung)

  1. Entwickeln und implementieren Sie einen Prozess für Cloud Solution Provider-Partner, um die entsprechende Zustimmung zu erteilen. Weitere Informationen und ein Beispiel finden Sie in der Partnerzustimmung.

    Wichtig

    Benutzeranmeldeinformationen von einem Cloud Solution Provider-Partner sollten nicht gespeichert werden. Das Aktualisierungstoken, das durch den Partnerzustimmungsprozess abgerufen wird, sollte gespeichert und verwendet werden, um Zugriffstoken für die Interaktion mit einer beliebigen Microsoft-API anzufordern.

  2. Klonen Sie mit dem folgenden Befehl das Repository Partner-Center-Java-Samples.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Öffnen Sie das Projekt cpvsample im Verzeichnis Partner-Center-Java-Samples\secure-app-model\keyvault.

  4. Aktualisieren Sie die Anwendungseinstellungen in der Datei application.properties.

    azuread.authority=https://login.microsoftonline.com
    keyvault.baseurl=
    keyvault.clientId=
    keyvault.clientSecret=
    partnercenter.accountId=
    partnercenter.clientId=
    partnercenter.clientSecret=
    partnercenter.displayName=
    

    Der Wert für partnercenter.displayName sollte der Anzeigename Ihrer Marketplace-Anwendung sein.

  5. Legen Sie die entsprechenden Werte für die Variablen PartnerId und CustomerId fest, die in der Datei Program.java enthalten sind.

    partnerId = "SPECIFY-THE-PARTNER-TENANT-ID-HERE";
    customerId = "SPECIFY-THE-CUSTOMER-TENANT-ID-HERE";
    
  6. Wenn Sie dieses Beispielprojekt ausführen, wird das Aktualisierungstoken für den angegebenen Partner abgerufen. Anschließend wird ein Zugriffstoken angefordert, um im Namen des Partners auf Partner Center zuzugreifen. Die nächste Aufgabe, die ausgeführt wird, ist das Löschen und Erstellen von Berechtigungszuweisungen für den Kundenmandanten. Da es keine Beziehung zwischen dem CPV und dem Kunden gibt, müssen diese Berechtigungen mithilfe der Partner Center-API hinzugefügt werden. Im folgenden Beispiel wird gezeigt, wie die Berechtigungen erteilt werden.

    ApplicationGrant azureAppGrant = new ApplicationGrant();
    
    azureAppGrant.setEnterpriseApplication("797f4846-ba00-4fd7-ba43-dac1f8f63013");
    azureAppGrant.setScope("user_impersonation");
    
    ApplicationGrant graphAppGrant = new ApplicationGrant();
    
    graphAppGrant.setEnterpriseApplication("00000002-0000-0000-c000-000000000000");
    graphAppGrant.setScope("Domain.ReadWrite.All,User.ReadWrite.All,Directory.Read.All");
    
    ApplicationConsent consent = new ApplicationConsent();
    
    consent.setApplicationGrants(Arrays.asList(azureAppGrant, graphAppGrant));
    consent.setApplicationId(properties.getProperty(PropertyName.PARTNER_CENTER_CLIENT_ID));
    consent.setDisplayName(properties.getProperty(PropertyName.PARTNER_CENTER_DISPLAY_NAME));
    
    // Deletes the existing grant into the customer it is present.
    partnerOperations.getServiceClient().delete(
        partnerOperations,
        new TypeReference<ApplicationConsent>(){},
        MessageFormat.format(
            "customers/{0}/applicationconsents/{1}",
            customerId,
            properties.getProperty(PropertyName.PARTNER_CENTER_CLIENT_ID)));
    
    // Consent to the defined applications and the respective scopes.
    partnerOperations.getServiceClient().post(
        partnerOperations,
        new TypeReference<ApplicationConsent>(){},
        MessageFormat.format(
            "customers/{0}/applicationconsents",
            customerId),
        consent);
    

Kommentieren Sie die Funktionsaufrufe RunAzureTask und RunGraphTask aus, wenn Sie sehen möchten, wie mit Azure Resource Manager und Microsoft Graph im Namen des Kunden interagiert wird.