Kaynak oluşturma Tam Ekran Okuyucu ve kimlik doğrulamasını Azure Active Directory yapılandırma

Bu makalede, bir Tam Ekran Okuyucu kaynağı oluşturacak ve Azure Active Directory (Azure AD) kimlik doğrulamasını yapılandıracak bir betik sağlanmıştır. Bu betikle Tam Ekran Okuyucu portalda bir kaynak oluşturulduğunda, bu kaynağın Azure AD izinleri ile de yapılandırılması gerekir. Bu betik bu konuda size yardımcı olur.

Betik, tek adımda sizin için gerekli tüm Tam Ekran Okuyucu ve Azure AD kaynaklarını oluşturmak ve yapılandırmak üzere tasarlanmıştır. Bununla birlikte, mevcut bir Tam Ekran Okuyucu kaynağı için Azure AD kimlik doğrulamasını yapılandırabilirsiniz. Örneğin, azure ad kaynağında zaten bir kimlik Azure portal.

Bazı müşteriler için, geliştirme ve üretim Tam Ekran Okuyucu veya hizmetinizin dağıtıldı olduğu birden çok farklı bölge için birden çok kaynak oluşturmak gerekebilir. Bu gibi durumlarda, farklı kaynak oluşturmak ve Azure AD izinleri ile Tam Ekran Okuyucu betiği birden çok kez kullanabilirsiniz.

Betik esnek olacak şekilde tasarlanmıştır. İlk olarak aboneliğiniz Tam Ekran Okuyucu Azure AD kaynaklarını ve mevcut azure AD kaynaklarını ve yalnızca henüz yoksa gerekli şekilde oluşturmalarını sağlar. İlk kez bir kaynak Tam Ekran Okuyucu betik ihtiyacınız olan her şeyi yapar. Bunu yalnızca portalda oluşturulmuş mevcut bir Tam Ekran Okuyucu azure AD'yi yapılandırmak için kullanmak için de kullanabilirsiniz. Birden çok kaynak oluşturmak ve yapılandırmak için de Tam Ekran Okuyucu kullanılabilir.

PowerShell ortamını ayarlama

  1. başlangıç olarak Azure Cloud Shell. Sol Cloud Shell veya yazarak PowerShell'e ayarladığınızdan emin pwsh olur.

  2. Aşağıdaki kod parçacığını kopyalayıp kabukta yapıştırın.

    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. Aşağıdaki Create-ImmersiveReaderResource '<PARAMETER_VALUES>' yer tutucularını uygun şekilde kendi değerlerinizi kullanarak işlevini çalıştırın.

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

    Tam komut aşağıdakine benzer şekilde olur. Burada netlik sağlamak için her parametreyi kendi satırına koyarak komutun tamamını görüyoruz. Bu komutu olduğu gibi kopyalamayın veya kullanmayın. Yukarıdaki komutu kopyalayıp kendi değerleriniz ile kullanın. Bu örnekte yukarıdaki '<PARAMETER_VALUES>' için sahte değerler vardır. Bu değerler için kendi adlarınızı bu şekilde alasınız.

    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'
    
    Parametre Yorumlar
    SubscriptionName Kaynak kaynağınız için kullanmak üzere Azure Tam Ekran Okuyucu adı. Kaynak oluşturmak için bir aboneliğiniz olması gerekir.
    ResourceName '-' ilk veya son karakter değilse alfasayısal olmalı ve '-' içerebilir. Uzunluk 63 karakterden uzun olamaz.
    ResourceSubdomain Kaynak kaynağınız için özel bir alt etki Tam Ekran Okuyucu gerekir. Alt etki alanı, Sdk tarafından Okuyucuyu başlatmak için Tam Ekran Okuyucu hizmeti çağrılırken kullanılır. Alt etki alanı genel olarak benzersiz olmalıdır. '-' ilk veya son karakter değilse alt etki alanı alfasayısal olmalı ve '-' içerebilir. Uzunluk 63 karakterden uzun olamaz. Kaynak zaten varsa bu parametre isteğe bağlıdır.
    ResourceSKU Seçenekler: S0 (Standart katman) veya S1 (Eğitim/Kar amacı gütmeyen kuruluşlar). Kullanılabilir SKU'lar hakkında daha fazla bilgi edinmek için Bilişsel Hizmetler fiyatlandırma sayfamızı ziyaret edin. Kaynak zaten varsa bu parametre isteğe bağlıdır.
    ResourceLocation Seçenekler: eastus eastus2 , , , , southcentralus , , , , westus , westus2 australiaeast southeastasia centralindia japaneast northeurope uksouth westeurope . Kaynak zaten varsa bu parametre isteğe bağlıdır.
    ResourceGroupName Kaynaklar aboneliklerin içindeki kaynak gruplarında oluşturulur. Mevcut bir kaynak grubunun adını girin. Kaynak grubu zaten yoksa, bu adla yeni bir tane oluşturulur.
    ResourceGroupLocation Kaynak grubunuz yoksa, grubu oluşturmak için bir konum oluşturmanız gerekir. Konum listesini bulmak için az account list-locations çalıştırın. Döndürülen sonucun name özelliğini (boşluk olmadan) kullanın. Kaynak grubunuz zaten varsa bu parametre isteğe bağlıdır.
    AADAppDisplayName Uygulama Azure Active Directory adı. Mevcut bir Azure AD uygulaması bulunamasa, bu adla yeni bir uygulama oluşturulur. Azure AD uygulaması zaten varsa bu parametre isteğe bağlıdır.
    AADAppIdentifierUri Azure AD uygulamasının URI'si. Mevcut bir Azure AD uygulaması bulunamazsa, bu URI'ye sahip yeni bir uygulama oluşturulur. Örneğin, https://immersivereaderaad-mycompany.
    AADAppClientSecret Daha sonra uygulamayı başlatmak için belirteç alırken kimlik doğrulaması yapmak için kullanılacak bir parola Tam Ekran Okuyucu. Parola en az 16 karakter uzunluğunda olmalı, en az 1 özel karakter içermeli ve en az 1 sayısal karakter içermelidir. Bu kaynağı oluşturduktan sonra Azure AD uygulama istemci gizli dizilerini yönetmek için lütfen giriş -> Azure Active Directory -> Uygulama Kayıtları -> -> Sertifikalar ve Gizli Diziler dikey penceresi -> İstemci Gizli Dizileri bölümüne gidin (aşağıdaki "Azure AD uygulama gizli dizilerinizi yönetme" ekran görüntüsünde gösterildiği https://portal.azure.com [AADAppDisplayName] gibi).
    AADAppClientSecretExpiration Süresi dolacak tarih veya tarih saat [AADAppClientSecret] (örneğin, '2020-12-31T11:59:59+00:00' veya '2020-12-31').

    Azure AD uygulama gizli dizilerinizi yönetme

    Azure Portal Sertifikaları ve Gizli Diziler dikey penceresi

  4. JSON çıkışını daha sonra kullanmak üzere bir metin dosyasına kopyalayın. Çıktı aşağıdaki gibi görünüyor olabilir.

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

Sonraki adımlar

  • Tam Ekran Okuyucu SDK'sı ileNode.js sdk'sı ile başka neler Node.js
  • Java veya Android için Kotlin kullanarak Tam Ekran Okuyucu SDK'sı ile başka neler yapalarını görmek için Android öğreticisini görüntüleme
  • iOS için Swift kullanarak Tam Ekran Okuyucu SDK'sı ile başka neler yapalarını görmek için iOS öğreticisi'ne bakın
  • Python kullanarak Tam Ekran Okuyucu SDK'sı ile başka neler Tam Ekran Okuyucu Python öğreticisi'ne bakın
  • Tam Ekran Okuyucu SDK'sı ve Tam Ekran Okuyucu SDK Başvurusu'Tam Ekran Okuyucu keşfedin