İstemci uygulaması kimlik doğrulama kodunu yaz

Bir Azure dijital TWINS örneği ve kimlik doğrulamasıayarladıktan sonra, örnekle etkileşim kurmak için kullanacağınız bir istemci uygulaması oluşturabilirsiniz. Bir başlatıcı istemci projesi ayarladıktan sonra, Azure dijital TWINS örneğinde kimlik doğrulaması yapmak için bu istemci uygulamasında kod yazmanız gerekir.

Azure dijital TWINS, OAUTH 2,0 tabanlı Azure AD güvenlik belirteçlerinikullanarak kimlik doğrular. SDK 'nizin kimliğini doğrulamak için, Azure dijital TWINS için doğru izinlere sahip bir taşıyıcı belirteci almanız ve API çağrılarınızla birlikte geçireceğiz.

Bu makalede, istemci kitaplığı kullanılarak kimlik bilgilerinin nasıl alınacağı açıklanır Azure.Identity . Bu makalede, .net (C#) SDK 'sıiçin yazdıklarınız gibi C# dilinde kod örnekleri gösterilirken, Azure.Identity kullandığınız SDK 'ya bakılmaksızın bir sürümünü kullanabilirsiniz (Azure dijital TWINS Için kullanılabilir SDK 'lar hakkında daha fazla bilgi Için bkz. Azure Digital TWINS API 'leri ve SDK'ları.

Önkoşullar

İlk olarak, bir örnek ayarlama ve kimlik doğrulamaiçindeki kurulum adımlarını doldurun. Bu kurulum, bir Azure dijital TWINS örneğine sahip olmanızı ve kullanıcılarınızın erişim izinlerine sahip olmasını sağlayacaktır. Bu kurulumdan sonra istemci uygulama kodu yazmaya hazırsınız demektir.

Devam etmek için, kodunuzu yazdığınız bir istemci uygulaması projesine ihtiyacınız vardır. Önceden ayarlanmış bir istemci uygulama projeniz yoksa, bu öğreticide kullanmak üzere seçtiğiniz dilde temel bir proje oluşturun.

Azure. Identity Library kullanarak kimlik doğrulama

Azure.Identity , bir taşıyıcı belirteç almak ve SDK 'inizle kimlik doğrulamak için kullanabileceğiniz çeşitli kimlik bilgileri alma yöntemleri sağlayan bir istemci kitaplığıdır. Bu makale C# dilinde örnekler sağlasa da Azure.Identity dahil olmak üzere çeşitli diller için görüntüleyebilirsiniz...

Üç ortak kimlik bilgisi-içindeki yöntemleri alma Azure.Identity :

  • DefaultAzureCredential TokenCredential , Azure 'a dağıtılacak uygulamalar için varsayılan bir kimlik doğrulama akışı sağlar ve yerel geliştirme için önerilen seçenektir. Ayrıca, bu makalede önerilen diğer iki yöntemi denemek için de etkinleştirilebilir; ManagedIdentityCredential InteractiveBrowserCredential bir yapılandırma değişkeniyle birlikte kaydırılır ve buna erişebilir.
  • Managedıdentitycredential , YÖNETILEN kimlikler (MSI)gerektiren durumlarda harika çalışır ve Azure Işlevleri ile çalışmaya ve Azure hizmetlerine dağıtmaya yönelik iyi bir adaydır.
  • Interactivebrowsercredential etkileşimli uygulamalara yöneliktir ve kimliği DOĞRULANMıŞ bir SDK istemcisi oluşturmak için kullanılabilir.

Bu makalenin geri kalanında, bu yöntemlerin .net (C#) SDK 'sıile nasıl kullanılacağı gösterilmektedir.

.NET projenize Azure. Identity ekleyin

.NET projenizi ile kimlik doğrulaması yapacak şekilde ayarlamak için Azure.Identity aşağıdaki adımları izleyin:

  1. SDK paketini Azure.DigitalTwins.Core ve Azure.Identity paketini projenize ekleyin. tercih ettiğiniz araçlara bağlı olarak, Visual Studio paket yöneticisi veya komut satırı aracını kullanarak paketleri dahil edebilirsiniz dotnet .

  2. Aşağıdaki using deyimlerini proje kodunuza ekleyin:

    using Azure.DigitalTwins.Core;
    using Azure.Identity;
    using System;
    

Daha sonra, içindeki yöntemlerden birini kullanarak kimlik bilgilerini almak için kod ekleyin Azure.Identity . Aşağıdaki bölümler her birini kullanma hakkında daha ayrıntılı bilgi verir.

DefaultAzureCredential yöntemi

DefaultAzureCredential TokenCredential , Azure 'a dağıtılacak uygulamalar için varsayılan bir kimlik doğrulama akışı sağlar ve yerel geliştirme için önerilen seçenektir.

Varsayılan Azure kimlik bilgilerini kullanmak için Azure Digital TWINS örneğinin URL 'SI (bulunacak yönergeler) gerekir.

Projenize bir eklemek için bir kod örneği aşağıda verilmiştir DefaultAzureCredential :

public class DefaultAzureCredentialSample
{
    // The URL of your instance, starting with the protocol (https://)
    private const string adtInstanceUrl = "https://<your-Azure-Digital-Twins-instance-URL>";

    internal void RunSample()
    {
        //...

        DigitalTwinsClient client;
        try
        {
            var credential = new DefaultAzureCredential();
            client = new DigitalTwinsClient(new Uri(adtInstanceUrl), credential);
        }
        catch (Exception e)
        {
            Console.WriteLine($"Authentication or client creation error: {e.Message}");
            Environment.Exit(0);
        }
    }

Yerel Azure kimlik bilgilerini ayarlama

İle DefaultAzureCredential , örnek, yerel ortamınızda, yerel bir Azure CLI veya Visual Studio ya da Visual Studio Code bir Azure oturum açma gibi kimlik bilgilerini arar. Bu nedenle, örnek için kimlik bilgilerini ayarlamak üzere bu mekanizmalardan biri aracılığıyla yerel olarak Azure 'da oturum açmanız gerekir.

Kod örneğini çalıştırmak için Visual Studio 'Yu veya Visual Studio Code kullanıyorsanız, Bu düzenleyicide Azure dijital TWINS örneğinize erişmek için kullanmak istediğiniz Azure kimlik bilgileriyle oturum açtığınızdan emin olun.

Aksi takdirde, Yerel Azure CLI 'yı yükleyebilir, makinenizde bir komut istemi başlatabilir ve az login Azure hesabınızda oturum açmak için komutunu çalıştırabilirsiniz. Oturum açtıktan sonra, kod örneğinizi çalıştırdığınızda otomatik olarak oturumunuzu açmanız gerekir.

Managedıdentitycredential yöntemi

Managedıdentitycredential yöntemi, YÖNETILEN kimliklere (MSI)ihtiyacınız olan durumlarda (örneğin, Azure işlevleriyle kimlik doğrulanırken) harika bir şekilde çalışır.

Bu, ManagedIdentityCredential DefaultAzureCredential InteractiveBrowserCredential projenin farklı bir bölümünün kimliğini doğrulamak için veya ile aynı projede kullanabileceğiniz anlamına gelir.

Varsayılan Azure kimlik bilgilerini kullanmak için Azure Digital TWINS örneğinin URL 'SI (bulunacak yönergeler) gerekir. Ayrıca bir uygulama kaydı ve kaydın uygulama (istemci) kimliğide gerekebilir.

Bir Azure işlevinde, aşağıdaki gibi yönetilen kimlik bilgilerini kullanabilirsiniz:

public class ManagedIdentityCredentialSample
{
    // The URL of your instance, starting with the protocol (https://)
    private const string adtInstanceUrl = "https://<your-Azure-Digital-Twins-instance-URL>";
    // Your client / app registration ID
    private const string adtAppId = "<your-client-ID>";

    internal void RunSample()
    {
        DigitalTwinsClient client;
        try
        {
            ManagedIdentityCredential cred = new ManagedIdentityCredential(adtAppId);
            client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
        }
        catch (Exception e)
        {
            Console.WriteLine($"Authentication or client creation error: {e.Message}");
            Environment.Exit(0);
        }
    }
}

Interactivebrowsercredential yöntemi

Interactivebrowsercredential yöntemi etkileşimli uygulamalara yöneliktir ve kimlik doğrulaması için bir Web tarayıcısı getirir. DefaultAzureCredentialEtkileşimli kimlik doğrulaması gerektiren durumlar yerine bu yöntemi kullanabilirsiniz.

Etkileşimli tarayıcı kimlik bilgilerini kullanmak için Azure dijital TWINS API 'Leri için izinlere sahip bir uygulama kaydına ihtiyacınız vardır. Bu uygulama kaydını ayarlama adımları için bkz. uygulama kaydı oluşturma. Uygulama kaydı kurulduktan sonra...

Kullanarak kimliği doğrulanmış SDK istemcisi oluşturmak için koda bir örnek aşağıda verilmiştir InteractiveBrowserCredential .

public class InteractiveBrowserCredentialSample
{
    // Your client / app registration ID
    private const string clientId = "<your-client-ID>";
    // Your tenant / directory ID
    private const string tenantId = "<your-tenant-ID>";
    // The URL of your instance, starting with the protocol (https://)
    private const string adtInstanceUrl = "https://<your-Azure-Digital-Twins-instance-URL>";

    internal void RunSample()
    {
        //...

        DigitalTwinsClient client;
        try
        {
            var credential = new InteractiveBrowserCredential(tenantId, clientId);
            client = new DigitalTwinsClient(new Uri(adtInstanceUrl), credential);
        }
        catch (Exception e)
        {
            Console.WriteLine($"Authentication or client creation error: {e.Message}");
            Environment.Exit(0);
        }
    }

Not

İstemci KIMLIĞI, kiracı KIMLIĞI ve örnek URL 'sini yukarıda gösterildiği gibi doğrudan koda yerleştirebileceğiniz sürece, kodunuzun bu değerleri bir yapılandırma dosyası veya ortam değişkeniyle alması iyi bir fikirdir.

Azure Işlevleri kimlik doğrulaması

Bu bölüm, Azure Işlevleri ile kimlik doğrulama bağlamında önemli yapılandırma Seçimlerinizden bazılarını içerir. İlk olarak, işlevin Azure dijital TWINS 'e erişmesine izin veren önerilen sınıf düzeyi değişkenler ve kimlik doğrulama kodu hakkında bilgi edineceksiniz. Daha sonra, kodunuz Azure 'da yayımlandıktan sonra işleviniz için tamamlanacak son yapılandırma adımları hakkında bilgi edineceksiniz.

Uygulama kodu yaz

Azure işlevini yazarken, işlevlerinize şu değişkenleri ve kodu eklemeyi göz önünde bulundurun:

  • Bir ortam değişkeni veya yapılandırma ayarı olarak Azure Digital TWINS hizmet URL 'sini okumak için kod. Hizmet URL 'sini, bir uygulama ayarı/ortam değişkeninden, işlev içinde sabit kodlamak yerine okumak iyi bir uygulamadır. Bir Azure işlevinde, ortam değişkenini okumak için bu kod aşağıdaki gibi görünebilir:

    private static readonly string adtInstanceUrl = Environment.GetEnvironmentVariable("ADT_SERVICE_URL");
    

    Daha sonra, işlevi yayımladıktan sonra bu kod için ortam değişkeninin değerini okunacak şekilde ayarlayacaksınız. Bunun nasıl yapılacağı hakkında yönergeler için uygulama ayarlarını yapılandırmabölümüne atlayın.

  • HttpClient örneğini tutacak statik bir değişken. HttpClient 'ın oluşturulması nispeten pahalıdır, bu nedenle her işlev çağrısında oluşturmaktan kaçınmak üzere kimlik doğrulama koduyla bir kez oluşturmak isteyeceksiniz.

    private static readonly HttpClient singletonHttpClientInstance = new HttpClient();
    
  • Yönetilen kimlik kimlik bilgileri. İşlevinizin Azure dijital TWINS 'e erişmek için kullanacağı bir yönetilen kimlik kimlik bilgisi oluşturun.

    var cred = new ManagedIdentityCredential("https://digitaltwins.azure.net");
    

    Daha sonra, işlevi yayımladıktan sonra işlevin kimliğinin Azure dijital TWINS API 'Lerine erişim izni olduğundan emin olacaksınız. Bunun nasıl yapılacağı hakkında yönergeler için, erişim rolü atamakonusuna atlayın.

  • Yerel değişken DigitalTwinsClient. Azure Digital TWINS istemci örneğinizi tutmak için işlevinizin içindeki değişkeni ekleyin. Bu değişkeni sınıfınızın içinde statik yapmayın.

    var client = new DigitalTwinsClient(
        new Uri(adtInstanceUrl),
        cred,
        new DigitalTwinsClientOptions
        {
            Transport = new HttpClientTransport(singletonHttpClientInstance)
        });
    
  • AdtInstanceUrl için null denetimi. Null denetimini ekleyin ve ardından özel durumları yakalamak için try/catch bloğunda işlev mantığınızı sarın.

Bu değişkenler bir işleve eklendikten sonra, işlev kodunuz aşağıdaki örnekteki gibi görünebilir.

// Default URL for triggering event grid function in the local environment.
// http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname}
//<Function_dependencies>
using Azure.Core.Pipeline;
using Azure.DigitalTwins.Core;
using Azure.Identity;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
using System;
using System.Net.Http;
//</Function_dependencies>

namespace DigitalTwins_Samples
{
    public class DigitalTwinsIngestFunctionSample
    {
        // Your Digital Twin URL is stored in an application setting in Azure Functions
        // <ADT_service_URL>
        private static readonly string adtInstanceUrl = Environment.GetEnvironmentVariable("ADT_SERVICE_URL");
        // </ADT_service_URL>
        // <HTTP_client>
        private static readonly HttpClient singletonHttpClientInstance = new HttpClient();
        // </HTTP_client>

        [FunctionName("TwinsFunction")]
        public void Run([EventGridTrigger] EventGridEvent eventGridEvent, ILogger log)
        {
            log.LogInformation(eventGridEvent.Data.ToString());
            if (adtInstanceUrl == null) log.LogError("Application setting \"ADT_SERVICE_URL\" not set");
            try
            {
                // Authenticate with Digital Twins
                // <ManagedIdentityCredential>
                var cred = new ManagedIdentityCredential("https://digitaltwins.azure.net");
                // </ManagedIdentityCredential>
                // <DigitalTwinsClient>
                var client = new DigitalTwinsClient(
                    new Uri(adtInstanceUrl),
                    cred,
                    new DigitalTwinsClientOptions
                    {
                        Transport = new HttpClientTransport(singletonHttpClientInstance)
                    });
                // </DigitalTwinsClient>
                log.LogInformation($"ADT service client connection created.");

                // Add your business logic here.
            }
            catch (Exception e)
            {
                log.LogError(e.Message);
            }
        }
    }
}

Kimlik doğrulaması ve işlevin mantığını ekleme dahil olmak üzere işlev kodunuzla işiniz bittiğinde, uygulamayı Azure 'da yayımlayın

Yayımlanan uygulamayı yapılandırma

Son olarak, yayımlanan bir Azure işlevi için aşağıdaki yapılandırma adımlarını tamamlayarak Azure dijital TWINS örneğinizi erişebildiğinden emin olun.

Azure Cloud Shell veya yerel bir Azure CLI'de aşağıdaki komutları çalıştırın.

Erişim rolü atama

Azure işlevi için bir taşıyıcı belirtecinin geçirilmesi gerekir. Taşıyıcı belirtecinin geçirildiğinden emin olmak için, işlev uygulamasına Azure dijital TWINS örneğiniz için Azure dijital TWINS veri sahibi rolünü verin; bu, örnek üzerinde veri düzlemi etkinliklerini gerçekleştirmek için işlev uygulamasına izin verir.

Not

Bu bölüm, izin verme ve temsilci atama dahil olmak üzere Azure kaynaklarına Kullanıcı erişimini yönetme izinlerine sahip bir Azure kullanıcısı tarafından tamamlanmalıdır. Bu gereksinimi karşılayan ortak roller, sahip, Hesap Yöneticisi veya Kullanıcı erişimi Yöneticisi ile katkıda bulunan birleşimidir. Azure dijital TWINS rollerinin izin gereksinimleri hakkında daha fazla bilgi için bkz. bir örnek ayarlama ve kimlik doğrulama.

  1. İşlevinizin sistem tarafından yönetilen kimliğininayrıntılarını görmek için aşağıdaki komutu kullanın. Çıktıda alanı bir yere göz atın principalId . Bu KIMLIĞI, bir sonraki adımda bu izinleri vermek için işlevine başvurmak üzere kullanacaksınız.

    az functionapp identity show --resource-group <your-resource-group> --name <your-function-app-name> 
    

    Not

    Sonuç, kimlik ayrıntılarını göstermek yerine boşsa, bu komutu kullanarak işlev için yeni bir sistem tarafından yönetilen kimlik oluşturun:

    az functionapp identity assign --resource-group <your-resource-group> --name <your-function-app-name>  
    

    Çıktı, bir principalId sonraki adım için gereken değer de dahil olmak üzere kimliğin ayrıntılarını görüntüler.

  2. principalIdIşleve Azure dijital TWINS örneğiniz Için Azure dijital TWINS veri sahibi rolünü vermek üzere aşağıdaki komutta bulunan değeri kullanın.

    az dt role-assignment create --dt-name <your-Azure-Digital-Twins-instance> --assignee "<principal-ID>" --role "Azure Digital Twins Data Owner"
    

Uygulama ayarlarını yapılandırma

Daha sonra, Azure dijital TWINS ÖRNEĞINIZIN URL 'sini, için bir ortam değişkeni ayarlayarak işlevinizin erişimine açık hale getirin.

İpucu

Azure dijital TWINS örneğinin URL 'SI, örneğinizin ana bilgisayar adının başlangıcına https:// eklenerek yapılır. Ana bilgisayar adını, örneğinizin tüm özellikleriyle birlikte görmek için öğesini çalıştırın az dt show --dt-name <your-Azure-Digital-Twins-instance> .

Aşağıdaki komut, örneğinizin örneğine erişmesi gerektiğinde işlevinizin kullanacağı örnek URL 'niz için bir ortam değişkeni ayarlar.

az functionapp config appsettings set --resource-group <your-resource-group> --name <your-function-app-name> --settings "ADT_SERVICE_URL=https://<your-Azure-Digital-Twins-instance-host-name>"

Kiracılar arasında kimlik doğrulaması

azure dijital twıns yalnızca bir Azure Active Directory (azure AD) kiracısıdestekleyen bir hizmettir: azure dijital twıns örneğinin bulunduğu abonelikteki ana kiracı.

Sonuç olarak, Azure Digital TWINS API 'Lerine yönelik istekler, Azure Digital TWINS örneğinin bulunduğu aynı kiracının parçası olan bir kullanıcı veya hizmet sorumlusu gerektirir. Azure dijital TWINS uç noktalarının kötü taramasını engellemek için, kaynak kiracının dışından erişim belirteçleri olan istekler bir "404 Sub-Domain bulunamadı" hata iletisi döndürür. Bu hata, kullanıcıya veya hizmet sorumlusuna Azure AD B2B işbirliği aracılığıyla bir Azure dijital TWINS veri sahibi veya Azure Digital TWINS veri okuyucusu rolü verilse bile döndürülür.

Örnekten farklı bir kiracıya ait bir hizmet sorumlusu veya Kullanıcı hesabı kullanarak Azure dijital TWINS örneğinizi erişmeniz gerekiyorsa, başka bir kiracıya ait her bir federal kimliğin Azure dijital TWINS örneğinin "giriş" kiracısından bir belirteç istemesini sağlayabilirsiniz.

Bunu yapmanın bir yolu, <home-tenant-ID> Azure dijital TWINS örneğini Içeren Azure AD kiracının kimliği olan AŞAĞıDAKI CLI komutuna sahiptir:

az account get-access-token --tenant <home-tenant-ID> --resource https://digitaltwins.azure.net

Bu işlemi tamamladıktan sonra kimlik, Azure https://digitaltwins.azure.net dijital TWINS örneğine eşleşen bir KIRACı kimliği talebi olan Azure AD kaynağı için verilen bir belirteç alır. Bu belirtecin API isteklerinde veya Azure.Identity kodunuzla kullanılması, Federal kimliğin Azure dijital TWINS kaynağına erişmesine izin verebilir.

Ayrıca, kodınızdaki kimlik bilgisi seçeneklerinde giriş kiracısını de belirtebilirsiniz.

Aşağıdaki örnek, seçeneklerde için bir kiracı KIMLIĞI değerinin nasıl ayarlanacağını göstermektedir InteractiveBrowserTenantId DefaultAzureCredential :

DefaultAzureCredentialOptions yöntemini gösteren kodun ekran görüntüsü. Interactivebrowsertenantıd değeri bir örnek kiracı KIMLIĞI değerine ayarlanır.

Visual Studio ve Visual Studio Code kimlik doğrulaması için kiracı ayarlamak üzere kullanılabilecek benzer seçenekler vardır. Kullanılabilir seçenekler hakkında daha fazla bilgi için DefaultAzureCredentialOptions belgelerinebakın.

Diğer kimlik bilgisi yöntemleri

yukarıdaki vurgulanan kimlik doğrulama senaryoları uygulamanızın ihtiyaçlarını kapsamamışsa, Microsoft kimlik platformusunulan diğer kimlik doğrulama türlerini keşfedebilirsiniz. Bu platformun belgeleri, uygulama türüne göre düzenlenmiş daha fazla kimlik doğrulama senaryosu içerir.

Sonraki adımlar

Azure dijital TWINS 'de güvenliğin nasıl çalıştığı hakkında daha fazla bilgi edinin:

Ya da artık kimlik doğrulama ayarlandığına göre, örneğiniz içinde modeller oluşturmak ve yönetmek için ' yi geçin: