Skip to content

Commit 5a8d97c

Browse files
authored
Merge pull request #296418 from MicrosoftDocs/main
Publish to live, Monday 4 AM PST, 3/17
2 parents 49e059f + 11a439b commit 5a8d97c

30 files changed

+252
-46
lines changed

articles/automation/automation-use-azure-ad.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Before installing the Microsoft Entra modules on your computer:
4141
4242
1. Install Windows Management Framework (WMF) 5.1. See [Install and Configure WMF 5.1](/powershell/scripting/wmf/setup/install-configure).
4343

44-
2. Install AzureRM and/or Az using instructions in [Install Azure PowerShell on Windows with PowerShellGet](/powershell/azure/azurerm/install-azurerm-ps).
44+
2. Install AzureRM and/or Az using instructions in [Install Azure PowerShell on Windows with PowerShellGet](/powershell/azure/install-azure-powershell).
4545

4646
### Install the MSOnline module
4747

articles/azure-government/documentation-government-csp-list.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ The following tables contain lists of all the authorized Cloud Solution Provider
321321
|[Palecek Consulting Group](https://www.pcgit.net)|
322322
|[Pangea Group Inc.](http://www.pangea-group.com)|
323323
|[Paragon Software Solutions, Inc.](http://www.paragonhq.com/)|
324-
|[Patrocinium Systems, Inc.](https://www.patrocinium.com)|
324+
|[Patrocinium Systems, Inc.](https://www.linkedin.com/company/patrocinium-systems)|
325325
|[PCM](https://www.pcm.com/)|
326326
|[Peerless Tech Solutions](https://www.getpeerless.com)|
327327
|[People Services Inc. DBA CATCH Intelligence](https://catchintelligence.com)|

articles/azure-signalr/TOC.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@
141141
href: signalr-howto-authorize-application.md
142142
- name: Authorize from managed identity
143143
href: signalr-howto-authorize-managed-identity.md
144-
- name: Disable local authentication.
144+
- name: Configure cross tenant authorization
145+
href: signalr-howto-authorize-cross-tenant.md
146+
- name: Disable local authentication
145147
href: howto-disable-local-auth.md
146148
- name: Custom domain
147149
href: howto-custom-domain.md

articles/azure-signalr/signalr-concept-authorize-azure-active-directory.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
title: Authorize access with Microsoft Entra ID for Azure SignalR Service
3-
description: This article provides information on authorizing access to Azure SignalR Service resources by using Microsoft Entra ID.
4-
author: vicancy
5-
ms.author: lianwei
6-
ms.date: 09/06/2021
3+
description: This article explains how to authorize requests to Azure SignalR Service resources using Microsoft Entra ID.
4+
author: terencefan
5+
ms.author: tefa
6+
ms.date: 03/12/2025
77
ms.service: azure-signalr-service
88
ms.topic: conceptual
99
---
1010

11-
# Authorize access with Microsoft Entra ID for Azure SignalR Service
11+
# Microsoft Entra ID for Azure SignalR Service
1212

1313
Azure SignalR Service supports Microsoft Entra ID for authorizing requests to its resources. With Microsoft Entra ID, you can use role-based access control (RBAC) to grant permissions to a *security principal*. A security principal is a user/resource group, an application, or a service principal such as system-assigned identities and user-assigned identities.
1414

@@ -86,12 +86,20 @@ You can scope access to Azure SignalR Service resources at the following levels,
8686

8787
## Next steps
8888

89-
- To learn how to create an Azure application and use Microsoft Entra authorization, see [Authorize requests to Azure SignalR Service resources with Microsoft Entra applications](./signalr-howto-authorize-application.md).
89+
- To learn how to configure Microsoft Entra authorization, see:
9090

91-
- To learn how to configure a managed identity and use Microsoft Entra authorization, see [Authorize requests to Azure SignalR Service resources with Microsoft Entra managed identities](./signalr-howto-authorize-managed-identity.md).
91+
- [Authorize requests to Azure SignalR Service resources with Microsoft Entra applications](./signalr-howto-authorize-application.md).
92+
- [Authorize requests to Azure SignalR Service resources with Managed identities for Azure resources](./signalr-howto-authorize-managed-identity.md).
9293

93-
- To learn more about roles and role assignments, see [What is Azure role-based access control (Azure RBAC)?](../role-based-access-control/overview.md).
94+
- To learn more about roles-based access control and role, see:
9495

95-
- To learn how to create custom roles, see [Steps to create a custom role](../role-based-access-control/custom-roles.md#steps-to-create-a-custom-role).
96+
- [What is Azure role-based access control (Azure RBAC)?](../role-based-access-control/overview.md).
97+
- [Steps to create a custom role](../role-based-access-control/custom-roles.md#steps-to-create-a-custom-role).
9698

97-
- To learn how to use only Microsoft Entra authentication, see [Disable local authentication](./howto-disable-local-auth.md).
99+
- To learn how to configure cross tenant authorization with Microsoft Entra, see:
100+
101+
- [How to configure cross tenant authorization with Microsoft Entra](signalr-howto-authorize-cross-tenant.md)
102+
103+
- To learn how to disable connection string and use only Microsoft Entra authentication, see:
104+
105+
- [How to disable local authentication](./howto-disable-local-auth.md).

articles/azure-signalr/signalr-howto-authorize-application.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Authorize requests to Azure SignalR Service resources with Microsoft Entr
33
description: This article provides information about authorizing requests to Azure SignalR Service resources with Microsoft Entra applications.
44
author: terencefan
55
ms.author: tefa
6-
ms.date: 03/14/2023
6+
ms.date: 03/12/2023
77
ms.service: azure-signalr-service
88
ms.topic: how-to
99
ms.devlang: csharp
@@ -194,6 +194,7 @@ In the Azure portal, add settings as follows:
194194

195195
See the following related articles:
196196

197-
- [Authorize access with Microsoft Entra ID for Azure SignalR Service](signalr-concept-authorize-azure-active-directory.md)
198-
- [Authorize requests to Azure SignalR Service resources with Microsoft Entra managed identities](signalr-howto-authorize-managed-identity.md)
199-
- [Disable local authentication](./howto-disable-local-auth.md)
197+
- [Microsoft Entra ID for Azure SignalR Service](signalr-concept-authorize-azure-active-directory.md)
198+
- [Authorize requests to Azure SignalR Service resources with Managed identities for Azure resources](./signalr-howto-authorize-managed-identity.md)
199+
- [How to configure cross tenant authorization with Microsoft Entra](signalr-howto-authorize-cross-tenant.md)
200+
- [How to disable local authentication](./howto-disable-local-auth.md)

articles/azure-signalr/signalr-howto-authorize-cross-tenant.md

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
---
2+
title: Cross tenant authorization with Microsoft Entra
3+
description: This article provides information about building multitenant applications and configures authorization in SignalR.
4+
author: terencefan
5+
ms.author: tefa
6+
ms.date: 03/12/2023
7+
ms.service: azure-signalr-service
8+
ms.topic: how-to
9+
ms.devlang: csharp
10+
ms.custom: subject-rbac-steps
11+
---
12+
13+
# Cross tenant authorization with Microsoft Entra
14+
15+
For security reasons, your server may host in an independent tenant from your Azure SignalR resource.
16+
17+
Since managed identity can't be used across tenants, you need to register an application in `tenantA` and then provision it as an enterprise application in `tenantB`.
18+
19+
This doc helps you create an application in `tenantA` and use it to connect to a SignalR resource in `tenantB`.
20+
21+
## Register a multitenant application in tenant A
22+
23+
The first step is to create a multitenant application, see:
24+
25+
[Quickstart: Register an application in Microsoft Entra ID](/entra/identity-platform/quickstart-register-app)
26+
27+
In the case that you already have a single tenant application.
28+
29+
[Convert single-tenant app to multitenant on Microsoft Entra ID](/entra/identity-platform/howto-convert-app-to-be-multi-tenant)
30+
31+
There are four account types:
32+
33+
- Accounts in this organizational directory
34+
- Accounts in any organizational directory
35+
- Accounts in any organizational directory and personal Microsoft accounts
36+
- Personal Microsoft accounts
37+
38+
Be sure to select either type 2 or type 3 when creating the application.
39+
40+
![Screenshot of overview information for a registered application.](./media/signalr-howto-authorize-application/application-overview.png)
41+
42+
Note down the **Application (client) ID** and **Directory (tenant) ID**, they can be useful in the following steps.
43+
44+
## Provision the application in tenant B
45+
46+
The role can't be assigned to the application registered in other tenants. We have to provision it as an external enterprise application in the tenant B.
47+
48+
Click to learn [differences between App registration and Enterprise applications](/answers/questions/270680/app-registration-vs-enterprise-applications).
49+
50+
For short, the enterprise application is a service principal, while the app registration isn't. The enterprise application inherits certain properties from the application object, such as **Application (client) ID**.
51+
52+
A default service principal is created in the tenant where the app is registered. For other tenants, you need to provision the app to get an enterprise application service principal, see:
53+
54+
[Create an enterprise application from a multitenant application in Microsoft Entra ID](/entra/identity/enterprise-apps/create-service-principal-cross-tenant)
55+
56+
Enterprise applications in different tenant have different **Directory (tenant) ID**, but share the same **Application (client) ID**.
57+
58+
## Assign roles to the enterprise application
59+
60+
Once you have the enterprise application provisioned in your tenant B. You will be able to assign roles to it.
61+
62+
[!INCLUDE [add role assignments](includes/signalr-add-role-assignments.md)]
63+
64+
## Configure SignalR SDK to use the enterprise application
65+
66+
There are 3 different types of credentials for an application to authenticate itself:
67+
68+
- Certificates
69+
- Client secrets
70+
- Federated identity
71+
72+
We strongly recommend you to use the first 2 ways to make cross tenant requests.
73+
74+
### Use Certificates or Client secrets
75+
76+
- `tenantId` should be the ID of your **Tenant B**.
77+
- `clientId` in both tenants are equal.
78+
- `clientSecret` and `clientCert` should be configured in **Tenant A**, see [Add credentials](/entra/identity-platform/quickstart-register-app?tabs=certificate%2Cexpose-a-web-api#add-credentials).
79+
80+
If you aren't sure about your tenant ID, see [Find your Microsoft Entra tenant](/azure/azure-portal/get-subscription-tenant-id#find-your-microsoft-entra-tenant)
81+
82+
```csharp
83+
services.AddSignalR().AddAzureSignalR(option =>
84+
{
85+
var credential1 = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
86+
var credential2 = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");
87+
88+
option.Endpoints = new ServiceEndpoint[]
89+
{
90+
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), credential1),
91+
new ServiceEndpoint(new Uri("https://<resource2>.service.signalr.net"), credential2),
92+
};
93+
});
94+
```
95+
96+
### Use Federated identity
97+
98+
However, for security reasons, certificates and client secrets might be disabled in your subscription. In this case, you need to either use an external identity provider or try the preview support for managed identity.
99+
100+
- [Configure an app to trust an external identity provider](/entra/workload-id/workload-identity-federation-create-trust)
101+
- [Configure an application to trust a managed identity (preview)](/entra/workload-id/workload-identity-federation-config-app-trust-managed-identity)
102+
103+
You can check this repo: [Entra Cross-Tenant Application Federated Identity Credential (FIC)](https://github.com/arsenvlad/entra-cross-tenant-app-fic-managed-identity) for detailed info and video guide.
104+
105+
When using managed identity as an identity provider, the code should look like this:
106+
107+
- `tenantId` should be the ID of your **Tenant B**.
108+
- `clientId` in both tenants are equal.
109+
110+
```csharp
111+
services.AddSignalR().AddAzureSignalR(option =>
112+
{
113+
var msiCredential = new ManagedIdentityCredential("msiClientId");
114+
115+
var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
116+
{
117+
// Entra ID US Government: api://AzureADTokenExchangeUSGov
118+
// Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
119+
var request = new TokenRequestContext([$"api://AzureADTokenExchange/.default"]);
120+
var response = await msiCredential.GetTokenAsync(request, ctoken).ConfigureAwait(false);
121+
return response.Token;
122+
});
123+
124+
option.Endpoints = [
125+
new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
126+
];
127+
});
128+
```
129+
130+
When using external identity providers, the code should look like this:
131+
132+
```csharp
133+
services.AddSignalR().AddAzureSignalR(option =>
134+
{
135+
var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
136+
{
137+
// Find your own way to get a token from the external identity provider.
138+
// The audience of the token should be "api://AzureADTokenExchange", as it is the recommended value.
139+
return "TheTokenYouGetFromYourExternalIdentityProvider";
140+
});
141+
142+
option.Endpoints = [
143+
new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
144+
];
145+
});
146+
```
147+
148+
Debugging token acquisition with the SignalR SDK can be challenging since it depends on the token results.
149+
We recommend testing the token acquisition process locally before integrating with the SignalR SDK.
150+
151+
```csharp
152+
var assertion = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
153+
{
154+
// Find your own way to get a token from the external identity provider.
155+
// The audience of the token should be "api://AzureADTokenExchange", as it is the recommended value.
156+
return TheTokenYouGetFromYourExternalIdentityProvider;
157+
});
158+
159+
var request = new TokenRequestContext(["https://signalr.azure.com/.default");
160+
var token = await assertion.GetTokenAsync(assertion);
161+
Console.log(token.Token);
162+
```
163+
164+
The key point is to use an inner credential to get a `clientAssertion` from `api://AzureADTokenExchange` or other trusted identity platforms. Then use it to exchange for a token with `https://signalr.azure.com/.default` audience to access your resource.
165+
166+
Your goal is to get a token with following claims. Use [jwt.io](https://jwt.io/) to help you decode the token:
167+
168+
- **oid**
169+
170+
The value should be equal to your enterprise application object ID.
171+
172+
If you don't know where to get it, see [How Retrieve Enterprise Object ID](/answers/questions/1007608/how-retrieve-enterprise-object-id-from-azure-activ)
173+
174+
- **tid**
175+
176+
The value should be equal to the Directory ID of your tenant B.
177+
178+
If you aren't sure about your tenant ID, see [Find your Microsoft Entra tenant](/azure/azure-portal/get-subscription-tenant-id#find-your-microsoft-entra-tenant)
179+
180+
- **audience**
181+
182+
Has to be `https://signalr.azure.com/.default` to access SignalR resources.
183+
184+
## Next steps
185+
186+
See the following related articles:
187+
188+
- [Microsoft Entra ID for Azure SignalR Service](signalr-concept-authorize-azure-active-directory.md)
189+
- [Authorize requests to Azure SignalR Service resources with Microsoft Entra applications](signalr-howto-authorize-application.md)
190+
- [Authorize requests to Azure SignalR Service resources with Managed identities for Azure resources](./signalr-howto-authorize-managed-identity.md)

articles/azure-signalr/signalr-howto-authorize-managed-identity.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Authorize requests to Azure SignalR Service resources with Microsoft Entr
33
description: This article provides information about authorizing requests to Azure SignalR resources with Managed identities for Azure resources.
44
author: terencefan
55
ms.author: tefa
6-
ms.date: 03/11/2025
6+
ms.date: 03/12/2023
77
ms.service: azure-signalr-service
88
ms.topic: how-to
99
ms.devlang: csharp
@@ -131,6 +131,7 @@ If you want to use a user-assigned identity, you need to assign `clientId` in ad
131131

132132
See the following related articles:
133133

134-
- [Authorize access with Microsoft Entra ID for Azure SignalR Service](signalr-concept-authorize-azure-active-directory.md)
134+
- [Microsoft Entra ID for Azure SignalR Service](signalr-concept-authorize-azure-active-directory.md)
135135
- [Authorize requests to Azure SignalR Service resources with Microsoft Entra applications](signalr-howto-authorize-application.md)
136-
- [Disable local authentication](./howto-disable-local-auth.md)
136+
- [How to configure cross tenant authorization with Microsoft Entra](signalr-howto-authorize-cross-tenant.md)
137+
- [How to disable local authentication](./howto-disable-local-auth.md)

articles/azure-vmware/azure-vmware-solution-nsx-scale-and-performance-recommendations-for-vmware-hcx.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,4 @@ Once the new HCX Uplink Network Profile is created, update the existing Service
214214
215215
## More information
216216

217-
[VMware NSX Reference Design Guide](https://www.vmware.com/docs/nsx-t-reference-design-guide-3-2-v1.1-1)
217+
[VMware NSX Reference Design Guide](https://blogs.vmware.com/affiliates/nsx-t-reference-design-guide-updated-version-for-nsx-t-3-0)

articles/backup/backup-azure-immutable-vault-concept.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ms.author: jsuri
1111

1212
# Immutable vault for Azure Backup
1313

14-
Immutable vault can help you protect your backup data by blocking any operations that could lead to loss of recovery points. Further, you can lock the Immutable vault setting to make it irreversible and use WORM storage for backups to prevent any malicious actors from disabling immutability and deleting backups.
14+
Immutable vault can help you protect your backup data by blocking any operations that could lead to loss of recovery points. Further, you can lock the Immutable vault setting to make it irreversible and use WORM (Write Once, Read Many) storage for backups to prevent any malicious actors from disabling immutability and deleting backups.
1515

1616
## Supported scenarios for WORM storage
1717

articles/backup/backup-azure-immutable-vault-how-to-manage.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: How to manage Azure Backup Immutable vault operations
33
description: This article explains how to manage Azure Backup Immutable vault operations.
44
ms.topic: how-to
55
ms.service: azure-backup
6-
ms.date: 11/11/2024
6+
ms.date: 03/13/2025
77
author: jyothisuri
88
ms.author: jsuri
99
ms.custom: engagement-fy24, ignite-2024
@@ -15,7 +15,7 @@ This article describes how to manage Azure Backup Immutable vault operations for
1515

1616
[Immutable vault](backup-azure-immutable-vault-concept.md) can help you protect your backup data by blocking any operations that could lead to loss of recovery points. Further, you can lock the Immutable vault setting to enable WORM storage immutability and make it irreversible to prevent any malicious actors from disabling immutability and deleting backups.
1717

18-
>[!Note]
18+
>[!NOTE]
1919
> Immutable WORM storage is currently in GA for Recovery Services Vaults in the following regions: West Central US, West Europe, East US, North Europe, Australia East
2020
2121
## Enable Immutable vault
@@ -98,6 +98,9 @@ However, increasing the retention of backup items that are in suspended state is
9898

9999
Let's try to stop backup on a VM and choose **Retain as per policy** for backup data retention.
100100

101+
>[!NOTE]
102+
> When you stop backups and retain as per policy, the last RP is retained forever to ensure recovery against any unforeseen ransomware scenarios. You must manually delete this RP after the backup policy expires to stop incurring PI charges.
103+
101104
:::image type="content" source="./media/backup-azure-immutable-vault/attempt-to-increase-retention-of-backup-items-in-suspended-state.png" alt-text="Screenshot shows an attempt to increase retention of backup items in suspended state.":::
102105

103106
Now, let's go to **Modify Policy** and try to increase the retention of daily backup points to *45 days*, increasing the value by *5 days*, and save the policy.

0 commit comments

Comments
 (0)