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.

You are using Ws-Trust authentication which has been deprecated and no longer supported in your environment. Please use OAuth2.0 authentication
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;

IOrganizationService ‘i ClientCredentials kullanarak OrganizationServiceProxy ile oluşturmak
ClientCredentials kullanarak OrganizationServiceProxy ile oluşturmak
Dynamics 365 CrmServiceClient connection string
Dynamics 365 CrmServiceClient connection string
IOrganzationService ‘i CrmServiceClient kullanarak oluşturmak
CrmServiceClient kullanımı

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ız ClientCredentials yapısı mevcuttur, daha önce konu ile yazmış olduğum yazıya buradan erişebilirsiniz.
  • IOrganizationService yerine direkt olarak OrganizationServiceProxy kullanıyorsanız,
  • CrmServiceClient ‘da OrganizationWebProxyClient yerine OrganizationServiceProxy 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.


You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.