Öğretici: Microsoft kimlik platformu kullanan çok kiracılı bir daemon oluşturma

Bu öğreticide, Microsoft Graph API'sini çağırmak üzere erişim belirteci almak için OAuth 2.0 istemci kimlik bilgilerinin kullanılmasını gösteren bir ASP.NET daemon web uygulaması indirip çalıştıracaksınız.

Bu öğreticide:

  • Daemon uygulamasını Microsoft kimlik platformu ile tümleştirme
  • Bir yönetici tarafından uygulamaya doğrudan uygulama izinleri verme
  • Microsoft Graph API'sini çağırmak için erişim belirteci alma
  • Microsoft Graph API'sini çağırın.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

  • Visual Studio 2017 veya 2019.
  • Microsoft Entra kiracısı. Daha fazla bilgi için bkz . Microsoft Entra kiracısını alma.
  • Kiracınızdaki bir veya daha fazla kullanıcı hesabı. Bu örnek bir Microsoft hesabıyla çalışmaz. Bir Microsoft hesabıyla oturum açtıysanız ve dizininizde hiç kullanıcı hesabı oluşturmadıysanız, bunu şimdi yapın.

Senaryo

Uygulama bir ASP.NET MVC uygulaması olarak oluşturulur. Kullanıcıları oturum açmak için OWIN OpenID Bağlan ara yazılımını kullanır.

Bu örnekteki "daemon" bileşeni bir API denetleyicisidir SyncController.cs. Denetleyici çağrıldığında, müşterinin Microsoft Graph'teki Microsoft Entra kiracısında bulunan kullanıcıların listesini çeker. SyncController.cs web uygulamasında bir AJAX çağrısı tarafından tetikleniyor. Microsoft Graph için bir erişim belirteci almak üzere .NET için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanır.

Uygulama Microsoft işletme müşterileri için çok kiracılı bir uygulama olduğundan, müşterilerin uygulamayı şirket verilerine "kaydolmaları" veya "bağlamaları" için bir yol sağlaması gerekir. Bağlantı akışı sırasında Genel Yönetici istrator, şirket verilerine oturum açmış bir kullanıcı olmadan etkileşimli olmayan bir şekilde erişebilmesi için önce uygulamaya doğrudan uygulama izinleri verir. Bu örnekteki mantığın büyük bölümü, kimlik platformunun yönetici onay uç noktasını kullanarak bu bağlantı akışının nasıl elde edilebilini gösterir.

Diagram shows UserSync App with three local items connecting to Azure, with Start dot Auth acquiring a token interactively to connect to Microsoft Entra ID, AccountController getting admin consent to connect to Microsoft Entra ID, and SyncController reading user to connect to Microsoft Graph.

Bu örnekte kullanılan kavramlar hakkında daha fazla bilgi için kimlik platformu için istemci kimlik bilgileri protokolü belgelerini okuyun.

Bu depoyu kopyalayın veya indirin

Kabuğunuzdan veya komut satırınızdan şu komutu girin:

git clone https://github.com/Azure-Samples/active-directory-dotnet-daemon-v2.git

Veya örneği bir zip dosyasına indirin.

Uygulamanızı kaydetme

Bu örnekte bir proje vardır. Uygulamayı Microsoft Entra kiracınıza kaydetmek için şunları yapabilirsiniz:

  • Kiracıyı seçme ve Örneği kiracınızı kullanacak şekilde yapılandırma'daki adımları izleyin.
  • Şu PowerShell betiklerini kullanın:
    • Microsoft Entra uygulamalarını ve ilgili nesneleri (parolalar, izinler, bağımlılıklar) sizin için otomatik olarak oluşturun.
    • Visual Studio projelerinin yapılandırma dosyalarını değiştirin.

Otomasyonu kullanmak istiyorsanız:

  1. Windows'da PowerShell'i çalıştırın ve kopyalanan dizinin köküne gidin.

  2. Şu komutu çalıştırın:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  3. Betiği çalıştırarak Microsoft Entra uygulamanızı oluşturun ve örnek uygulamanın kodunu buna göre yapılandırın:

    .\AppCreationScripts\Configure.ps1
    

    Betik çalıştırmanın diğer yolları Uygulama oluşturma betikleri bölümünde açıklanmıştır.

  4. Visual Studio çözümünü açın ve kodu çalıştırmak için Başlat'ı seçin.

Otomasyonu kullanmak istemiyorsanız, aşağıdaki bölümlerde yer alan adımları kullanın.

Kiracıyı seçin

Bahşiş

Bu makaledeki adımlar, başladığınız portala göre biraz değişiklik gösterebilir.

  1. Microsoft Entra yönetim merkezinde en azından Uygulama Geliştiricisi olarak oturum açın.

  2. Birden çok kiracıya erişiminiz varsa, dizinler + abonelikler menüsünden uygulamayı kaydetmek istediğiniz kiracıya geçmek için üst menüdeki Ayarlar simgesini kullanın.

  3. Kimlik>Uygulamaları'na> göz atın Uygulama kayıtları.

  4. Yeni kayıt öğesini seçin.

  5. Uygulamanız için bir Ad girin, örneğin dotnet-web-daemon-v2. Uygulamanızın kullanıcıları bu adı görebilir ve daha sonra değiştirebilirsiniz.

  6. Desteklenen hesap türleri bölümünde Herhangi bir kuruluş dizinindeki Hesaplar'ı seçin.

  7. Yeniden Yönlendirme URI'leri (isteğe bağlı) bölümünde, birleşik giriş kutusunda Web'i seçin ve yeniden yönlendirme URI'leri olarak girin https://localhost:44316/https://localhost:44316/Account/GrantPermissions.

    İkiden fazla yeniden yönlendirme URI'si varsa, uygulama başarıyla oluşturulduktan sonra bunları daha sonra Kimlik Doğrulama sekmesinden eklemeniz gerekir.

  8. Uygulamayı kaydetmek için Kaydet'i seçin.

  9. Uygulamanın Genel Bakış sayfasında Uygulama (istemci) kimliği değerini bulun ve daha sonra kullanmak üzere kaydedin. Bu proje için Visual Studio yapılandırma dosyasını yapılandırmak için buna ihtiyacınız olacak.

  10. Yönet'in altında Kimlik Doğrulama'yı seçin.

  11. Ön kanal oturumu kapatma URL'sini olarak https://localhost:44316/Account/EndSessionayarlayın.

  12. Örtük verme ve karma akışlar bölümünde Erişim belirteçleri ve kimlik belirteçleri'ni seçin. Bu örnek, kullanıcıda oturum açmak ve bir API çağırmak için örtük verme akışının etkinleştirilmesini gerektirir.

  13. Kaydet'i seçin.

  14. Yönet'in altında Sertifikalar ve gizli diziler'i seçin.

  15. Gizli anahtarlar bölümünün altında, Yeni gizli anahtar'ı seçin.

  16. Anahtar açıklaması (örneğin, uygulama gizli dizisi) girin.

  17. 1 yıl içinde, 2 yıl içinde veya Süresi Dolmaz olarak bir anahtar süresi seçin.

  18. Ekle'yi seçin. Anahtar değerini güvenli bir konuma kaydedin. Projeyi Visual Studio'da yapılandırmak için daha sonra bu anahtara ihtiyacınız olacak.

  19. Yönet'in altında API izinleri>İzin ekle'yi seçin.

  20. Yaygın kullanılan Microsoft API'leri bölümünde Microsoft Graph'ı seçin.

  21. Uygulama izinleri bölümünde doğru izinlerin seçildiğinden emin olun: User.Read.All.

  22. İzinler ekle'yi seçin.

Örneği kiracınızı kullanacak şekilde yapılandırma

Aşağıdaki adımlarda ClientID, "uygulama kimliği" veya AppId ile aynıdır.

Projeleri yapılandırmak için çözümü Visual Studio'da açın.

İstemci projesini yapılandırma

Kurulum betiklerini kullandıysanız, aşağıdaki değişiklikler sizin için uygulanır.

  1. UserSync\Web.Config dosyasını açın.
  2. ida:ClientId uygulama anahtarını bulun. Var olan değeri daha önce kaydedilmiş olan dotnet-web-daemon-v2 uygulamasının uygulama kimliğiyle değiştirin.
  3. ida:ClientSecret uygulama anahtarını bulun. Mevcut değeri dotnet-web-daemon-v2 uygulamasını oluştururken kaydettiğiniz anahtarla değiştirin.

Örneği çalıştırma

Çözümü temizleyin, çözümü yeniden derleyin, UserSync uygulamasını çalıştırın ve ardından Microsoft Entra kiracınızda yönetici olarak oturum açın. Test için bir Microsoft Entra kiracınız yoksa, bu yönergeleri izleyerek bir kiracı edinebilirsiniz.

Oturum açtığınızda, uygulama ilk olarak oturum açmanız ve kullanıcı profilinizi okumanız için sizden izin ister. Bu onay, uygulamanın iş kullanıcısı olduğunuzdan emin olmasını sağlar.

User consent

Uygulama daha sonra Microsoft Graph aracılığıyla Microsoft Entra kiracınızdaki kullanıcıların listesini eşitlemeye çalışır. Aksi takdirde sizden (kiracı yöneticisi) kiracınızı uygulamaya bağlamanızı ister.

Uygulama daha sonra kiracınızdaki kullanıcıların listesini okumak için izin ister.

Admin consent

İzin verdikten sonra uygulama oturumunuz kapatmış demektir. Bu oturum kapatma, Microsoft Graph için mevcut tüm erişim belirteçlerinin belirteç önbelleğinden kaldırılmasını sağlar. Yeniden oturum açtığınızda, alınan yeni belirteç Microsoft Graph'a çağrı yapmak için gerekli izinlere sahip olur.

İzin verdiğinizde, uygulama herhangi bir noktada kullanıcıları sorgulayabilir. Kullanıcıları Eşitle düğmesini seçip kullanıcı listesini yenileyerek bunu doğrulayabilirsiniz. Kullanıcı eklemeyi veya kaldırmayı ve listeyi yeniden eşitlemeyi deneyin. (Ancak, uygulamanın yalnızca kullanıcıların ilk sayfasını eşitlediğini unutmayın.)

Kod hakkında

Bu örnek için ilgili kod aşağıdaki dosyalardadır:

  • App_Start\Startup.Auth.cs, Controllers\AccountController.cs: İlk oturum açma. Özellikle, denetleyicideki eylemler kullanıcıyı oturum açmaya zorlayan bir Authorize özniteliğine sahiptir. Uygulama, kullanıcıda oturum açmak için yetkilendirme kodu akışını kullanır.
  • Controllers\SyncController.cs: Kullanıcı listesini yerel bellek içi depoyla eşitleme.
  • Controllers\UserController.cs: Yerel bellek içi depodaki kullanıcıların listesini görüntüleme.
  • Controllers\AccountController.cs: Yönetici onay uç noktasını kullanarak kiracı yöneticisinden izin alma.

Örnek uygulamayı yeniden oluşturma

  1. Visual Studio'da yeni bir Visual C#ASP.NET Web Uygulaması (.NET Framework) projesi oluşturun.
  2. Sonraki ekranda MVC proje şablonunu seçin. Daha sonra bir web API denetleyicisi ekleyeceğiniz için Web API'sine klasör ve çekirdek başvuruları da ekleyin. Projenin seçilen kimlik doğrulama modunu varsayılan olarak bırakın: Kimlik Doğrulaması Yok.
  3. Çözüm Gezgini penceresinde projeyi seçin ve F4 tuşunu seçin.
  4. Proje özelliklerinde SSL Etkin'i True olarak ayarlayın. SSL URL'sindeki bilgileri not edin. Azure portalında bu uygulamanın kaydını yapılandırırken buna ihtiyacınız olacaktır.
  5. Aşağıdaki ASP.NET OWIN ara yazılımı NuGet paketlerini ekleyin:
    • Microsoft.Owin.Security.ActiveDirectory
    • Microsoft.Owin.Security.Cookies
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.IdentityModel.Protocol.Extensions
    • Microsoft.Owin.Security.OpenIdConnect
    • Microsoft.Identity.Client
  6. App_Start klasöründe:
    1. Startup.Auth.cs adlı bir sınıf oluşturun.
    2. öğesini kaldırın . ad alanı adından App_Start.
    3. Başlangıç sınıfının kodunu örnek uygulamanın aynı dosyasındaki kodla değiştirin. Tüm sınıf tanımını almayı unutmayın. Tanım, genel sınıf Başlangıçolan genel kısmi sınıf Başlangıç olarak değişir.
  7. Startup.Auth.cs dosyasında, Visual Studio IntelliSense tarafından önerilen using deyimlerini ekleyerek eksik başvuruları çözün.
  8. Projeye sağ tıklayın, Ekle'yi ve ardından Sınıf'ı seçin.
  9. Arama kutusuna OWIN yazın. OWIN Başlangıç sınıfı bir seçim olarak görünür. Seçin ve Startup.cs sınıfını adlandırın.
  10. Startup.cs dosyasında Startup sınıfının kodunu örnek uygulamanın aynı dosyasındaki kodla değiştirin. Tanımın genel sınıf Başlangıç olan genel kısmi sınıf Startup'adeğiştiğini unutmayın.
  11. Models klasörüne MsGraphUser.cs adlı yeni bir sınıf ekleyin. uygulamayı, örnekteki aynı ada sahip dosyanın içeriğiyle değiştirin.
  12. Yeni bir MVC 5 Denetleyicisi ekleyin - AccountController adlı boş örnek. uygulamayı, örnekteki aynı ada sahip dosyanın içeriğiyle değiştirin.
  13. Yeni bir MVC 5 Denetleyicisi ekleyin - UserController adlı boş örnek. uygulamayı, örnekteki aynı ada sahip dosyanın içeriğiyle değiştirin.
  14. Yeni bir Web API 2 Denetleyicisi ekleyin - SyncController adlı boş örnek. uygulamayı, örnekteki aynı ada sahip dosyanın içeriğiyle değiştirin.
  15. Kullanıcı arabirimi için Views\Account klasöründe GrantPermissions, Index ve UserMismatch adlı üç Boş (modelsiz) Görünüm örneği ekleyin. Views\User klasörüne dizin adını ekleyin. uygulamayı, örnekteki aynı ada sahip dosyanın içeriğiyle değiştirin.
  16. Çeşitli görünümleri doğru şekilde birbirine bağlamak için Shared_Layout.cshtml ve Home\Index.cshtml'yi güncelleştirin.

Örneği Azure'a dağıtma

Bu projede web uygulaması ve web API'si projeleri vardır. Bunları Azure web sitelerine dağıtmak için her biri için aşağıdaki adımları uygulayın:

  1. Bir Azure web sitesi oluşturun.
  2. Web uygulamasını ve web API'lerini web sitesinde yayımlayın.
  3. İstemcileri IIS Express yerine web sitesini çağıracak şekilde güncelleştirin.

Dotnet-web-daemon-v2 oluşturma ve Azure web sitesinde yayımlama

  1. Azure Portal oturum açın.
  2. Sol üst köşeden Kaynak oluştur'u seçin.
  3. Web>Web App'i seçin ve web sitenize bir ad verin. Örneğin, dotnet-web-daemon-v2-contoso.azurewebsites.net olarak adlandır.
  4. Abonelik, Kaynak grubu, App service planı ve konumu bilgilerini seçin. İşletim sistemi Windows,Yayımla ise Koddur.
  5. Oluştur'u seçin ve uygulama hizmetinin oluşturulmasını bekleyin.
  6. Dağıtım başarılı bildirimini aldığınızda Kaynağa git'i seçerek yeni oluşturulan uygulama hizmetine gidin.
  7. Web sitesi oluşturulduktan sonra Pano'da bulun ve app service'in Genel Bakış ekranını açmak için seçin.
  8. Uygulama hizmetinin Genel Bakış sekmesinden Yayımlama profilini al bağlantısını seçerek yayımlama profilini indirin ve kaydedin. Kaynak denetiminden dağıtma gibi diğer dağıtım mekanizmalarını kullanabilirsiniz.
  9. Visual Studio'ya geçin ve ardından:
    1. dotnet-web-daemon-v2 projesine gidin.
    2. Çözüm Gezgini'da projeye sağ tıklayın ve yayımla'yı seçin.
    3. Alt çubukta Profili İçeri Aktar'ı seçin ve daha önce indirdiğiniz yayımlama profilini içeri aktarın.
  10. Yapılandır'yı seçin.
  11. Bağlan sekmesinde hedef URL'yi "https" kullanacak şekilde güncelleştirin. Örneğin, kullanınhttps://dotnet-web-daemon-v2-contoso.azurewebsites.net. İleri'yi seçin.
  12. Ayarlar sekmesinde Kuruluş Kimlik Doğrulamasını Etkinleştir'in temizlendiğinden emin olun.
  13. Kaydet'i seçin. Ana ekranda Yayımla'yı seçin.

Visual Studio projeyi yayımlar ve projenin URL'sinde otomatik olarak bir tarayıcı açar. Projenin varsayılan web sayfasını görürseniz yayın başarılı oldu.

dotnet-web-daemon-v2 için Microsoft Entra kiracı uygulaması kaydını güncelleştirme

  1. Microsoft Entra yönetim merkezine dönün ve Uygulama kayıtları'da dotnet-web-daemon-v2 uygulamasını seçin.
  2. Uygulamanızın Kimlik Doğrulaması sayfasında Ön kanal oturumu kapatma URL'si alanlarını hizmetinizin adresiyle güncelleştirin. Örneğin, kullanın https://dotnet-web-daemon-v2-contoso.azurewebsites.net/Account/EndSession.
  3. Marka menüsünden Giriş sayfası URL'sini hizmetinizin adresine güncelleştirin. Örneğin, kullanın https://dotnet-web-daemon-v2-contoso.azurewebsites.net.
  4. Yapılandırmayı kaydedin.
  5. Kimlik Doğrulama>Yeniden Yönlendirme URI'leri menüsünün değerler listesine aynı URL'yi ekleyin. Birden çok yeniden yönlendirme URL'niz varsa, her yeniden yönlendirme URL'si için app service'in URI'sini kullanan yeni bir giriş olduğundan emin olun.

Kaynakları temizleme

Artık gerekli olmadığında, Uygulamanızı kaydetme adımında oluşturduğunuz uygulama nesnesini silin. Uygulamayı kaldırmak için, Siz veya kuruluşunuz tarafından yazılan bir uygulamayı kaldırma başlığındaki yönergeleri izleyin.

Yardım alma

Topluluktan destek almak için Microsoft Soru-Cevap'ı kullanın. Önce Microsoft Soru-Cevap ile ilgili sorularınızı sorun ve daha önce birinin sorunuzu sorup sormadığını görmek için mevcut sorunlara göz atın. Sorularınızın veya açıklamalarınızın , azure-ad-msalve dotnet-standardile azure-ad-adal-deprecationetiketlenmiş olduğundan emin olun.

Örnekte bir hata bulursanız lütfen Sorunu GitHub Sorunları'nda yükseltin.

MSAL.NET'da bir hata bulursanız lütfen github sorunlarını MSAL.NET sorunu giderin.

Öneri sağlamak için Kullanıcı Sesi sayfasına gidin.

Sonraki adımlar

Korumalı web API'lerine erişmek için Microsoft kimlik platformu kullanan daemon uygulamaları oluşturma hakkında daha fazla bilgi edinin: