Een resource voor Insluitende lezer maken en Azure Active Directory configureren

In dit artikel bieden we een script voor het maken van een Insluitende lezer resource en configureren Azure Active Directory verificatie (Azure AD). Elke keer dat Insluitende lezer resource wordt gemaakt, met dit script of in de portal, moet deze ook worden geconfigureerd met Azure AD-machtigingen. Dit script helpt u daarbij.

Het script is ontworpen om alle benodigde resources Insluitende lezer Azure AD-resources in één stap voor u te maken en te configureren. U kunt echter ook gewoon Azure AD-verificatie configureren voor een bestaande Insluitende lezer-resource, als u er bijvoorbeeld al een hebt gemaakt in de Azure Portal.

Voor sommige klanten kan het nodig zijn om meerdere Insluitende lezer resources te maken, voor ontwikkeling versus productie, of misschien voor meerdere verschillende regio's waarin uw service is geïmplementeerd. In deze gevallen kunt u het script meerdere keren gebruiken om verschillende resources Insluitende lezer maken en ze te configureren met de Azure AD-machtigingen.

Het script is ontworpen om flexibel te zijn. Er wordt eerst naar bestaande Insluitende lezer en Azure AD-resources in uw abonnement geklikt en alleen indien nodig worden ze alleen als ze nog niet bestaan. Als dit de eerste keer is dat u een resource Insluitende lezer maken, doet het script alles wat u nodig hebt. Als u deze alleen wilt gebruiken om Azure AD te configureren voor een bestaande Insluitende lezer-resource die is gemaakt in de portal, gebeurt dat ook. Het kan ook worden gebruikt voor het maken en configureren van meerdere Insluitende lezer resources.

PowerShell-omgeving instellen

  1. Open eerst de Azure Cloud Shell. Zorg ervoor Cloud Shell in de linkerbovenhoek is ingesteld op PowerShell of door te pwsh typen.

  2. Kopieer en plak het volgende codefragment in de shell.

    function Create-ImmersiveReaderResource(
        [Parameter(Mandatory=$true, Position=0)] [String] $SubscriptionName,
        [Parameter(Mandatory=$true)] [String] $ResourceName,
        [Parameter(Mandatory=$true)] [String] $ResourceSubdomain,
        [Parameter(Mandatory=$true)] [String] $ResourceSKU,
        [Parameter(Mandatory=$true)] [String] $ResourceLocation,
        [Parameter(Mandatory=$true)] [String] $ResourceGroupName,
        [Parameter(Mandatory=$true)] [String] $ResourceGroupLocation,
        [Parameter(Mandatory=$true)] [String] $AADAppDisplayName="ImmersiveReaderAAD",
        [Parameter(Mandatory=$true)] [String] $AADAppIdentifierUri,
        [Parameter(Mandatory=$true)] [String] $AADAppClientSecret,
        [Parameter(Mandatory=$true)] [String] $AADAppClientSecretExpiration
    )
    {
        $unused = ''
        if (-not [System.Uri]::TryCreate($AADAppIdentifierUri, [System.UriKind]::Absolute, [ref] $unused)) {
            throw "Error: AADAppIdentifierUri must be a valid URI"
        }
    
        Write-Host "Setting the active subscription to '$SubscriptionName'"
        $subscriptionExists = Get-AzSubscription -SubscriptionName $SubscriptionName
        if (-not $subscriptionExists) {
            throw "Error: Subscription does not exist"
        }
        az account set --subscription $SubscriptionName
    
        $resourceGroupExists = az group exists --name $ResourceGroupName
        if ($resourceGroupExists -eq "false") {
            Write-Host "Resource group does not exist. Creating resource group"
            $groupResult = az group create --name $ResourceGroupName --location $ResourceGroupLocation
            if (-not $groupResult) {
                throw "Error: Failed to create resource group"
            }
            Write-Host "Resource group created successfully"
        }
    
        # Create an Immersive Reader resource if it doesn't already exist
        $resourceId = az cognitiveservices account show --resource-group $ResourceGroupName --name $ResourceName --query "id" -o tsv
        if (-not $resourceId) {
            Write-Host "Creating the new Immersive Reader resource '$ResourceName' (SKU '$ResourceSKU') in '$ResourceLocation' with subdomain '$ResourceSubdomain'"
            $resourceId = az cognitiveservices account create `
                            --name $ResourceName `
                            --resource-group $ResourceGroupName `
                            --kind ImmersiveReader `
                            --sku $ResourceSKU `
                            --location $ResourceLocation `
                            --custom-domain $ResourceSubdomain `
                            --query "id" `
                            -o tsv
    
            if (-not $resourceId) {
                throw "Error: Failed to create Immersive Reader resource"
            }
            Write-Host "Immersive Reader resource created successfully"
        }
    
        # Create an Azure Active Directory app if it doesn't already exist
        $clientId = az ad app show --id $AADAppIdentifierUri --query "appId" -o tsv
        if (-not $clientId) {
            Write-Host "Creating new Azure Active Directory app"
            $clientId = az ad app create --password $AADAppClientSecret --end-date "$AADAppClientSecretExpiration" --display-name $AADAppDisplayName --identifier-uris $AADAppIdentifierUri --query "appId" -o tsv
    
            if (-not $clientId) {
                throw "Error: Failed to create Azure Active Directory app"
            }
            Write-Host "Azure Active Directory app created successfully."
            Write-Host "NOTE: To manage your Active Directory app client secrets after this Immersive Reader Resource has been created please visit https://portal.azure.com and go to Home -> Azure Active Directory -> App Registrations -> $AADAppDisplayName -> Certificates and Secrets blade -> Client Secrets section" -ForegroundColor Yellow
        }
    
        # Create a service principal if it doesn't already exist
        $principalId = az ad sp show --id $AADAppIdentifierUri --query "objectId" -o tsv
        if (-not $principalId) {
            Write-Host "Creating new service principal"
            az ad sp create --id $clientId | Out-Null
            $principalId = az ad sp show --id $AADAppIdentifierUri --query "objectId" -o tsv
    
            if (-not $principalId) {
                throw "Error: Failed to create new service principal"
            }
            Write-Host "New service principal created successfully"
        }
    
        # Sleep for 5 seconds to allow the new service principal to propagate
        Write-Host "Sleeping for 5 seconds"
        Start-Sleep -Seconds 5
    
        Write-Host "Granting service principal access to the newly created Immersive Reader resource"
        $accessResult = az role assignment create --assignee $principalId --scope $resourceId --role "Cognitive Services User"
        if (-not $accessResult) {
            throw "Error: Failed to grant service principal access"
        }
        Write-Host "Service principal access granted successfully"
    
        # Grab the tenant ID, which is needed when obtaining an Azure AD token
        $tenantId = az account show --query "tenantId" -o tsv
    
        # Collect the information needed to obtain an Azure AD token into one object
        $result = @{}
        $result.TenantId = $tenantId
        $result.ClientId = $clientId
        $result.ClientSecret = $AADAppClientSecret
        $result.Subdomain = $ResourceSubdomain
    
        Write-Host "Success! " -ForegroundColor Green -NoNewline
        Write-Host "Save the following JSON object to a text file for future reference:"
        Write-Output (ConvertTo-Json $result)
    }
    
  3. Voer de functie Create-ImmersiveReaderResource uit om de tijdelijke aanduidingen '<PARAMETER_VALUES>' waar nodig op te geven met uw eigen waarden.

    Create-ImmersiveReaderResource -SubscriptionName '<SUBSCRIPTION_NAME>' -ResourceName '<RESOURCE_NAME>' -ResourceSubdomain '<RESOURCE_SUBDOMAIN>' -ResourceSKU '<RESOURCE_SKU>' -ResourceLocation '<RESOURCE_LOCATION>' -ResourceGroupName '<RESOURCE_GROUP_NAME>' -ResourceGroupLocation '<RESOURCE_GROUP_LOCATION>' -AADAppDisplayName '<AAD_APP_DISPLAY_NAME>' -AADAppIdentifierUri '<AAD_APP_IDENTIFIER_URI>' -AADAppClientSecret '<AAD_APP_CLIENT_SECRET>' -AADAppClientSecretExpiration '<AAD_APP_CLIENT_SECRET_EXPIRATION>'
    

    De volledige opdracht ziet er als volgt uit. Hier hebben we elke parameter voor de duidelijkheid op een eigen regel gezet, zodat u de hele opdracht kunt zien. Kopieer of gebruik deze opdracht niet zoals is. Kopieer en gebruik de bovenstaande opdracht met uw eigen waarden. Dit voorbeeld heeft dummywaarden voor de bovenstaande <PARAMETER_VALUES>'. De uwe is anders, omdat u uw eigen namen voor deze waarden gaat gebruiken.

    Create-ImmersiveReaderResource
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -ResourceSubdomain 'MyOrganizationImmersiveReader'
        -ResourceSKU 'S0'
        -ResourceLocation 'westus2'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceGroupLocation 'westus2'
        -AADAppDisplayName 'MyOrganizationImmersiveReaderAADApp'
        -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'
        -AADAppClientSecret 'SomeStrongPassword'
        -AADAppClientSecretExpiration '2021-12-31'
    
    Parameter Opmerkingen
    SubscriptionName Naam van het Azure-abonnement dat moet worden gebruikt voor uw Insluitende lezer resource. U moet een abonnement hebben om een resource te kunnen maken.
    ResourceName Moet alfanumeriek zijn en kan '-' bevatten, zolang de '-' niet het eerste of laatste teken is. De lengte mag niet langer zijn dan 63 tekens.
    ResourceSubdomain Er is een aangepast subdomein nodig voor uw Insluitende lezer resource. Het subdomein wordt gebruikt door de SDK bij het aanroepen van de Insluitende lezer-service om de Lezer te starten. Het subdomein moet wereldwijd uniek zijn. Het subdomein moet alfanumeriek zijn en kan '-' bevatten, zolang het '-' niet het eerste of laatste teken is. De lengte mag niet langer zijn dan 63 tekens. Deze parameter is optioneel als de resource al bestaat.
    ResourceSKU Opties: S0 (Standard-laag) of S1 (onderwijs-/non-profitorganisaties). Ga naar Cognitive Services pagina met prijzen voor meer informatie over elke beschikbare SKU. Deze parameter is optioneel als de resource al bestaat.
    ResourceLocation Opties: eastus eastus2 , , , , , southcentralus , , , , , , , westus , westus2 australiaeast southeastasia centralindia japaneast northeurope uksouth westeurope . Deze parameter is optioneel als de resource al bestaat.
    ResourceGroupName Resources worden gemaakt in resourcegroepen binnen abonnementen. Gebruik de naam van een bestaande resourcegroep. Als de resourcegroep nog niet bestaat, wordt er een nieuwe gemaakt met deze naam.
    ResourceGroupLocation Als uw resourcegroep niet bestaat, moet u een locatie voor het maken van de groep leveren. Voer uit om een lijst met locaties te az account list-locations vinden. Gebruik de eigenschap name (zonder spaties) van het geretourneerde resultaat. Deze parameter is optioneel als uw resourcegroep al bestaat.
    AADAppDisplayName De Azure Active Directory weergavenaam van de toepassing. Als er geen bestaande Azure AD-toepassing wordt gevonden, wordt er een nieuwe met deze naam gemaakt. Deze parameter is optioneel als de Azure AD-toepassing al bestaat.
    AADAppIdentifierUri De URI voor de Azure AD-app. Als er geen bestaande Azure AD-app wordt gevonden, wordt er een nieuwe app met deze URI gemaakt. Bijvoorbeeld https://immersivereaderaad-mycompany.
    AADAppClientSecret Een wachtwoord dat u maakt en later wordt gebruikt voor verificatie bij het ophalen van een token om de Insluitende lezer. Het wachtwoord moet ten minste 16 tekens lang zijn, ten minste 1 speciaal teken bevatten en ten minste 1 numeriek teken bevatten. Als u clientgeheimen van de Azure AD-toepassing wilt beheren nadat u deze resource hebt gemaakt, gaat u naar de sectie https://portal.azure.com Start -> Azure Active Directory ->-app-registraties -> ->-certificaten en geheimen -> Clientgeheimen (zoals weergegeven in de onderstaande schermafbeelding 'Uw [AADAppDisplayName] Azure AD-toepassingsgeheimen beheren').
    AADAppClientSecretExpiration De datum of datum/tijd waarna uw verloopt [AADAppClientSecret] (bijvoorbeeld '2020-12-31T11:59:59+00:00' of '2020-12-31').

    Uw Azure AD-toepassingsgeheimen beheren

    De blade Certificaten en geheimen in de Azure-portal

  4. Kopieer de JSON-uitvoer naar een tekstbestand voor later gebruik. De uitvoer moet er als volgt uitzien.

    {
      "TenantId": "...",
      "ClientId": "...",
      "ClientSecret": "...",
      "Subdomain": "..."
    }
    

Volgende stappen