Azure Active Directory Application ve Dynamics 365 Application User Kullanımı Sırasında Karşılaşılan Hatalar ve Çözümleri
Bu yazı 04 Mayıs 2019 tarihinde Medium/@dynamics365 altında yayınlanmıştır. 15 Mayıs 2020 tarihinde emregulcan.com altında taşınmıştır.
İçerikler, yazının oluşturulduğu tarih için geçerli olup, Microsoft Dynamics 365 CE, Power Platform ve Azure hizmetlerinin sürekli iyileştirme ve güncelleme döngüsünden dolayı paylaşılan bilgilerde değişiklikler meydana gelmiş olabilir.
Merhaba,
Bu yazıda Azure Active Directory Application, Dynamics 365 CE Application User tanımlaması, kullanımı ve test senaryoları sırasında karşılaştığım hataları ve çözümleri elimden geldiğince anlatmaya çalışacağım.
Popup Window closed by UI action/ Popup Window handle destroyed due to cross zone navigation in IE/Edge
Hata Nedeni
Authentication işlemi sırasında kullanıcı popup pencereyi kapatmış ya da ilgili browser ‘da popup blocker olduğu için authentication popup açılmıyor.
Çözüm
Kullanıcı Authentication işlemini yeniden tetiklemeli. (Örnek : Login butonuna tıklamalı)
AADSTS650004 : The resource owner or authorization server denied the request
Hata Nedeni
Authentication işlemi sırasında kullanıcı ya da sunucu işlemi iptal etmiş. Muhtemelen kullanıcı Authentication ekranını kapatmış ya da Cancel butonuna basmış olabilir.
Çözüm
Kullanıcı Authentication işlemini yeniden tetiklemeli. (Örnek : Login butonuna tıklamalı)
AADSTS700016 : Application with identifier ‘{Application Id}’ was not found in the directory ‘crm4.dynamics.com’. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in tenant. You may have sent your authentication request to the wrong tenant
Hata Nedeni
Kullanmış olduğunuz Client (Application) Id bilgisi hatalı
Çözüm
Azure Active Directory ‘de tanımladığınız Application overview (detay) sayfasında bulunan Application ID bilgisini kullanmalısınız.
AADSTS500111 : The reply uri specified in the request has an invalid scheme
Hata Nedeni
Active Directory Application için tanımlamış olduğunuz Redirect URI ile mevcut sayfanız eşleşmiyor.
Çözüm
Active Directory Application için tanımlamış olduğunuz Redirect URI bilgisini ya da Authentication işleminin yapıldığı sayfanın url bilgisini kontrol edip düzeltmelisiniz.
AADSTS700054 : response_type ‘id_token’ is not enabled for the application
Hata Nedeni
Kullanmış olduğunuz Client (Application) Id için Active Directory Application ayarlarında Implicit Grant düzenlemeleri yapılmamış.
Çözüm
Active Directory Application için Authentication sekmesinde bulunan Implicit Grant bölümünde Access tokens ve ID tokens izinleri verilmeli.
AADSTS50058 : A silent sign-in request was sent but no user is signed in
Hata Nedeni
Herhangi bir sebepten dolayı Access Token alınamıyor. SessionTimeout ya da oturumu açık olan kullanıcının parola bilgisinin değişmesi (expire, reset, update) ana sebepler.
Çözüm
İlgili kullanıcıyı Authentication işlemi için yönlendirmelisiniz. Eğer web projesi ise ADAL.js ‘nin acquireTokenPopup
ya da acquireTokenRedirect
fonksiyonlarını kullanmalısınız.
AADSTS65001 : The user or administrator has not consented to use the application with Id ‘xxxx’ named ‘xxxxx’. Send an interactive authorization request for this user and resource
Hata Nedeni
Active Directory Application, organizasyon yöneticisi tarafından onaylanmamış
Çözüm
Bu sorunu çözmek için 2 farklı noktayı incelememiz gerekli.
- Yöneticisi / üyesi olduğumuz Active Directory kullanıcılarının uygulamayı kullanabilmesi için Application ayarlarında API Permissions sekmesinden Grant Consent altında yer alan Grant admin consent for ORGANIZASYON ADI butonun kullanarak tüm kullanıcılara kullanım için izin verebiliriz. Böylece yöneticisi / üyesi olduğumuz Active Directory ‘e sahip tüm kullanıcılar uygulama için gerekli izinlere sahip olurlar.
- Multi-tenant uygulamalarda, farklı organizasyonlara sahip kullanıcıların uygulamayı kullanabilmesi için aşağıdaki ayarları yapmamız gerekmekte.
- Bunun için Azure Active Directory ‘de User Settings sekmesinden Manage how end users launch and view their applications bağlantısına tıklayarak, açılan ekranda Users can consent to apps accessing company data on their behalf ayalarının yapmamız gerekli.
- Yes olarak seçersek, kullanıcılar herhangi bir yönetici onayı olmadan uygulamaya giriş yapabilir ve yetki için onay verebilirler.
- No seçtiğimizde ise herhangi bir dış organizasyon kullanıcısının uygulamayı kullanabilmesi için öncelikli olarak ilgili organizasyonun yönetici rolüne sahip bir kullanıcısı bu uygulamaya yetki vermelidir.
- Bunun için Azure Active Directory ‘de User Settings sekmesinden Manage how end users launch and view their applications bağlantısına tıklayarak, açılan ekranda Users can consent to apps accessing company data on their behalf ayalarının yapmamız gerekli.
AADSTS50020 : User account ‘abc@xyz.com’ from identity provider ‘https://sts.windows.net/{GUID}’ does not exist in tenant ‘{tenant adı}’ and cannot access the application ‘{Application ID}’ ({Application Adı}) in that tenant. The account needs to be added as an external user in the tenant first. Sign out and sign in again with different Azure Active Directory user account
Hata Nedeni
Authentication işlemi yapılan Application, multi-tenant işleme izin vermiyor.
Çözüm
Bu sorunu çözmek için 2 farklı noktayı incelememiz gerekli.
- Öncelikle Azure Active Directory Application ayarlarında Authentication sekmesinden Supported account types ayarlarını ya da Manifest sekmesinden manifesto dosyasını açıp,
signInAudience
değerini kontrol etmeniz ve multi-tenant işlem için değiştirmeniz gerekmekte.- Supported account types üzerinden değişiklik yapmak isterseniz Accounts in any organizational directory ya da Accounts in any organization directory and personal Microsoft accounts seçmelisiniz.
- Manifest dosyası üzerinden değişiklik yaparken
signInAudience
değerineAzureADMultipleOrgs
ya daAzureADandPersonalMicrosoftAccount
yazmalısınız.
- Application ayarlarımızda multi-tenant izin verilmiş olsa bile web sayfamızda
AuthenticationContext
için oluşturduğumuzConfig
nesnesindetenant
bilgisi verilmiş ise burada yer alan tenant dışından hiç bir kullanıcı uygulamamızı kullanamaz. Bu durumda Config.tenant bilgisini kaldırmanız gerekmekte
Yukarıda vermiş olduğum örnek Config
tanımlamasında tenant
bilgisi yer almakta, bunu aşağıdaki gibi değiştirmeniz gerekmekte.
Azure Active Directory Application tanımlama işlemlerini detayları ile daha önce yazmıştım, ilgili yazıya buradan erişebilirsiniz.
Ayrıca Manifest dosyasının içerdiği property ‘ler ve değerleri hakkında Microsoft tarafından yayınlanmış detaylı bir dokümantasyon bulunmakta, https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-app-manifest adresinden bakabilirsiniz.
AADSTS90002 : Tenant ‘authorize’ not found. This may happen if there are no active subscription for tenant. Check with your subscription administrator.
Hata Nedeni
Düşük ihtimalle Azure ‘‘da geçerli / aktif bir Subscription kaydınız yok. Yüksek ihtimalle kullanmış olduğunuz ADAL kütüphanesi ve Authority URI uyuşmazlığı mevcut.
Çözüm
Öncelikle düşük ihtimale odaklanıp, Azure Portal üzerinden gerekli kontrolleri yapmanızda fayda var.
ADAL kütüphanesi ve Authority URI uyuşmazlığı konusunda ise aşağıdaki adımları uygulayabilirsiniz.
- ADAL ‘ın son sürümleri Authority URI adresini https://login.microsoftonline.com/common ya da https://login.microsoftonline.com/{TENANT_ID} olarak kabul ediyor, eğer Authority URI bilginizin sonunda /oauth2/authorize varsa bunu kaldırıp deneyebilirsiniz.
- Bir diğer çözüm ise kullanmış olduğunuz ADAL kütüphanesinin önceki sürümlerini kullanmanız, fakat ileriye dönük geliştirmeler ve güncellemeler için bu yöntemi tavsiye etmiyorum.
- Bu sorunu “Application User ile S2S (Server to Server) Entegrasyon ve Dynamics 365 CE Web API Kullanımı” konulu yazımı hazırlarken yaşamıştım, sonrasında güncel kurallara göre işlem yaptığım için bir daha karşılaşmadım.
- Her ihtimale karşı https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/issues adresinden güncel hata kayıtlarını takip etmenizde fayda var.
Farklı hatalar ile karşılaştıkça bu yazıyı güncelleyeceğim.
Umarım faydalı bir yazı olmuştur.