Dataverse için Office365 / WS-Trust Bağlantıları OAuth Olarak Değiştirme Zamanı
Merhaba,
Bu yazıda Dataverse (ve aynı zamanda hali hazırda bulunan Dynamics 365 CE) uygulamalarımız için Office365 / WS-Trust
authentication yapısından OAuth
‘a geçiş için neler yapmamız gerektiğini adım adım inceleyeceğiz.
Biz, Dataverse
dünyasında Office365 / WS-Trust
olarak birleşik şekilde kullanıyoruz, aslında Office365 bizim kullandığımız connection yapısının adı iken, WS-Trust bir güvenlik tanımlamasıdır (specification).
Yaklaşık 2 yıl önce Microsoft, Office365 / WS-Trust authentication yapısını sonlandıracağını (deprecated) duyurdu, daha zaman olduğu için konu ile ilgili olarak bir yazı hazırlamamıştım.
Fakat beklenen gün yavaş yavaş yaklaştıkça mevcutta tıkır tıkır çalışan tüm projeler için tehlike çanları çalmaya başladı, bu nedenle artık bir yazı hazırlayıp teknik bilgilendirme yapmanın zamanı geldi.
Öncelikle belirtmem gereken en önemli nokta bu değişiklik sadece Dataverse bağlantısı yapan uygulamalar (client app) için geçerli. Dataverse / Dynamics 365 Online instance ‘larda çalışan plugin, custom workflow ya da on-prem kurulumlar ile ilgili bir değişiklik yapmanıza gerek yok.
Şu an için dikkat etmemiz gereken yakın tarihler aşağıdaki gibi
- Nisan 2021 ‘den geçerli olmak üzere, WS-Trust authentication yapısı ilgili tenant üzerindeki tüm yeni organizasyonlar için durduruldu. Zaten son dönemde yeni bir organizasyon (instance) oluşturduysanız muhtemelen bu düzenlemeyi yapmışsınızdır.
- Nisan 2022 ‘den geçerli olmak üzere ise tüm mevcut ve yeni organizasyonlarda geçerli olacak. Yani önümüzde yaklaşık 4-5 aylık bir süre var.
Eğer mevcut uygulamalarımızda ya da connection işlemlerini yönettiğimiz ortak library projelerinde bir değişiklik yapmadıysak, şu anda yeni bir organizasyon açıp işlem yapmak istediğimizde ya da Nisan 2022 sonrasında mevcutta tüm organizasyonlarımızda aşağıdaki gibi bir hata alacağız.
Unable to connect to CRM: An error occurred when processing the security tokens in the message:You are using Ws-Trust authentication which has been deprecated and no longer supported in your environment. Please use OAuth2.0 authentication.
Bu hatayı alan uygulamalarımızda Dataverse bağlantısı muhtemelen aşağıdakiler gibidir;
Bu durumda bir takım değişiklikler yapmamız gerekmekte.
Uygulamalarımın WS-Trust kullandığını nasıl anlarım?
Aslında çok basit, aşağıdaki maddeleri AND ya da OR ile gruplayarak mevcut uygulamalarınızı inceleyebilirsiniz 🙂
- Kullanıcı adı ve parola bilgisi kullanarak authentication işlemi yapıyorsanız,
- Eğer
CrmServiceClient
kullanıyorsanız connection string yapınız bu şekilde olacaktır;AuthType=Office365;Url={organizationURL};Username={username}; Password={password};
- Eğer
OrganizationServiceProxy
kullanıyorsanızClientCredentials
yapısı mevcuttur, daha önce konu ile yazmış olduğum yazıya buradan erişebilirsiniz.
- Eğer
IOrganizationService
yerine direkt olarakOrganizationServiceProxy
kullanıyorsanız,- CrmServiceClient ‘da
OrganizationWebProxyClient
yerineOrganizationServiceProxy
kullanıyorsanız
WS-Trust kullanıyorsunuz demektir ve kodlarınızı güncellemeniz gerekmekte.
Uygulamamı düzenlemek için neler yapmam gerekli?
Öncelikle bu düzenlemenin direkt SDK ile ilgili olmadığını belirtmekte fayda var, Microsoft tarafında yapılan güncellemenin en önemli kısmı backend tarafında. Fakat projeleriniz uyumlu ise elbette SDK ‘in son sürümünü kullanmanız daha iyi olacaktır. Böylece mevcut iyileştirmeleri ve bug-fix ‘leri de edinmiş olursunuz.
Eğer mevcut uygulamalarınızda Microsoft.CrmSdk.XrmTooling.CoreAssembly
NuGet paketi yüklü ve CrmServiceClient
‘ı kullanıyorsanız, constructor ‘da parametre olarak gönderdiğiniz connection string bilgisini değiştirmeniz ve gerekli birkaç ek adımı uygulamanız yeterli olacaktır.
Office365 / WS-Trust connection string yapısı AuthType=Office365;Url={organizationURL};Username={username}; Password={password};
şeklindedir, projenizde AuthType=Office365
anahtar kelimesiyle arama yaparak hızlıca bulabilirsiniz.
İlgili connection string yapısını aşağıdaki gibi düzenlemeniz gerekmekte.
AuthType=OAuth;Username={username}; Password={password};Url={organizationUrl};AppId={azureEnterpriseApplicationId}; RedirectUri={ azureEnterpriseApplicationRedirectUri};LoginPrompt=Auto;
- İlk göze çarpan değişiklik Office365 yerine
AuthType=OAuth;
kullanılması. AppId={azureEnterpriseApplicationId};
ile Azure ‘da oluşturduğumuz Application kaydının ClientId bilgisini belirtiyoruz. Burada Microsoft ‘un yaklaşımı, client tarafında çalışan her uygulama bir servis olarak konumlandırılmalı ve Application olarak kayıt altına alınmalı. Konu ile ilgili olarak daha önce yazmış olduğum Azure Active Directory ‘de Application Tanımlama yazısını inceleyebilirsiniz. Aynı zamanda Microsoft tarafından yazılmış -daha basit :)- dokümana da buradan ulaşabilirsiniz.RedirectUri={azureEnterpriseApplicationRedirectUri};
LoginPrompt={Auto | Always | Never}
, burada uygulamanızın ihtiyacına göre 3 seçenekten birini verebilirsiniz. Eğer uygulamanız arkaplanda çalışan bir console app. ya da bir webservice ise Never seçeneği ile kullanmanız gerekmekte.
XrmTooling connection string yapılarını daha detaylı olarak incelemek için https://docs.microsoft.com/en-us/powerapps/developer/data-platform/xrm-tooling/use-connection-strings-xrm-tooling-connect adresine göz atmanızda fayda var.
Uygulamalarınızda CrmServiceClient
yerine Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy
kullanıyorsanız ve metodlarınızda parameter ya da return değeri olarak bunu kullanıyorsanız, OrganizationServiceProxy
‘i IOrganizationService ile değiştirmeniz gerekmekte. Aynı zamanda Microsoft.CrmSdk.XrmTooling.CoreAssembly
NuGet paketi yüklemeniz ve OrganizationServiceProxy
constructor kullandığınız tüm yapıları CrmServiceClient
constructor ile değiştirmeniz gerekmekte.
Microsoft tarafından yapılan açıklamada Microsoft.CrmSdk.XrmTooling.CoreAssembly
9.2.x sürümü ile Office365 – OAuth yönlendirmesini otomatik olarak kendisi yapacak ve yine Microsoft tarafından oluşturulmuş örnek / sabit AppId
ve RedirectUri
bilgilerini otomatik kullanacak. Fakat bunun için herhangi bir süre belirtilmediği gibi mevcut sürüm 07 Aralık 2021 itibariyle henüz 9.1.0.92 , sanırım önümüzde uzun zaman var 🙂
Önemli, bir o kadar da çözümü çok basit olan bu konuyu yeniden hatırlatmak ve çözüm için yardımcı olmak için hazırladığım bu yazı umarım faydalı olmuştur.