Skip to content

Commit 818a7a3

Browse files
authored
Merge pull request #246602 from MicrosoftDocs/repo_sync_working_branch
Confirm merge from repo_sync_working_branch to main to sync with https://github.com/MicrosoftDocs/azure-docs (branch main)
2 parents 258dc2a + e20f473 commit 818a7a3

File tree

9 files changed

+50
-170
lines changed

9 files changed

+50
-170
lines changed

articles/active-directory/develop/tutorial-blazor-server.md

Lines changed: 35 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ In this tutorial:
2222

2323
> [!div class="checklist"]
2424
>
25-
> - Create a new Blazor Server app configured to use Azure AD for authentication
25+
> - Create a new Blazor Server app configured to use Azure AD for authentication for users in a single organization (in the Azure Active Directory tenant the app is registered)
2626
> - Handle both authentication and authorization using `Microsoft.Identity.Web`
2727
> - Retrieve data from a protected web API, Microsoft Graph
2828
@@ -34,169 +34,64 @@ In this tutorial:
3434
- [Application administrator](../roles/permissions-reference.md#application-administrator)
3535
- [Application developer](../roles/permissions-reference.md#application-developer)
3636
- [Cloud application administrator](../roles/permissions-reference.md#cloud-application-administrator)
37-
38-
## Register the app in the Azure portal
39-
40-
Every app that uses Azure AD for authentication must be registered with Azure AD. Follow the instructions in [Register an application](quickstart-register-app.md) with these additions:
41-
42-
- For **Supported account types**, select **Accounts in this organizational directory only**.
43-
- Leave the **Redirect URI** drop down set to **Web** and enter `https://localhost:5001/signin-oidc`. The default port for an app running on Kestrel is `5001`. If the app is available on a different port, specify that port number instead of `5001`.
44-
45-
Under **Manage**, select **Authentication** > **Implicit grant and hybrid flows**. Select **ID tokens**, and then select **Save**.
46-
47-
Finally, because the app calls a protected API (in this case Microsoft Graph), it needs a client secret in order to verify its identity when it requests an access token to call that API.
48-
49-
1. Within the same app registration, under **Manage**, select **Certificates & secrets** and then **Client secrets**.
50-
2. Create a **New client secret** that never expires.
51-
3. Make note of the secret's **Value** as you'll use it in the next step. You can’t access it again once you navigate away from this pane. However, you can recreate it as needed.
37+
- The tenant-id or domain of the Azure Active Directory associated with your Azure Account
5238

5339
## Create the app using the .NET CLI
5440

55-
To create the application, run the following command. Replace the placeholders in the command with the proper information from your app's overview page and execute the command in a command shell. The output location specified with the `-o|--output` option creates a project folder if it doesn't exist and becomes part of the app's name.
56-
5741
```dotnetcli
58-
dotnet new blazorserver --auth SingleOrg --calls-graph -o {APP NAME} --client-id "{CLIENT ID}" --tenant-id "{TENANT ID}" --domain "{DOMAIN}" -f net7.0
42+
mkdir <new-project-folder>
43+
cd <new-project-folder>
44+
dotnet new blazorserver --auth SingleOrg --calls-graph
5945
```
6046

61-
| Placeholder | Azure portal name | Example |
62-
| ------------- | ----------------------- | -------------------------------------- |
63-
| `{APP NAME}` | &mdash; | `BlazorSample` |
64-
| `{CLIENT ID}` | Application (client) ID | `41451fa7-0000-0000-0000-69eff5a761fd` |
65-
| `{TENANT ID}` | Directory (tenant) ID | `e86c78e2-0000-0000-0000-918e0565a45e` |
66-
| `{DOMAIN}` | Primary domain | `tenantname.onmicrosoft.com` |
67-
68-
Now, navigate to your new Blazor app in your editor and add the client secret to the _appsettings.json_ file, replacing the text "secret-from-app-registration".
47+
## Install the Microsoft Identity App Sync .NET Tool
6948

70-
```json
71-
"ClientSecret": "secret-from-app-registration",
49+
```dotnetcli
50+
dotnet tool install --global msidentity-app-sync
7251
```
7352

74-
## Test the app
53+
This tool will automate the following tasks for you:
7554

76-
In your terminal, run the following command:
55+
- Register your application in Azure Active Directory
56+
- Create a secret for your registered application
57+
- Register redirect URIs based on your launchsettings.json
58+
- Initialize the use of user secrets in your project
59+
- Store your application secret in user secrets storage
60+
- Update your appsettings.json with the client-id, tenant-id, and others.
7761

78-
```dotnetcli
79-
dotnet run
80-
```
62+
.NET Tools extend the capabilities of the dotnet CLI command. To learn more about .NET Tools, see [.NET Tools](/dotnet/core/tools/global-tools).
8163

82-
In your browser, navigate to `https://localhost:<port number> `, and log in using an Azure AD user account to see the app running.
64+
For more information on user secrets storage, see [safe storage of app secrets during development](/aspnet/core/security/app-secrets).
8365

84-
## Retrieving data from Microsoft Graph
66+
## Use the Microsoft Identity App Sync Tool
8567

86-
[Microsoft Graph](/graph/overview) offers a range of APIs that provide access to your users' Microsoft 365 data. By using the Microsoft identity platform as the identity provider for your app, you have easier access to this information since Microsoft Graph directly supports the tokens issued by the Microsoft identity platform. In this section, you add code to display the signed in user's emails on the application's "fetch data" page.
68+
Run the following command to register your app in your tenant and update the .NET configuration of your application. Provide the username/upn belonging to your Azure Account (for instance, `[email protected]`) and the tenant ID or domain name of the Azure Active Directory associated with your Azure Account. If you use an account that is signed in in either Visual Studio, Azure CLI, or Azure PowerShell, you'll benefit from single sign-on (SSO).
8769

88-
Before you start, log out of your app since you'll be making changes to the required permissions, and your current token won't work. If you haven't already, run your app again and select **Log out** before updating the code below.
70+
```dotnetcli
71+
msidentity-app-sync --username <username/upn> --tenant-id <tenantID>
72+
```
8973

90-
Now you'll update your app's registration and code to pull a user's email and display the messages within the app. To achieve this, first extend the app registration permissions in Azure AD to enable access to the email data. Then, add code to the Blazor app to retrieve and display this data in one of the pages.
74+
> [!Note]
75+
> - You don't need to provide the username if you are signed in with only one account in the developer tools.
76+
> - You don't need to provide the tenant-id if the tenant in which you want to create the application is your home tenant.
9177
92-
1. In the Azure portal, select your app in **App registrations**.
93-
1. Under **Manage**, select **API permissions**.
94-
1. Select **Add a permission** > **Microsoft Graph**.
95-
1. Select **Delegated Permissions**, then search for and select the **Mail.Read** permission.
96-
1. Select **Add permissions**.
78+
## Optional - Create a development SSL certificate
9779

98-
In the _appsettings.json_ file, update your code so it fetches the appropriate token with the right permissions. Add `mail.read` after the `user.read` scope under `DownstreamAPI`. This is specifying which scopes (or permissions) the app will request access to.
80+
In order to avoid SSL errors/warnings when browsing the running application, you can use the following on macOS and Windows to generate a self-signed SSL certificate for use by .NET Core.
9981

100-
```json
101-
"Scopes": "user.read mail.read"
82+
```dotnetcli
83+
dotnet dev-certs https --trust
10284
```
10385

104-
Next, in the _Pages_ folder, update the code in the _FetchData.razor_ file to retrieve email data instead of the default (random) weather details. Replace the code in that file with the following code snippet:
105-
106-
```csharp
107-
@page "/fetchdata"
108-
109-
@inject IHttpClientFactory HttpClientFactory
110-
@inject Microsoft.Identity.Web.ITokenAcquisition TokenAcquisitionService
111-
112-
<p>This component demonstrates fetching data from a service.</p>
113-
114-
@if (messages == null)
115-
{
116-
<p><em>Loading...</em></p>
117-
}
118-
else
119-
{
120-
<h1>Hello @userDisplayName !!!!</h1>
121-
<table class="table">
122-
<thead>
123-
<tr>
124-
<th>Subject</th>
125-
<th>Sender</th>
126-
<th>Received Time</th>
127-
</tr>
128-
</thead>
129-
<tbody>
130-
@foreach (var mail in messages)
131-
{
132-
<tr>
133-
<td>@mail.Subject</td>
134-
<td>@mail.Sender</td>
135-
<td>@mail.ReceivedTime</td>
136-
</tr>
137-
}
138-
</tbody>
139-
</table>
140-
}
141-
142-
@code {
143-
144-
private string userDisplayName;
145-
private List<MailMessage> messages = new List<MailMessage>();
146-
147-
private HttpClient _httpClient;
148-
149-
protected override async Task OnInitializedAsync()
150-
{
151-
_httpClient = HttpClientFactory.CreateClient();
152-
153-
154-
// get a token
155-
var token = await TokenAcquisitionService.GetAccessTokenForUserAsync(new string[] { "User.Read", "Mail.Read" });
156-
157-
// make API call
158-
_httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
159-
var dataRequest = await _httpClient.GetAsync("https://graph.microsoft.com/beta/me");
160-
161-
if (dataRequest.IsSuccessStatusCode)
162-
{
163-
var userData = System.Text.Json.JsonDocument.Parse(await dataRequest.Content.ReadAsStreamAsync());
164-
userDisplayName = userData.RootElement.GetProperty("displayName").GetString();
165-
}
166-
167-
var mailRequest = await _httpClient.GetAsync("https://graph.microsoft.com/beta/me/messages?$select=subject,receivedDateTime,sender&$top=10");
168-
169-
if (mailRequest.IsSuccessStatusCode)
170-
{
171-
var mailData = System.Text.Json.JsonDocument.Parse(await mailRequest.Content.ReadAsStreamAsync());
172-
var messagesArray = mailData.RootElement.GetProperty("value").EnumerateArray();
173-
174-
foreach (var m in messagesArray)
175-
{
176-
var message = new MailMessage();
177-
message.Subject = m.GetProperty("subject").GetString();
178-
message.Sender = m.GetProperty("sender").GetProperty("emailAddress").GetProperty("address").GetString();
179-
message.ReceivedTime = m.GetProperty("receivedDateTime").GetDateTime();
180-
messages.Add(message);
181-
}
182-
}
183-
}
184-
185-
public class MailMessage
186-
{
187-
public string Subject;
188-
public string Sender;
189-
public DateTime ReceivedTime;
190-
}
191-
}
86+
## Run the app
19287

193-
```
194-
195-
Launch the app. You’ll notice that you're prompted for the newly added permissions, indicating that everything is working as expected. Now, beyond basic user profile data, the app is requesting access to email data.
88+
In your terminal, run the following command:
19689

197-
After granting consent, navigate to the "Fetch data" page to read some email.
90+
```dotnetcli
91+
dotnet run
92+
```
19893

199-
:::image type="content" source="./media/tutorial-blazor-server/final-app-2.png" alt-text="Screenshot of the final app. It has a heading that says Hello Nicholas and it shows a list of emails belonging to Nicholas.":::
94+
Browse to the running web application using the URL outputted by the command line.
20095

20196
## Next steps
20297

articles/active-directory/hybrid/connect/plan-connect-performance-factors.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ The size of your source Active Directory topology will influence your SQL databa
166166

167167

168168
- Organizations with more than 100,000 users can reduce network latencies by colocating SQL database and the provisioning engine on the same server.
169+
- SQL Named Pipes protocol is not supported as it introduces significant delays in the sync cycle and should be disabled in the SQL Server Configuration Manager under SQL Native Clients and SQL Server Network. Please note that changing Named Pipes configuration only takes effect after restarting database and ADSync services.
169170
- Due to the high disk input and output (I/O) requirements of the sync process, use Solid State Drives (SSD) for the SQL database of the provisioning engine for optimal results, if not possible, consider RAID 0 or RAID 1 configurations.
170171
- Don’t do a full sync preemptively; it causes unnecessary churn and slower response times.
171172

articles/active-directory/hybrid/connect/reference-connect-sync-attributes-synchronized.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ In this case, start with the list of attributes in this topic and identify those
124124
| msExchRecipientTypeDetails |X |X |X | |
125125
| msExchRemoteRecipientType |X | | | |
126126
| msExchRequireAuthToSendTo |X |X |X | |
127-
| msExchResourceCapacity |X | | | |
127+
| msExchResourceCapacity |X| | |This attribute is currently not consumed by Exchange Online. |
128128
| msExchResourceDisplay |X | | | |
129129
| msExchResourceMetaData |X | | | |
130130
| msExchResourceSearchProperties |X | | | |

articles/azure-large-instances/what-is-azure-large-instances.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ Shows Azure IaaS, and in this case, use of VMs to host your applications, which
181181
Shows using your ExpressRoute Gateway enabled with ExpressRoute FastPath for Azure Large Instances connectivity offering low latency.
182182

183183
> [!Note]
184-
>To support this configuration, your ExpressRoute Gateway should be UltraPerformance. For more information, [About ExpressRoute virtual network gateways](../expressroute/expressroute-about-virtual-network-gateways.md).
184+
>To support this configuration, your ExpressRoute Gateway should be UltraPerformance. For more information, see [About ExpressRoute virtual network gateways](../expressroute/expressroute-about-virtual-network-gateways.md).
185185
186186

187187

articles/azure-large-instances/work-with-azure-large-instances-in-azure-portal.md

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,25 @@ ms.date: 06/01/2023
1616
In this article, you learn what to do in the Azure portal with your implementation of Azure Large Instances.
1717

1818
> [!Note]
19-
> For now, BareMetal Infrastructure or BareMetal Instances are being used as synonyms with Azure Large Instances.
19+
> For now, BareMetal Infrastructure and BareMetal Instances are being used as synonyms for Azure Large Instances.
2020
2121
## Register the resource provider
2222

23-
An Azure resource provider for Azure Large Instances enables you to see the instances in the Azure portal. By default, the Azure subscription you use for Azure Large Instances deployments registers the Azure Large Instances resource provider. If you don't see your deployed Azure Large Instances, register the resource provider with your subscription.
23+
An Azure resource provider for Azure Large Instances enables you to see the instances in the Azure portal.
24+
By default, the Azure subscription you use for Azure Large Instances deployments registers the Azure Large Instances resource provider.
25+
If you don't see your deployed Azure Large Instances, register the resource provider with your subscription.
2426

2527
You can register the Azure Large Instance resource provider using the Azure portal or the Azure CLI.
2628

2729
### [Portal](#tab/azure-portal)
2830

29-
3031
You need to list your subscription in the Azure portal and then double-click the subscription used to deploy your Azure Large Instances tenant.
3132

3233
1. Sign in to the Azure portal.
3334
2. On the Azure portal menu, select **All services**.
3435
3. In the **All services** box, enter **subscription**, and then select **Subscriptions**.
3536
4. Select the subscription from the subscription list.
36-
5. Select **Resource providers** and type **BareMetalInfrastructure** in the search box. The resource provider should be Registered, as the image shows.
37+
5. Select **Resource providers** and type **BareMetalInfrastructure** in the search box. The resource provider should be registered, as the image shows.
3738

3839
:::image type="content" source="../baremetal-infrastructure/media/connect-baremetal-infrastructure/register-resource-provider-azure-portal.png" alt-text="Networking diagram of Azure Large Instances." lightbox="../baremetal-infrastructure/media/connect-baremetal-infrastructure/register-resource-provider-azure-portal.png" border="false":::
3940

@@ -46,23 +47,8 @@ To begin using Azure CLI:
4647

4748
[!INCLUDE [azure-cli-prepare-your-environment-no-header](~/articles/reusable-content/azure-cli/azure-cli-prepare-your-environment-no-header.md)]
4849

49-
[comment]: <The following section duplicates the content provided by the INCLUDE above>
50-
51-
Use the Bash environment in [Azure Cloud Shell](../cloud-shell/overview.md).
52-
For more information, see [Quickstart for Bash in Azure Cloud Shell](../cloud-shell/quickstart.md).
53-
54-
If you prefer to run CLI reference commands locally, [install](https://learn.microsoft.com/cli/azure/install-azure-cli) the Azure CLI. If you're running on Windows or macOS, consider running Azure CLI in a Docker container. For more information, see [How to run the Azure CLI in a Docker container](https://learn.microsoft.com/cli/azure/run-azure-cli-docker).
55-
56-
If you're using a local installation, sign in to the Azure CLI by using the [az login command](https://learn.microsoft.com/cli/azure/reference-index?view=azure-cli-latest#az-login). To finish the authentication process, follow the steps displayed in your terminal. For other sign-in options, see [Sign in with the Azure CLI](https://learn.microsoft.com/cli/azure/authenticate-azure-cli).
57-
58-
When you're prompted, install the Azure CLI extension on first use. For more information about extensions, see [Use extensions with the Azure CLI](https://learn.microsoft.com/cli/azure/azure-cli-extensions-overview).
59-
60-
Run [az version](https://learn.microsoft.com/cli/azure/reference-index?view=azure-cli-latest#az-version) to find the version and dependent libraries that are installed. To upgrade to the latest version, run [az upgrade](https://learn.microsoft.com/cli/azure/reference-index?view=azure-cli-latest#az-upgrade).
61-
6250
For more information about resource providers, see [Azure resource providers and types](./../azure-resource-manager/management/resource-providers-and-types.md).
6351

64-
[comment]: <End of Include content>
65-
6652
Sign in to the Azure subscription you use for the Azure Large Instances deployment through the Azure CLI.
6753
Register the BareMetalInfrastructure Azure Large Instance resource provider with the az provider register command:
6854

@@ -74,8 +60,6 @@ You can use the az provider list command to see all available providers.
7460

7561
---
7662

77-
For more information about resource providers, see [Azure resource providers and types](../azure-resource-manager/management/resource-providers-and-types.md).
78-
7963
## Azure Large Instances in the Azure portal
8064

8165
When you submit an Azure Large Instances deployment request, specify the Azure subscription you're connecting to the Azure Large Instances. Use the same subscription you use to deploy the application layer that works against the Azure Large Instances.

articles/baremetal-infrastructure/workloads/nc2-on-azure/supported-instances-and-regions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Learn about instances and regions supported for NC2 on Azure.
1818
Nutanix Clusters on Azure supports:
1919

2020
* Minimum of three bare metal nodes per cluster.
21-
* Maximum of 13 bare metal nodes.
21+
* Maximum of 28 bare metal nodes.
2222
* Only the Nutanix AHV hypervisor on Nutanix clusters running in Azure.
2323
* Prism Central instance deployed on Nutanix Clusters on Azure to manage the Nutanix clusters in Azure.
2424

0 commit comments

Comments
 (0)