파트너 센터 인증

적용 대상: 파트너 센터 | 21Vianet에서 운영되는 파트너 센터 | Microsoft Cloud for US Government 파트너 센터

파트너 센터는 인증에 Microsoft Entra ID를 사용합니다. 파트너 센터 API, SDK 또는 PowerShell 모듈과 상호 작용하는 경우 Microsoft Entra 애플리케이션을 올바르게 구성한 다음, 액세스 토큰을 요청해야 합니다. 앱 전용 또는 앱 + 사용자 인증을 사용하여 얻은 액세스 토큰은 파트너 센터에서 사용할 수 있습니다. 그러나 고려해야 하는 두 가지 중요한 항목이 있습니다.

  • 앱 + 사용자 인증을 사용하여 파트너 센터 API에 액세스할 때 다단계 인증을 사용합니다. 이 변경 내용에 대한 자세한 내용은 보안 애플리케이션 모델 사용을 참조하세요.

  • 파트너 센터 API에서 앱 전용 인증을 지원하지 않는 작업도 있습니다. 앱 + 사용자 인증을 사용해야 하는 특정 시나리오가 있습니다. 문서의 필수 구성 요소 제목 아래에서 앱만 인증, 앱 + 사용자 인증 또는 둘 다 지원되는지 여부를 나타내는 설명서를 찾을 수 있습니다.

Important

Azure AD(Azure Active Directory) Graph는 2023년 6월 30일부터 더 이상 사용되지 않습니다. 앞으로 Azure AD Graph에 더 이상 투자하지 않습니다. Azure AD Graph API에는 보안 관련 수정 외에 SLA 또는 기본 약정이 없습니다. 새로운 기능에 대한 투자는 Microsoft Graph에서만 이루어집니다.

애플리케이션을 Microsoft Graph API로 마이그레이션하는 데 충분한 시간이 있도록 증분 단계에서 Azure AD Graph를 사용 중지합니다. 나중에 발표할 예정이며, Azure AD Graph를 사용하여 새 애플리케이션 만들기를 차단합니다.

자세한 내용은 중요: Azure AD Graph 사용 중지 및 Powershell 모듈 사용 중단을 참조 하세요.

초기 설정

  1. 먼저 주 파트너 센터 계정과 통합 샌드박스 파트너 센터 계정이 모두 있는지 확인해야 합니다. 자세한 내용은 API 액세스를 위한 파트너 센터 계정 설정을 참조하세요. 기본 계정과 통합 샌드박스 계정 모두에 대한 Microsoft Entra 앱 등록 ID 및 비밀(앱 전용 식별에 클라이언트 암호 필요)을 기록해 둡니다.

  2. Azure Portal에서 Microsoft Entra ID에 로그인합니다. 다른 애플리케이션에 대한 권한에서 Windows Azure Active Directory에 대한 권한을 위임된 권한으로 설정하고, 로그인한 사용자 권한으로 디렉터리에 액세스로그인 및 사용자 프로필 읽기를 모두 선택합니다.

  3. Azure Portal에서 애플리케이션을 추가하세요. Microsoft 파트너 센터 애플리케이션인 "Microsoft 파트너 센터"를 검색합니다. 위임된 권한파트너 센터 API에 액세스로 설정합니다. 미국 정부용 Microsoft 클라우드 파트너 센터를 사용하는 경우 이 단계는 필수입니다. 파트너 센터 글로벌 인스턴스를 사용하는 경우 이 단계는 선택 사항입니다. CSP 파트너는 파트너 센터의 앱 관리 기능을 사용하여 파트너 센터 글로벌 인스턴스에 대해 이 단계를 무시할 수 있습니다.

앱 전용 인증

앱 전용 인증을 사용하여 파트너 센터 REST API, .NET API, Java API 또는 PowerShell 모듈에 액세스하려는 경우 다음 지침을 사용하면 됩니다.

.NET(앱 전용 인증)

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(앱 전용 인증)

파트너 센터 Java SDK를 사용하여 파트너 센터 리소스를 관리할 수 있습니다. 파트너 커뮤니티에서 기본 오픈 소스 프로젝트이며 Microsoft에서 공식적으로 지원하지 않습니다. 문제가 발생한 경우 커뮤니티에서 도움을 받거나GitHub에서 문제를 열 수 있습니다.

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

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

REST(앱 전용 인증)

REST 요청

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 응답

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"}

앱 + 사용자 인증

지금까지 리소스 소유자 암호 자격 증명 권한 부여는 파트너 센터 REST API, .NET API, Java API 또는 PowerShell 모듈에서 사용할 액세스 토큰을 요청하는 데 사용되었습니다. 이 메서드는 클라이언트 식별자 및 사용자 자격 증명을 사용하여 Microsoft Entra ID에서 액세스 토큰을 요청하는 데 사용되었습니다. 그러나 앱 + 사용자 인증을 사용하는 경우 파트너 센터에 다단계 인증이 필요하기 때문에 이 방법은 더 이상 작동하지 않습니다. 이 요구 사항을 준수하기 위해 Microsoft는 다단계 인증을 사용하여 CSP(클라우드 솔루션 공급자) 파트너 및 CPV(제어판 공급업체)를 인증하기 위한 안전하고 확장 가능한 프레임워크를 도입했습니다. 이 프레임워크는 보안 애플리케이션 모델이라고 하며, 새로 고침 토큰을 사용하는 액세스 토큰에 대한 동의 프로세스 및 요청으로 구성됩니다.

파트너 동의 프로세스는 파트너가 다단계 인증을 사용하여 인증하고, 애플리케이션에 동의하며, 새로 고침 토큰이 Azure Key Vault와 같은 보안 리포지토리에 저장되는 대화형 프로세스입니다. 이 프로세스에는 통합을 위한 전용 계정을 사용하는 것이 좋습니다.

Important

파트너 동의 프로세스에 사용되는 서비스 계정에 대해 적절한 다단계 인증 솔루션을 사용하도록 설정해야 합니다. 그렇지 않으면 결과 새로 고침 토큰에서 보안 요구 사항을 준수하지 않습니다.

앱 + 사용자 인증 샘플

파트너 동의 프로세스는 여러 가지 방법으로 수행할 수 있습니다. 파트너가 필요한 각 작업을 수행하는 방법을 이해할 수 있도록 다음 샘플을 개발했습니다. 사용자 환경에서 적절한 솔루션을 구현하는 경우 코딩 표준 및 보안 정책을 준수하는 솔루션을 개발하는 것이 중요합니다.

.NET(앱 + 사용자 인증)

파트너 동의 프로젝트 샘플에서는 ASP.NET을 사용하여 개발한 웹 사이트를 통해 동의를 캡처하고, 새로 고침 토큰을 요청하고, 이를 Azure Key Vault에 안전하게 저장하는 방법을 보여 줍니다. 이 샘플에 필요한 필수 구성 요소를 만들려면 다음 단계를 수행합니다.

  1. Azure Portal 또는 다음 PowerShell 명령을 사용하여 Azure Key Vault 인스턴스를 만듭니다. 명령을 실행하기 전에 매개 변수 값을 적절하게 수정해야 합니다. 자격 증명 모음 이름은 고유해야 합니다.

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

    Azure Key Vault 를 만드는 방법에 대한 자세한 내용은 빠른 시작: Azure Portal 또는 빠른 시작을 사용하여 Azure Key Vault에서 비밀 설정 및 검색: PowerShell을 사용하여 Azure Key Vault에서 비밀 설정 및 검색을 참조하세요. 그런 다음, 비밀을 설정하고 검색합니다.

  2. Azure Portal 또는 다음 명령을 사용하여 Microsoft Entra Application 및 키를 만듭니다.

    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)"
    

    애플리케이션 식별자와 비밀 값은 아래 단계에서 사용되므로 적어두어야 합니다.

  3. 새로 만든 Microsoft Entra 애플리케이션에 Azure Portal 또는 다음 명령을 사용하여 비밀 읽기 권한을 부여합니다.

    # 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. 파트너 센터에 대해 구성된 Microsoft Entra 애플리케이션을 만듭니다. 이 단계를 완료하려면 다음 작업을 수행합니다.

    앱 ID, 계정 ID* 및 값은 아래 단계에서 사용되므로 문서화해야 합니다.

  5. Visual Studio 또는 다음 명령을 사용하여 Partner-Center-DotNet-Samples 리포지토리를 복제합니다.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  6. Partner-Center-DotNet-Samples\secure-app-model\keyvault 디렉터리에 있는 PartnerConsent 프로젝트를 엽니다.

  7. web.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. 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="" />
    

    Important

    애플리케이션 비밀과 같은 중요한 정보는 구성 파일에 저장하면 안 됩니다. 샘플 애플리케이션이므로 여기서는 이 작업이 수행되었습니다. 프로덕션 애플리케이션에서는 인증서 기반 인증을 사용하는 것이 좋습니다. 자세한 내용은 애플리케이션 인증용 인증서 자격 증명을 참조하세요.

  8. 이 샘플 프로젝트를 실행하면 인증을 요청하는 메시지가 표시됩니다. 인증에 성공하면 Microsoft Entra ID에서 액세스 토큰이 요청됩니다. Microsoft Entra ID에서 반환되는 정보에는 구성된 Azure Key Vault 인스턴스에 저장된 새로 고침 토큰이 포함됩니다.

Java(앱 + 사용자 인증)

파트너 동의 프로젝트 샘플에서는 JSP를 사용하여 개발한 웹 사이트를 통해 동의를 캡처하고, 새로 고침 토큰을 요청하고, 이를 Azure Key Vault에 안전하게 저장하는 방법을 보여 줍니다. 이 샘플에 필요한 필수 구성 요소를 만들려면 다음을 수행합니다.

  1. Azure Portal 또는 다음 PowerShell 명령을 사용하여 Azure Key Vault 인스턴스를 만듭니다. 명령을 실행하기 전에 매개 변수 값을 적절하게 수정해야 합니다. 자격 증명 모음 이름은 고유해야 합니다.

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

    Azure Key Vault 를 만드는 방법에 대한 자세한 내용은 빠른 시작: Azure Portal 또는 빠른 시작을 사용하여 Azure Key Vault에서 비밀 설정 및 검색: PowerShell을 사용하여 Azure Key Vault에서 비밀 설정 및 검색을 참조하세요.

  2. Azure Portal 또는 다음 명령을 사용하여 Microsoft Entra Application 및 키를 만듭니다.

    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)"
    

    애플리케이션 식별자와 비밀 값은 아래 단계에서 사용되므로 문서화해야 합니다.

  3. Azure Portal 또는 다음 명령을 사용하여 새로 만든 Microsoft Entra 애플리케이션에 비밀 읽기 권한을 부여합니다.

    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. 파트너 센터에 대해 구성된 Microsoft Entra 애플리케이션을 만듭니다. 이 단계를 완료하려면 다음을 수행합니다.

    앱 ID, 계정 ID* 및 값은 아래 단계에서 사용되므로 문서화해야 합니다.

  5. 다음 명령을 사용하여 Partner-Center-Java-Samples 리포지토리를 복제합니다.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  6. Partner-Center-Java-Samples\secure-app-model\keyvault 디렉터리에 있는 PartnerConsent 프로젝트를 엽니다.

  7. web.xml에 있는 애플리케이션 설정을 채웁니다.

    <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>
    

    Important

    애플리케이션 비밀과 같은 중요한 정보는 구성 파일에 저장하면 안 됩니다. 샘플 애플리케이션이므로 여기서는 이 작업이 수행되었습니다. 프로덕션 애플리케이션에서는 인증서 기반 인증을 사용하는 것이 좋습니다. 자세한 내용은 Key Vault 인증서 인증을 참조하세요.

  8. 이 샘플 프로젝트를 실행하면 인증을 요청하는 메시지가 표시됩니다. 인증에 성공하면 Microsoft Entra ID에서 액세스 토큰이 요청됩니다. Microsoft Entra ID에서 반환되는 정보에는 구성된 Azure Key Vault 인스턴스에 저장된 새로 고침 토큰이 포함됩니다.

클라우드 솔루션 공급자 인증

클라우드 솔루션 공급자 파트너는 파트너 동의 프로세스를 통해 얻은 새로 고침 토큰을 사용할 수 있습니다.

클라우드 솔루션 공급자 인증 샘플

파트너가 필요한 각 작업을 수행하는 방법을 이해할 수 있도록 다음 샘플을 개발했습니다. 사용자 환경에서 적절한 솔루션을 구현하는 경우 코딩 표준 및 보안 정책을 준수하는 솔루션을 개발하는 것이 중요합니다.

.NET(CSP 인증)

  1. 아직 수행하지 않은 경우 파트너 동의 프로세스를 수행 합니다.

  2. Visual Studio 또는 다음 명령을 사용하여 Partner-Center-DotNet-Samples 리포지토리를 복제합니다.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Partner-Center-DotNet-Samples\secure-app-model\keyvault 디렉터리에 있는 CSPApplication 프로젝트를 엽니다.

  4. 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. Program.cs 파일에 있는 PartnerIdCustomerId 변수에 적절한 값을 설정합니다.

    // 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. 이 샘플 프로젝트를 실행하면 파트너 동의 프로세스 중에 얻은 새로 고침 토큰을 가져옵니다. 그런 다음, 파트너를 대신하여 파트너 센터 SDK와 상호 작용하기 위한 액세스 토큰을 요청합니다. 마지막으로, 지정된 고객을 대신하여 Microsoft Graph와 상호 작용하기 위한 액세스 토큰을 요청합니다.

Java(CSP 인증)

  1. 아직 수행하지 않은 경우 파트너 동의 프로세스를 수행 합니다.

  2. Visual Studio 또는 다음 명령을 사용하여 Partner-Center-Java-Samples 리포지토리를 복제합니다.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Partner-Center-Java-Samples\secure-app-model\keyvault 디렉터리에 있는 cspsample 프로젝트를 엽니다.

  4. application.properties 파일에 있는 애플리케이션 설정을 업데이트합니다.

    azuread.authority=https://login.microsoftonline.com
    keyvault.baseurl=
    keyvault.clientId=
    keyvault.clientSecret=
    partnercenter.accountId=
    partnercenter.clientId=
    partnercenter.clientSecret=
    
  5. 이 샘플 프로젝트를 실행하면 파트너 동의 프로세스 중에 얻은 새로 고침 토큰을 가져옵니다. 그런 다음, 파트너를 대신하여 파트너 센터 SDK와 상호 작용하기 위한 액세스 토큰을 요청합니다.

  6. 선택 사항 - 고객을 대신하여 Azure Resource Manager 및 Microsoft Graph와 상호 작용하는 방법을 확인하려면 RunAzureTaskRunGraphTask 함수 호출의 주석 처리를 제거합니다.

제어판 공급자 인증

제어판 공급업체는 지원하는 각 파트너에서 파트너 동의 프로세스를 수행하도록 해야 합니다. 완료되면 해당 프로세스를 통해 얻은 새로 고침 토큰을 사용하여 파트너 센터 REST API 및 .NET API에 액세스합니다.

참고 항목

제어판 공급업체는 고객 테넌트에서 최소한 클라우드 애플리케이션 관리자 역할이 있어야 합니다.

클라우드 패널 공급자 인증 샘플

제어판 공급업체가 필요한 각 작업을 수행하는 방법을 이해할 수 있도록 다음 샘플을 개발했습니다. 사용자 환경에서 적절한 솔루션을 구현하는 경우 코딩 표준 및 보안 정책을 준수하는 솔루션을 개발하는 것이 중요합니다.

.NET(CPV 인증)

  1. 클라우드 솔루션 공급자 파트너가 적절한 동의를 제공할 수 있는 프로세스를 개발하고 배포합니다. 자세한 내용 및 예제는 파트너 동의를 참조하세요.

    Important

    클라우드 솔루션 공급자 파트너의 사용자 자격 증명은 저장하면 안 됩니다. 파트너 동의 프로세스를 통해 얻은 새로 고침 토큰을 저장하고 사용하여 Microsoft API와 상호 작용하기 위한 액세스 토큰을 요청해야 합니다.

  2. Visual Studio 또는 다음 명령을 사용하여 Partner-Center-DotNet-Samples 리포지토리를 복제합니다.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Partner-Center-DotNet-Samples\secure-app-model\keyvault 디렉터리에 있는 CPVApplication 프로젝트를 엽니다.

  4. 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. Program.cs 파일에 있는 PartnerIdCustomerId 변수에 적절한 값을 설정합니다.

    // 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. 이 샘플 프로젝트를 실행하면 지정된 파트너에 대한 새로 고침 토큰을 가져옵니다. 그런 다음, 파트너를 대신하여 파트너 센터 및 Microsoft Graph에 액세스하기 위한 액세스 토큰을 요청합니다. 다음으로 수행하는 작업은 고객 테넌트에 대한 권한 부여를 삭제하고 만드는 것입니다. 제어판 공급업체와 고객 간에 관계가 없으므로 파트너 센터 API를 사용하여 이러한 권한을 추가해야 합니다. 다음 예제에서는 이를 수행하는 방법을 보여 줍니다.

    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());
    

이러한 권한이 설정되면 샘플에서 고객을 대신하여 Microsoft Graph를 통해 작업을 수행합니다.

참고 항목

Microsoft Graph에 대한 자세한 내용은 Microsoft Graph 개요를 참조하세요.

Java(CPV 인증)

  1. 클라우드 솔루션 공급자 파트너가 적절한 동의를 제공할 수 있는 프로세스를 개발하고 배포합니다. 자세한 내용 및 예제는 파트너 동의를 참조하세요.

    Important

    클라우드 솔루션 공급자 파트너의 사용자 자격 증명은 저장하면 안 됩니다. 파트너 동의 프로세스를 통해 얻은 새로 고침 토큰을 저장하고 사용하여 Microsoft API와 상호 작용하기 위한 액세스 토큰을 요청해야 합니다.

  2. 다음 명령을 사용하여 Partner-Center-Java-Samples 리포지토리를 복제합니다.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Partner-Center-Java-Samples\secure-app-model\keyvault 디렉터리에 있는 cpvsample 프로젝트를 엽니다.

  4. application.properties 파일에 있는 애플리케이션 설정을 업데이트합니다.

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

    partnercenter.displayName의 값은 마켓플레이스 애플리케이션의 표시 이름이어야 합니다.

  5. Program.java 파일에 있는 partnerIdcustomerId 변수에 적절한 값을 설정합니다.

    partnerId = "SPECIFY-THE-PARTNER-TENANT-ID-HERE";
    customerId = "SPECIFY-THE-CUSTOMER-TENANT-ID-HERE";
    
  6. 이 샘플 프로젝트를 실행하면 지정된 파트너에 대한 새로 고침 토큰을 가져옵니다. 그런 다음, 파트너를 대신하여 파트너 센터에 액세스하기 위한 액세스 토큰을 요청합니다. 다음으로 수행하는 작업은 고객 테넌트에 대한 권한 부여를 삭제하고 만드는 것입니다. 제어판 공급업체와 고객 간에 관계가 없으므로 파트너 센터 API를 사용하여 이러한 권한을 추가해야 합니다. 다음 예제에서는 사용 권한을 부여하는 방법을 보여 줍니다.

    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);
    

고객을 대신하여 Azure Resource Manager 및 Microsoft Graph와 상호 작용하는 방법을 확인하려면 RunAzureTaskRunGraphTask 함수 호출의 주석 처리를 제거합니다.