Use of the WS-Trust authentication security protocol when connecting to Common Data Service is no longer recommended and has been deprecated.
This change impacts custom client applications that use “Office365” authentication and the Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy or Microsoft.Xrm.Tooling.Connector.CrmServiceClient classes.
How do You know If your code is using WS-Trust authentication?
When using the CrmServiceClient class with a connection string:
connectionString="AuthType=Office365; Username=username@company.onmicrosoft.com;Password=passcode;Url=https://yourOrg.crm.dynamics.com"
When using OrganizationServiceProxy class constructors:
using (OrganizationServiceProxy organizationServiceProxy = new OrganizationServiceProxy(serviceManagement, clientCredentials) { … }
How do you fix this in your Application?
public static void ConnectToMSCRM(string UserName, string Password, string SoapOrgServiceUri)
{
try
{
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = UserName;
credentials.UserName.Password = Password;
Uri serviceUri = new Uri(SoapOrgServiceUri);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
OrganizationServiceProxy proxy = new OrganizationServiceProxy(serviceUri, null, credentials, null);
proxy.EnableProxyTypes();
_orgservice = (IOrganizationService)proxy;
}
catch (Exception ex)
{
Console.WriteLine("Error while connecting to CRM " + ex.Message);
Console.ReadKey();
}
}
- If your code uses an Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy instance:If you are passing the OrganizationServiceProxy instance around to various methods, or returning the instance from a function, replace all occurrences of the type
OrganizationServiceProxy
with the IOrganizationService interface. This interface exposes all the core methods used to communicate with Common Data Service.When invoking the constructor, it is recommend you add the NuGet package Microsoft.CrmSdk.XrmTooling.CoreAssembly to your project and replace all use ofOrganizationServiceProxy
class constructors with CrmServiceClient class constructors. You will need to alter your coding pattern here, however, for simplicityCrmServiceClient
supports connection strings in addition to complex constructors and the ability to provide external authentication handlers.CrmServiceClient
implementsIOrganizationService
, therefore your new authentication code will be portable to the rest of your application code. You can find examples on the use ofCrmServiceClient
in the PowerApps-Samples repository. - If your code is using CrmServiceClient with the “Office365” authentication type:An example of this is a connections string that looks like this:
connectionString = "AuthType=Office365;Username=jsmith@contoso.onmicrosoft.com;Password=passcode;Url=https://contoso.crm.dynamics.com"
Similarly, you could also use aCrmServiceClient
constructor and pass inAuthType.Office365
.You have two options for dealing with this.- Switch over to using an OAuth based connection string. Such connection string looks like this:
connectionString = "AuthType=OAuth;Username=jsmith@contoso.onmicrosoft.com; Password=passcode;Url=https://contosotest.crm.dynamics.com;AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;LoginPrompt=Auto"
This will be your fastest way to update the code. Note that LoginPrompt can be set to “never” to simulate the way that the Office 365 behavior worked.The AppId and RedirectUri provided above are examples of working application registration values. These values work everywhere our online services are deployed. However, they are provided here as examples and you are encouraged to create your own application registration in Azure Active Directory (AAD) for applications running in your tenant. - When we announce it, update to the latest Microsoft.CrmSdk.XrmTooling.CoreAssembly NuGet package that includes auto redirect support. This library will redirect an authentication type of Office365 to OAuth and use the example AppId and Redirect URI automatically. This capability is planned for the 9.2.x version of the Microsoft.CrmSdk.XrmTooling.CoreAssembly package.
- Switch over to using an OAuth based connection string. Such connection string looks like this:
- If you are accessing the CrmServiceClient.OrganizationServiceProxy property:Remove all use of that property in your code. CrmServiceClient implements IOrganizationService and exposes everything that is settable for the organization service proxy.
CrmServiceClient crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["MyCDSServer"].ConnectionString);
if (crmSvc.IsReady)
{
WhoAmIRequest req = new WhoAmIRequest();
WhoAmIResponse res= (WhoAmIResponse)crmSvc.Execute(req);
Console.WriteLine("UserID:"+res.UserId);
}
Hope this helps!
Hi Bipin,
Thank you so much for your post.
I have a doubt. The below link says the ADAL is also deprecating –
https://techcommunity.microsoft.com/t5/azure-active-directory-identity/update-your-applications-to-use-microsoft-authentication-library/ba-p/1257363
And also when we try to register the app, we can see a message shown in yellow in the below screenshot –

If this is the case, then how can we register the app? Without registering the app, we will not be able to get the AppId and RedirectURI for authentication.
Will you please suggest.
LikeLike