Skip to content

Commit 238bf67

Browse files
Merge pull request #308898 from MicrosoftDocs/main
Auto Publish – main to live - 2025-12-01 18:00 UTC
2 parents c7b41b0 + d8974e9 commit 238bf67

43 files changed

Lines changed: 181 additions & 278 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

articles/application-gateway/json-web-token-overview.md

Lines changed: 16 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: Learn how to configure JSON Web Token (JWT) validation in Azure App
55
author: rnautiyal
66
ms.author: rnautiyal
77
ms.service: azure-application-gateway
8-
ms.topic: conceptual
8+
ms.topic: article
99
ms.date: 11/18/2025
1010
---
1111

@@ -39,27 +39,18 @@ By performing token validation at the edge, Application Gateway simplifies appli
3939
- **Network Requirements**
4040
- Outbound Connectivity from Application Gateway Subnet to login.microsoftonline.com over TCP port 443
4141

42+
4243
- **Microsoft Entra ID Requirements**
43-
- Register your Web API in Microsoft Entra ID and note down:
44-
- Tenant ID: Azure AD tenant GUID, or use common, organizations, or consumers for multitenant apps
45-
- Client ID: The Application (Client) ID from your app registration (must be a GUID)
46-
- Audiences (optional): Additional valid aud claim values (max 5) such as custom App ID URIs
44+
- Register your Web API in Microsoft Entra ID
45+
- Make a call to the Microsoft Entra ID to request access to a service. The Microsoft Entra ID responds with an access token.
4746

48-
> [!NOTE]
49-
> Audiences (`aud`): The `aud` claim is the resource identifier (App ID URI, well‑known resource URI, or sometimes the app's Client ID GUID). The `aud` claim identifies the resource (API) the token is issued for — an App ID URI, a well‑known resource URI, or the application's Client ID GUID. The scope or resource you request points to a resource; Entra ID then sets `aud` to that resource's identifier.
50-
> Common mappings:
51-
>
52-
> - `--scope "api://<ClientID>/.default"``aud` = your App ID URI (for example. `api://<ClientID>` or custom). If no App ID URI is set, `aud` falls back to the Client ID GUID.
53-
> - `--scope "https://api.contoso.com/.default"``aud = https://api.contoso.com`
54-
> - `--scope "https://management.azure.com/.default"``aud = https://management.azure.com`
55-
> - `--scope "https://graph.microsoft.com/.default"``aud = https://graph.microsoft.com`
56-
> Add entries to **Audiences** when the token's `aud` is a custom App ID URI (not equal to the bare Client ID GUID) or you intentionally accept multiple resource identifiers. The gateway succeeds validation if `aud` matches either:
57-
> (1) the configured Client ID (when `aud` is the GUID), or
58-
> (2) any value in the Audiences list (including App ID URIs or well‑known resource URIs).
47+
- **Configure JWT validation in Application Gateway**
48+
49+
5950

60-
## Configure JWT validation
51+
## JSON Web Token (JWT) validation setup
6152

62-
In this section, you learn how to configure JWT validation in Azure Application Gateway in four steps:
53+
In this section, you learn how to configure JWT validation in Azure Application Gateway:
6354

6455
## Register an application in Microsoft Entra ID
6556

@@ -83,7 +74,6 @@ In this section, you learn how to configure JWT validation in Azure Application
8374

8475
> [!NOTE]
8576
> Supported account types:
86-
>
8777
> Single tenant (This directory only)
8878
>
8979
> Multitenant (Any Azure AD directory)
@@ -126,19 +116,16 @@ In this section, you learn how to configure JWT validation in Azure Application
126116

127117
1. Link this rule to your JWT validation configuration. Your JWT validation configuration is now attached to a secure HTTPS listener and routing rule.
128118

129-
## Send Request to Application Gateway
130119

131-
Use `curl` or any HTTP client to send requests with a valid JWT in the `Authorization` header.
120+
## Send a JWT Access Token with Every Request to the Secure Application
132121

133-
```bash
134-
APPGW_URL="https://<appgw-frontend-ip-or-dns>:<port>/<path>"
135-
curl -i -H "Authorization: Bearer $TOKEN" "$APPGW_URL"
136-
```
122+
To securely access an application protected by Application Gateway, the client must first obtain a JWT access token from the Microsoft Entra ID token endpoint. The client then includes this token in the Authorization header (for example, Authorization: Bearer TOKEN) on every request it sends to the Application Gateway. Application Gateway validates the token before forwarding the request to the backend application, ensuring that only authenticated and authorized traffic reaches the secure application.
137123

138-
> [!NOTE]
139-
> Tokens must be issued by Microsoft Entra ID. Check [Token](/azure/devops/cli/entra-tokens) for more details
124+
- Learn more about [Access tokens in the Microsoft identity platform](/entra/identity-platform/access-tokens)
140125

141-
## Expected Outcomes
126+
127+
128+
## Expected Outcomes of requests
142129

143130
| Scenario | HTTP Status | Identity Header | Notes |
144131
| -------------------------------- | ----------- | --------------- | ----------------------------------- |
@@ -149,7 +136,7 @@ curl -i -H "Authorization: Bearer $TOKEN" "$APPGW_URL"
149136

150137
## Backend Verification
151138

152-
Check ``x-msft-entra-identity`` header to confirm authentication.
139+
Check ``x-msft-entra-identity`` header to confirm authentication.
153140

154141
## Troubleshooting 401 and 403 responses
155142

@@ -168,127 +155,7 @@ If requests return **401** or **403**, verify:
168155
- Acquire a new token for the correct audience.
169156
- Check Application Gateway access logs for detailed failure reason.
170157

171-
## Additional concepts for reference
172-
173-
## Audience vs. scope mapping
174-
175-
Understanding how requested scopes map to the JWT `aud` claim helps determine whether you need to populate the optional **Audiences** list in the Application Gateway configuration.
176-
177-
**Key points:**
178158

179-
- `aud` represents the resource the token was issued for.
180-
- Resource identifiers can be:
181-
- An App ID URI (for example, `api://<ClientID>` or a verified domain URI like `https://api.contoso.com`)
182-
- A well-known Microsoft resource URI (for example, `https://management.azure.com`, `https://graph.microsoft.com`)
183-
- The application's Client ID GUID (common when no App ID URI is set)
184-
185-
## Common scope-to-`aud` mappings
186-
187-
| az CLI scope argument | Typical resulting `aud` |
188-
| --------------------------------------- | ----------------------------------------------------------------------------------------- |
189-
| `api://<ClientID>/.default` | `api://<ClientID>` (or custom App ID URI); falls back to GUID if no App ID URI configured |
190-
| `https://api.contoso.com/.default` | `https://api.contoso.com` |
191-
| `https://management.azure.com/.default` | `https://management.azure.com` |
192-
| `https://graph.microsoft.com/.default` | `https://graph.microsoft.com` |
193-
194-
## When to add values to the Audiences list
195-
196-
- Tokens use a custom App ID URI (not just the GUID).
197-
- You accept multiple resource identifiers (for example, during migration from `api://<ClientID>` to `https://api.contoso.com`).
198-
- You need to allow both GUID and URI forms simultaneously.
199-
200-
**Gateway validation logic:**
201-
202-
- If no audiences are configured: token `aud` must equal the configured `ClientId` (GUID).
203-
- If audiences are configured: token `aud` must match either the `ClientId` or one of the configured audience strings.
204-
205-
**Audiences checklist:**
206-
207-
| Scenario | Configure Audiences? | Example Entry |
208-
| ----------------------------------------- | -------------------- | ------------------------- |
209-
| Only GUID `aud` tokens observed | No | (leave empty) |
210-
| Tokens show `api://<ClientID>` | Yes | `api://<ClientID>` |
211-
| Custom domain App ID URI | Yes | `https://api.contoso.com` |
212-
| Supporting old & new URI during migration | Yes | Both URIs (≤5 total) |
213-
214-
> [!NOTE]
215-
> Keep the list minimal—every extra accepted `aud` broadens what the gateway treats as valid.
216-
217-
## Acquire an access token
218-
219-
The method used to acquire the token determines the `oid` (object ID) in the ``x-msft-entra-identity`` header forwarded to your backend.
220-
221-
#### Scenario 1: Client Credentials Flow
222-
223-
**Use case:** Service-to-service authentication
224-
**Identity header format:** `tenantId:<service-principal-oid>`
225-
226-
```bash
227-
# Using client secret
228-
CLIENT_ID="<your-client-id>"
229-
CLIENT_SECRET="<your-client-secret>"
230-
TENANT_ID="<your-tenant-id>"
231-
SCOPE="api://<your-client-id>/.default"
232-
TOKEN=$(az account get-access-token \
233-
--service-principal \
234-
-u "$CLIENT_ID" \
235-
-p "$CLIENT_SECRET" \
236-
--tenant "$TENANT_ID" \
237-
--scope "$SCOPE" \
238-
--query accessToken -o tsv)
239-
echo "Access Token: $TOKEN"
240-
```
241-
242-
**Using client certificate (PEM or PFX):**
243-
244-
```bash
245-
# PEM format
246-
az account get-access-token \
247-
--service-principal \
248-
-u "$CLIENT_ID" \
249-
-p /path/to/cert.pem \
250-
--tenant "$TENANT_ID" \
251-
--scope "$SCOPE"
252-
253-
# PFX format
254-
export AZURE_CERT_PASSWORD="<pfx-password>"
255-
az account get-access-token \
256-
--service-principal \
257-
-u "$CLIENT_ID" \
258-
-p /path/to/cert.pfx \
259-
--tenant "$TENANT_ID" \
260-
--scope "$SCOPE"
261-
```
262-
263-
#### Scenario 2: Managed Identity
264-
265-
**Use case:** Azure resource authenticates using managed identity
266-
**Identity header format:** `tenantId:<managed-identity-oid>`
267-
268-
```bash
269-
# System-assigned
270-
az login --identity
271-
TOKEN=$(az account get-access-token \
272-
--scope https://management.azure.com/.default \
273-
--query accessToken -o tsv)
274-
275-
# User-assigned
276-
USER_ASSIGNED_CLIENT_ID="<client-id>"
277-
az login --identity --username "$USER_ASSIGNED_CLIENT_ID"
278-
TOKEN=$(az account get-access-token \
279-
--scope https://management.azure.com/.default \
280-
--query accessToken -o tsv)
281-
```
282-
283-
## Inspect the token (Optional)
284-
285-
Decode JWT payload:
286-
287-
```bash
288-
echo "$TOKEN" | awk -F. '{print $2}' | base64 -d 2>/dev/null | jq
289-
```
290-
291-
**Key claims to verify:** `aud`, `iss`, `tid`, `oid`, `exp`, `nbf`
292159

293160
## Next steps
294161

articles/backup/tutorial-backup-windows-server-to-azure.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ To configure backup and retention on the server where you downloaded the agent,
8484

8585
2. On the Recovery Services agent console, select **Schedule Backup** under the **Actions Pane**.
8686

87-
![Screenshot shows tbe Schedule Backup option.](./media/tutorial-backup-windows-server-to-azure/mars-schedule-backup.png)
87+
![Screenshot shows the Schedule Backup option.](./media/tutorial-backup-windows-server-to-azure/mars-schedule-backup.png)
8888

8989
3. Select **Next** to go to the **Select Items to Back up** pane.
9090

articles/container-apps/migrate-functions.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ services: container-apps
66
author: craigshoemaker
77
ms.service: azure-container-apps
88
ms.topic: how-to
9-
ms.date: 11/17/2025
9+
ms.date: 12/01/2025
1010
ms.author: cshoe
1111
---
1212

@@ -190,10 +190,10 @@ Before migrating:
190190
191191
Improve reliability after migration:
192192
193-
- Add alert rules: /azure/container-apps/monitor
194-
- Tune autoscale: /azure/container-apps/scale-apps
195-
- Enforce managed identity usage: /azure/container-apps/managed-identity
196-
- Centralize secrets: /azure/container-apps/manage-secrets
193+
- [Add alert rules](alerts.md)
194+
- [Tune autoscale](scale-app.md)
195+
- [Enforce managed identity usage](managed-identity.md)
196+
- [Centralize secrets](manage-secrets.md)
197197
198198
## Related content
199199

0 commit comments

Comments
 (0)