Skip to content

Commit 86af0a6

Browse files
committed
Merge branch 'main' into phecke-plugin-updates
2 parents 3e8af2c + 5050c00 commit 86af0a6

19 files changed

+204
-53
lines changed

powerapps-docs/developer/data-platform/authenticate-oauth.md

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: "Use OAuth authentication with Microsoft Dataverse (Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "Learn how to authenticate applications with Microsoft Dataverse using OAuth." # 115-145 characters including spaces. This abstract displays in the search result.
44
ms.custom: has-adal-ref
5-
ms.date: 09/12/2022
5+
ms.date: 10/16/2023
66
ms.reviewer: pehecke
77
ms.topic: article
88
author: ritesp # GitHub ID
@@ -16,11 +16,11 @@ contributors:
1616

1717
# Use OAuth authentication with Microsoft Dataverse
1818

19-
[OAuth 2.0](https://oauth.net/2/) is the industry-standard protocol for authorization. After application users provide credentials to authenticate, OAuth determines whether they are authorized to access the resources.
19+
[OAuth 2.0](https://oauth.net/2/) is the industry-standard protocol for authorization. After application users provide credentials to authenticate, OAuth determines whether they're authorized to access the resources.
2020

2121
Client applications must support the use of OAuth to access data using the Web API. OAuth enables two-factor authentication (2FA) or certificate-based authentication for server-to-server application scenarios.
2222

23-
OAuth requires an identity provider for authentication. For Dataverse, the identity provider is Azure Active Directory (AAD). To authenticate with AAD using a Microsoft work or school account, use the [Microsoft Authentication Library](/azure/active-directory/develop/msal-overview#languages-and-frameworks) (MSAL).
23+
OAuth requires an identity provider for authentication. For Dataverse, the identity provider is Azure Active Directory (AD). To authenticate with AD using a Microsoft work or school account, use the [Microsoft Authentication Library](/azure/active-directory/develop/msal-overview#languages-and-frameworks) (MSAL).
2424

2525
> [!NOTE]
2626
> This topic will introduce common concepts related to connecting to Dataverse using OAuth with authentication libraries. This content will focus on how a developer can connect to Dataverse but not on the inner workings of OAuth or the libraries. For complete information related to authentication see the Azure Active Directory documentation. [What is authentication?](/azure/active-directory/develop/authentication-scenarios) is a good place to start.
@@ -29,38 +29,38 @@ OAuth requires an identity provider for authentication. For Dataverse, the ident
2929
3030
## App Registration
3131

32-
When you connect using OAuth you must first register an application in your Azure AD tenant. How you should register your app depends on the type of app you want to make.
32+
When you connect using OAuth, you must first register an application in your Azure AD tenant. How you should register your app depends on the type of app you want to make.
3333

34-
In all cases, start with basic steps to register an app described in the AAD topic: [Quickstart: Register an application with the Microsoft identity platform](/azure/active-directory/develop/quickstart-register-app). For Dataverse specific instructions see [Walkthrough: Register an app with Azure Active Directory > Create an application registration](walkthrough-register-app-azure-active-directory.md#create-an-application-registration).
34+
In all cases, start with basic steps to register an app described in the AD article: [Quickstart: Register an application with the Microsoft identity platform](/azure/active-directory/develop/quickstart-register-app). For Dataverse specific instructions see [Walkthrough: Register an app with Azure Active Directory > Create an application registration](walkthrough-register-app-azure-active-directory.md#create-an-application-registration).
3535

36-
The decisions you will need to make in this step mostly depend on the Application Type choice (see below).
36+
The decisions you need to make in this step mostly depend on the Application Type choice (see below).
3737

3838
### Types of app registration
3939

40-
When you register an app with Azure AD one of the decisions you must make is the application type. There are two types of applications you can register:
40+
When you register an app with Azure AD one of the decisions, you must make is the application type. There are two types of applications you can register:
4141

4242
| Application type | Description|
4343
|------------------|------------|
4444
| Web app /API | **Web client**<br />A type of [client application](/azure/active-directory/develop/developer-glossary#client-application) that executes all code on a web server.<br /><br />**User-agent-based client**<br />A type of [client application](/azure/active-directory/develop/developer-glossary#client-application) that downloads code from a web server and executes within a user-agent (for instance, a web browser), such as a Single Page Application (SPA). |
4545
|Native|A type of [client application](/azure/active-directory/develop/developer-glossary#client-application) that is installed natively on a device. |
4646

47-
When you select **Web app /API** you must provide a **Sign-On URL** which is the URL where Azure AD will send the authentication response, including a token if authentication was successful. While you develop an app, this is usually set to `https://localhost/appname:[port]` so you can develop and debug your app locally. When you publish your app, you need to change this value to the published URL of the app.
47+
When you select **Web app /API** you must provide a **Sign-On URL** which is the URL where Azure AD sends the authentication response, including a token if authentication was successful. While you develop an app, this URL is usually set to `https://localhost/appname:[port]` so you can develop and debug your app locally. When you publish your app, you need to change this value to the published URL of the app.
4848

49-
When you select **Native**, you must provide a Redirect URI. This is a unique identifier to which Azure AD will redirect the user-agent in an OAuth 2.0 request. This is typically a value formatted like so: `app://<guid>`.
49+
When you select **Native**, you must provide a Redirect URI. This URL is a unique identifier to which Azure AD will redirect the user-agent in an OAuth 2.0 request. This URL is typically a value formatted like so: `app://<guid>`.
5050

5151
### Giving access to Dataverse
5252

53-
If your app will be a client which allows the authenticated user to perform operations, you must configure the application to have the Access Dynamics 365 as organization users delegated permission.
53+
If your app is a client that allows the authenticated user to perform operations, you must configure the application to have the Access Dynamics 365 as organization users delegated permission.
5454

55-
For specific steps to do this, see [Walkthrough: Register an app with Azure Active Directory > Apply Permissions](walkthrough-register-app-azure-active-directory.md).
55+
For specific steps to set permissions, see [Walkthrough: Register an app with Azure Active Directory > Apply Permissions](walkthrough-register-app-azure-active-directory.md).
5656

5757
<!-- TODO Verify this -->
5858

59-
If your app will use Server-to-Server (S2S) authentication, this step is not required. That configuration requires a specific system user and the operations will be performed by that user account rather than any user that must be authenticated.
59+
If your app uses Server-to-Server (S2S) authentication, this step isn't required. That configuration requires a specific system user and the operations are performed by that user account rather than any user that must be authenticated.
6060

6161
### Use Client Secrets & Certificates
6262

63-
For server to server scenarios there will not be an interactive user account to authenticate. In these cases, you need to provide some means to confirm that the application is trusted. This is done using client secrets or certificates.
63+
For server-to-server scenarios there won't be an interactive user account to authenticate. In these cases, you need to provide some means to confirm that the application is trusted. This is done using client secrets or certificates.
6464

6565
For apps that are registered with the **Web app /API** application type, you can configure secrets. These are set using the **Keys** area under **API Access** in the **Settings** for the app registration.
6666

@@ -85,12 +85,14 @@ Dataverse SDK for .NET includes client classes [CrmServiceClient](xref:Microsoft
8585

8686
## Use the AccessToken with your requests
8787

88-
The point of using the authentication libraries is to get an access token that you can include with your requests.
89-
This only requires a few lines of code, and just a few more lines to configure an [HttpClient](xref:System.Net.Http.HttpClient) to execute a request.
88+
The point of using the authentication libraries is to get an access token that you can include with your requests. Getting the token only requires a few lines of code, and just a few more lines to configure an [HttpClient](xref:System.Net.Http.HttpClient) to execute a request.
89+
90+
> [!IMPORTANT]
91+
> As demonstrated in the sample code of this article, use a "\<environment-url>/user_impersonation" scope for a public client. For a confidential client, use a scope of "\<environment-url>/.default".
9092
9193
### Simple example
9294

93-
The following is the minimum amount of code needed to execute a single Web API request, but it is not the recommended approach. Note that this code uses the MSAL library and is taken from the [QuickStart](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/webapi/C%23/QuickStart) sample.
95+
The following is the minimum amount of code needed to execute a single Web API request, but it isn't the recommended approach. Note that this code uses the MSAL library and is taken from the [QuickStart](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/webapi/C%23/QuickStart) sample.
9496

9597
```csharp
9698
string resource = "https://contoso.api.crm.dynamics.com";
@@ -102,7 +104,7 @@ var authBuilder = PublicClientApplicationBuilder.Create(clientId)
102104
.WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
103105
.WithRedirectUri(redirectUri)
104106
.Build();
105-
var scope = resource + "/.default";
107+
var scope = resource + "/user_impersonation";
106108
string[] scopes = { scope };
107109

108110
AuthenticationResult token =
@@ -148,7 +150,7 @@ class OAuthMessageHandler : DelegatingHandler
148150
.WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
149151
.WithRedirectUri(redirectUrl)
150152
.Build();
151-
var scope = serviceUrl + "//.default";
153+
var scope = serviceUrl + "/user_impersonation";
152154
string[] scopes = { scope };
153155
// First try to get an authentication token from the cache using a hint.
154156
AuthenticationResult authBuilderResult=null;

powerapps-docs/developer/data-platform/data-export-service.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ var authBuilder = PublicClientApplicationBuilder.Create(AppId)
117117
.WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
118118
.WithRedirectUri(redirectUri)
119119
.Build();
120-
var scope = resource + "/.default";
120+
var scope = resource + "/user_impersonation";
121121
string[] scopes = { scope };
122122

123123
// Use interactive username and password prompt

powerapps-docs/developer/data-platform/sdk-client-transition.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: "Transition client applications to Dataverse ServiceClient | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "Learn about the benefits of and the changes needed to transitions your client application to use Dataverse ServiceClient class for web service connections." # 115-145 characters including spaces. This abstract displays in the search result.
44
ms.custom: ""
5-
ms.date: 08/11/2022
5+
ms.date: 10/17/2023
66
ms.reviewer: "pehecke"
77
ms.topic: "article"
88
author: "phecke" # GitHub ID
@@ -15,10 +15,10 @@ search.audienceType:
1515

1616
# Transition apps to Dataverse ServiceClient
1717

18-
We are transitioning from [Microsoft Dataverse SDK for .NET](developer-tools.md#dataverse-sdk-for-net) to include a new web service client that uses MSAL for authentication. This article contains the information you need to understand why we are making these changes, what is impacted, and how to update your client applications so they continue to function as expected.
18+
We are transitioning from [Microsoft Dataverse SDK for .NET](developer-tools.md#dataverse-sdk-for-net) to include a new web service client that uses Microsoft Authentication Library (MSAL) for authentication. This article contains the information you need to understand why we are making these changes, what is impacted, and how to update your client applications so they continue to function as expected.
1919

2020
> [!NOTE]
21-
> All our existing developer documentation and sample code use the Dataverse SDK APIs found in the [CoreAssemblies](https://www.nuget.org/packages/Microsoft.CrmSdk.CoreAssemblies/) NuGet package. Only this article that you are reading describes the newer [Dataverse.Client](https://www.nuget.org/packages/Microsoft.PowerPlatform.Dataverse.Client/) NuGet package and the changes required to make use of it. More documentation and sample code updates are coming.
21+
> Some of our existing developer documentation and sample code uses the Dataverse SDK APIs found in the [CoreAssemblies](https://www.nuget.org/packages/Microsoft.CrmSdk.CoreAssemblies/) NuGet package. This article describes the newer and recommended [Dataverse.Client](https://www.nuget.org/packages/Microsoft.PowerPlatform.Dataverse.Client/) NuGet package and the changes required to make use of it. Updates to documentation and sample code is happening over time.
2222
2323
## Why the change?
2424

@@ -30,11 +30,11 @@ The new Dataverse [ServiceClient](xref:Microsoft.PowerPlatform.Dataverse.Client.
3030

3131
### MSAL authentication
3232

33-
Microsoft Azure Active Directory Authentication Library (ADAL) support ends soon. Microsoft Authentication Library (MSAL) is the recommended authentication API going forward. Our new [ServiceClient](xref:Microsoft.PowerPlatform.Dataverse.Client.ServiceClient) API uses MSAL while our older [CrmServiceClient](xref:Microsoft.Xrm.Tooling.Connector.CrmServiceClient) API uses ADAL.
33+
Microsoft Azure Active Directory Authentication Library (ADAL.NET) is no longer receiving support. Microsoft Authentication Library (MSAL.NET) is the recommended authentication API going forward. Our new [ServiceClient](xref:Microsoft.PowerPlatform.Dataverse.Client.ServiceClient) API uses MSAL while our older [CrmServiceClient](xref:Microsoft.Xrm.Tooling.Connector.CrmServiceClient) API uses ADAL.
3434

3535
### Performance and functional benefits
3636

37-
The Dataverse `ServiceClient` class supports a smaller interface surface, inline authentication by instance, and `ILogger`. As for inline authentication, you can pass a custom authentication handler function to the `ServiceClient` constructor. In this way you can have one authentication handler per web service connection instead of just one per process.
37+
The Dataverse `ServiceClient` class supports a smaller interface surface, inline authentication by instance, and <xref:Microsoft.Extensions.Logging.ILogger?displayProperty=fullName>. As for inline authentication, you can pass a custom authentication handler function to the `ServiceClient` constructor. In this way you can have one authentication handler per web service connection instead of just one per process.
3838

3939
## What is impacted?
4040

powerapps-docs/developer/data-platform/webapi/quick-start-console-app-csharp.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Follow these next steps to add code for the main program.
100100
.WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
101101
.WithRedirectUri(redirectUri)
102102
.Build();
103-
var scope = resource + "/.default";
103+
var scope = resource + "/user_impersonation";
104104
string[] scopes = { scope };
105105

106106
AuthenticationResult token =

powerapps-docs/maker/TOC.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1704,7 +1704,9 @@
17041704
href: ./model-driven-apps/add-ai-copilot.md
17051705
- name: Use Excel and Word templates
17061706
href: ./model-driven-apps/templates-overview.md
1707-
- name: Use themes to apply organization branding
1707+
- name: Use modern themes
1708+
href: ./model-driven-apps/modern-theme-overrides.md
1709+
- name: Use themes to apply organization branding (classic)
17081710
href: ./model-driven-apps/create-themes-organization-branding.md
17091711
- name: Create guided help for your app
17101712
href: ./data-platform/create-custom-help-pages.md

powerapps-docs/maker/data-platform/create-edit-elastic-tables.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ The choice of table should be based on the specific needs of your application. A
5858

5959
As your business data grows, elastic tables provide unlimited auto scalability based on your application workload, both for storage size and throughput, such as the number of records created, updated, or deleted in a given timeframe.
6060

61-
If your business scenario requires very large volume of data writes, application makers can make use of Dataverse multiple request API's, such as `CreateMultiple`, `UpdateMultiple`, and `DeleteMultiple`, to achieve more throughput within Dataverse throttling limits. More information: [Developer guide: Bulk Operation messages (preview)](../../developer/data-platform/bulk-operations.md)
61+
If your business scenario requires very large volume of data writes, application makers can make use of Dataverse multiple request API's, such as `CreateMultiple`, `UpdateMultiple`, and `DeleteMultiple`, to achieve more throughput within Dataverse throttling limits. More information: [Developer guide: Bulk Operation messages (preview)](../../developer/data-platform/bulk-operations.md and [Optimize performance for bulk operations](/power-apps/developer/data-platform/optimize-performance-create-update)
6262

6363
### Automatic removal of data
6464

powerapps-docs/maker/data-platform/data-retention-faq.yml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ metadata:
44
description: Get answers to frequently asked questions about long term retention with Dataverse.
55
author: Mattp123
66
ms.search.keywords:
7-
ms.date: 03/31/2023
7+
ms.date: 10/17/2023
88
ms.author: matp
99
ms.reviewer:
1010
contributors:
11+
- gned
1112
ms.topic: faq
1213
title: Dataverse long term data retention FAQ (preview)
1314
summary: This article provides information on frequently asked questions about long term data retention with Microsoft Dataverse.
@@ -54,7 +55,7 @@ sections:
5455
5556
- question: In which regions is Dataverse long term retention available?
5657
answer: |
57-
The feature is currently available only in public cloud regions.
58+
The feature is currently available in public cloud regions. The planned target date for GCC cloud is Q1 calendar year 2024.
5859
5960
- question: Can data be moved from Dataverse long term store to my own data lake?
6061
answer: |
@@ -66,7 +67,7 @@ sections:
6667
6768
- question: Can the one Dataverse connector be used with Power BI for reporting long term retained data?
6869
answer: |
69-
This isn't currently supported.
70+
This isn't supported.
7071
7172
- question: Can I move data from Dataverse long term store back to the Dataverse live (active) store?
7273
answer: |
@@ -76,8 +77,6 @@ sections:
7677
answer: |
7778
Yes. When a retention policy runs, the process makes API requests to Microsoft Power Platform. These requests are counted towards your available API request limits.
7879
79-
- question: What is the cost of long term storage?
80-
answer: |
81-
Pricing details will be available by general availability (GA).
80+
8281
8382

powerapps-docs/maker/data-platform/preferred-solution.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ search.audienceType:
1212
ms.custom:
1313
- ai-gen-docs-bap
1414
- ai-gen-desc
15-
- ai-seo-date:10/11/2023
15+
- ai-seo-date:10/17/2023
1616
---
1717
# Set the preferred solution (preview)
1818

@@ -27,6 +27,7 @@ Using preferred solutions is a way to set which solution will support each maker
2727
> - This is a preview feature.
2828
> - [!INCLUDE [cc-preview-features-definition](../../includes/cc-preview-features-definition.md)]
2929
> - You can't set or view the preferred solution in the classic solution explorer.
30+
> - Components that are created in the classic solution explorer won't go into the preferred solution.
3031
3132
## Prerequisites
3233

0 commit comments

Comments
 (0)