Skip to main content

How to Connect to Multi-Factor Enabled Microsoft Dataverse using C# (V9.2)

As per Microsoft, the WS-Trust authentication type that is used by custom clients to connect to Dataverse is deprecated.

This change applicable to the client applications which tries to connect to Microsoft Dataverse. This helps developers to connect to Microsoft Dataverse with more security and protect access to the application as per the business requirement.

So, in order to connect to Microsoft Dataverse, we can leverage Azure Active Directory.

Pre-requisites:

  • App Registration in Azure Portal.
  • Create an Application User in Dataverse.
  • Consume the Application Registration details in Console Application

Application Registration in Azure Portal:

  • Log in to Azure Portal
  • Go to "Azure Active Directory" --> "App registrations" --> New registration
  • Provide a Name, Choose respective "Supported account types" (first option would work for the users in same tenant)
  • Click on "Register"
  • Once the App Registration is completed, you will be redirected to the registered app Overview
  • Copy the Application (client) ID
  • Click on "Add a certificate or secret" on the Essentials tab or Click on "Certificated & secrets" to create a secret to leverage this app to access Microsoft Dataverse

Upon clicking on "Add a certificate or secret" - you will be redirected to create a secret. secret Click  on "New Client Secret" --> Provide "description" --> click on Add

You will be redirected to the secret value screen. Now, copy the secret value

Create an Application User in Microsoft Dataverse:
Go to https://make.powerapps.com/ --> Select appropriate environment
Click on the settings (gear symbol) --> "advanced settings"
Click on "Settings" module --> System --> Security -->Users
Select "Application Users" view to create "New" application user record

Ensure appropriate application user form has been selected as shown below

Now, the form opens and enables you to provide value at "Application ID". Copy the "Application (client) ID" created in the first step and paste it here. Save the record.
Now, click on "MANAGE ROLES" to provide appropriate security to perform the required operation on the Microsoft Dataverse and click OK.

Create a console application to connect to Microsoft Dataverse
  • Open Visual Studio ( for this blog post, I am using VS 2019)
  • Create a new project --> Select "Console App (.Net Framework)" --> Next
  • Provide a name for the Project and choose Framework as 4.6.2 and click on "Create"


Now, go to Solution Explore --> References --> "Manage NuGet packages"
Search for "Microsoft.CrmSdk.XrmTooling.CoreAssembly" and Install it
Add "Microsoft.Xrm.Tooling.Connector;" assembly to the Program.cs

using Microsoft.Xrm.Tooling.Connector;
using System;

namespace ConnectMSDataverse
{
    class Program
    {
        static void Main(string[] args)
        {
            string msdataverseURL = "https://xxxxx.crm.dynamics.com;";
            string applicationID = "1676c3f0-xxxx-xxxx-xxxx-425bded41fea";
            string appSecret = "5xQ-dM~lTjYkr-Saz64lfw99g2ytp.0WKW";
            string connectionString = "AuthType=ClientSecret; url=" + msdataverseURL + "ClientId=" + applicationID + ";" + "ClientSecret=" + appSecret;
            CrmServiceClient crmServiceClient = new CrmServiceClient(connectionString);
            try
            {
                if (crmServiceClient != null && crmServiceClient.IsReady)
                {
                    Console.WriteLine("\nConnection successfull.");
                    Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("\nPlease make sure the Application ID or Secret is correctly provided.");
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception " + ex.Message);
                Console.ReadLine();
            }
        }
    }
}
Program.cs file can be downloaded at git repo
Hope you find this blog helpful. Please share your feedback over comments.

Comments

Popular posts from this blog

Validate an email input in a Canvas Application | PowerApps

Validate an email input in a Canvas Application | PowerApps In this post let us see, how to Validate an email input in a Canvas Application UI Validations helps us to ensure, valid data is received from the End User to complete an operation helps end user to provide right information the validation action depends on the type of the input control for Text Input Control - mostly we go with "OnChange" for check box control - "OnCheck and On uncheck" for Drop Down and Combo Box Controls - "OnChange" or "OnSelect" etc., Now, let us see how can we validate an email input, a phone number input and a name input. How to validate an email input value is valid? We can leverage "Regex" (Regular Expressions) to valid user inputs. Let us consider the Email Input Control Name as -  txtEmail.Text. OnChange of this Control let us i

How to create a "pop-up box" in PowerApps

in this post, let us see how to create a Pop-Up in Canvas App required controls: rectangular icon label buttons - 2 take a "rectangular icon" and make it screen size update it's "Fill" - with RGBA(175, 191, 224, 0.5) . Take another "rectangular icon" and adjust it to center Take "label" - and add required text (Eg: "do you want to proceed?") Take two buttons. Update text of Button1 to "OK" and other to "Cancel" On Click of the respective control (to open the pop-up), add this expression : UpdateContext({locOpenPopup:true}) select "cancel" and "ok" button and add UpdateContext({locOpenPopup:false}) on "OnSelect" property. add appropriate actions on "cancel&quo

Success confirmation on a record submission - Canvas Application

In this post let us see, how to show a successfully submitted record's data back on to the form, as a confirmation. Take two screens  Home Screen Success Screen On Home Screen: Take a Form Control on the Home Screen and map it to respective entity. In this post we are mapping it to Registrations entity. Take a Button Control and input the below expression, to create records into Registrations Entity. SubmitForm( frmRegistration ) Now, let us implement how to redirect the user to Success Message screen to successful record submission. In order to achieve this, we are going to make use of one of the Form Control's properties - OnSuccess. So, OnSuccess we are going to implement Success Screen navigation as below Navigate(' Success Screen ')   Success Screen Take a label to show - success message, as below "Registration was successful. Registration Id: " & frmRegistration .LastSubmit.'Registration Number' LastSubmit  property of a From Control helps u