Skip to content

Commit c960053

Browse files
authored
Merge pull request #231384 from MicrosoftDocs/main
3/20 AM Publish
2 parents f6404bc + 8e8c221 commit c960053

File tree

88 files changed

+730
-485
lines changed

Some content is hidden

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

88 files changed

+730
-485
lines changed

articles/active-directory-b2c/faq.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ sections:
261261
262262
1. Retrieve the `RefreshToken` again.
263263
264+
- question: |
265+
I use multiple tabs in a web browser to sign in to multiple applications that I registered in the same Azure AD B2C tenant. When I try to perform a single sign out, not all of the applications are signed out. Why does this happen?
266+
answer: |
267+
Currently, Azure AD B2C doesn't support single sign out for this specific scenario. It's caused by cookie contention as all the applications operates on the same cookie simultaneously.
268+
264269
- question: |
265270
How do I report issues with Azure AD B2C?
266271
answer: |

articles/active-directory-b2c/identity-provider-generic-openid-connect.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ Define the OpenId Connect identity provider by adding it to the **ClaimsProvider
8181
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
8282
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
8383
<OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
84+
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/>
8485
</OutputClaims>
8586
<OutputClaimsTransformations>
8687
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>

articles/active-directory/develop/msal-error-handling-js.md

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,20 @@ The following error types are available:
5454

5555
- `InteractionRequiredAuthError`: Error class, extends `ServerError` to represent server errors, which require an interactive call. This error is thrown by `acquireTokenSilent` if the user is required to interact with the server to provide credentials or consent for authentication/authorization. Error codes include `"interaction_required"`, `"login_required"`, and `"consent_required"`.
5656

57-
For error handling in authentication flows with redirect methods (`loginRedirect`, `acquireTokenRedirect`), you'll need to register the callback, which is called with success or failure after the redirect using `handleRedirectCallback()` method as follows:
57+
For error handling in authentication flows with redirect methods (`loginRedirect`, `acquireTokenRedirect`), you'll need to handle the redirect promise, which is called with success or failure after the redirect using the `handleRedirectPromise()` method as follows:
5858

5959
```javascript
60-
function authCallback(error, response) {
61-
//handle redirect response
62-
}
63-
64-
var myMSALObj = new Msal.UserAgentApplication(msalConfig);
60+
const msal = require('@azure/msal-browser');
61+
const myMSALObj = new msal.PublicClientApplication(msalConfig);
6562

6663
// Register Callbacks for redirect flow
67-
myMSALObj.handleRedirectCallback(authCallback);
64+
myMSALObj.handleRedirectPromise()
65+
.then(function (response) {
66+
//success response
67+
})
68+
.catch((error) => {
69+
console.log(error);
70+
})
6871
myMSALObj.acquireTokenRedirect(request);
6972
```
7073

@@ -97,10 +100,8 @@ myMSALObj.acquireTokenSilent(request).then(function (response) {
97100
// call API
98101
}).catch( function (error) {
99102
// call acquireTokenPopup in case of acquireTokenSilent failure
100-
// due to consent or interaction required
101-
if (error.errorCode === "consent_required"
102-
|| error.errorCode === "interaction_required"
103-
|| error.errorCode === "login_required") {
103+
// due to interaction required
104+
if (error instanceof InteractionRequiredAuthError) {
104105
myMSALObj.acquireTokenPopup(request).then(
105106
function (response) {
106107
// call API
@@ -123,10 +124,9 @@ myMSALObj.acquireTokenSilent(accessTokenRequest).then(function(accessTokenRespon
123124
}).catch(function(error) {
124125
if (error instanceof InteractionRequiredAuthError) {
125126

126-
// extract, if exists, claims from error message
127-
if (error.ErrorMessage.claims) {
128-
accessTokenRequest.claimsRequest = JSON.stringify(error.ErrorMessage.claims);
129-
}
127+
// extract, if exists, claims from the error object
128+
if (error.claims) {
129+
accessTokenRequest.claims = error.claims,
130130

131131
// call acquireTokenPopup in case of InteractionRequiredAuthError failure
132132
myMSALObj.acquireTokenPopup(accessTokenRequest).then(function(accessTokenResponse) {
@@ -140,13 +140,12 @@ myMSALObj.acquireTokenSilent(accessTokenRequest).then(function(accessTokenRespon
140140
141141
Interactively acquiring the token prompts the user and gives them the opportunity to satisfy the required Conditional Access policy.
142142
143-
When calling an API requiring Conditional Access, you can receive a claims challenge in the error from the API. In this case, you can pass the claims returned in the error to the `claimsRequest` field of the `AuthenticationParameters.ts` class to satisfy the appropriate policy.
144-
145-
See [Requesting Additional Claims](active-directory-optional-claims.md) for more detail.
143+
When calling an API requiring Conditional Access, you can receive a claims challenge in the error from the API. In this case, you can pass the claims returned in the error to the `claims` parameter in the [access token request object](https://learn.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) to satisfy the appropriate policy.
146144
145+
See [How to use Continuous Access Evaluation enabled APIs in your applications](./app-resilience-continuous-access-evaluation.md) for more detail.
147146
148147
[!INCLUDE [Active directory error handling retries](../../../includes/active-directory-develop-error-handling-retries.md)]
149148
150149
## Next steps
151150
152-
Consider enabling [Logging in MSAL.js](msal-logging-js.md) to help you diagnose and debug issues.
151+
Consider enabling [Logging in MSAL.js](msal-logging-js.md) to help you diagnose and debug issues

articles/active-directory/hybrid/reference-connect-version-history.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ Required permissions | For permissions required to apply an update, see [Azure A
4747
>
4848
> The following versions will retire on 15 March 2023:
4949
>
50-
> - 2.0.91.0
5150
> - 2.0.89.0
5251
> - 2.0.88.0
5352
> - 2.0.28.0

articles/active-directory/saas-apps/servicenow-provisioning-tutorial.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ title: Configure ServiceNow for automatic user provisioning with Azure Active Di
33
description: Learn how to automatically provision and deprovision user accounts from Azure AD to ServiceNow.
44
services: active-directory
55
author: twimmers
6-
manager: CelesteDG
7-
ms.reviewer: celested
6+
writer: twimmers
7+
manager: beatrizd
8+
ms.assetid: 5f03d8b7-c3a0-443e-91af-99cc3956fa18
89
ms.service: active-directory
910
ms.subservice: saas-app-tutorial
1011
ms.workload: identity
11-
ms.topic: how-to
12+
ms.topic: tutorial
1213
ms.date: 3/10/2023
1314
ms.author: thwimmer
1415
---
@@ -87,13 +88,13 @@ To configure automatic user provisioning for ServiceNow in Azure AD:
8788
1. Set **Provisioning Mode** to **Automatic**.
8889

8990
1. In the **Admin Credentials** section, enter your ServiceNow tenant URL, Client ID, Client Secret and Authorization Endpoint. Select **Test Connection** to ensure that Azure AD can connect to ServiceNow. [This ServiceNow documentation](https://docs.servicenow.com/bundle/utah-platform-security/page/administer/security/task/t_CreateEndpointforExternalClients.html) outlines how to generate these values.
91+
![Screenshot that shows the Service Provisioning page, where you can enter admin credentials.](./media/servicenow-provisioning-tutorial/servicenow-provisioning.png)
9092

91-
- Tenant URL: https://**InsertInstanceName**.service-now.com/api/now/scim
92-
- Authorization Endpoint: https://**InsertInstanceName**.service-now.com/oauth_auth.do?response_type=code&client_id=**InsertClientID**&state=1&scope=useraccount&redirect_uri=https%3A%2F%2Fportal.azure.com%2FTokenAuthorize
93-
- Token Endoint: https://**InsertInstanceName**.service-now.com/api/now/scim
94-
95-
![Screenshot that shows the Service Provisioning page, where you can enter admin credentials.](./media/servicenow-provisioning-tutorial/servicenow-provisioning.png)
96-
93+
> [!NOTE]
94+
> - Tenant URL: https://**InsertInstanceName**.service-now.com/api/now/scim
95+
> - Authorization Endpoint: https://**InsertInstanceName**.service-now.com/oauth_auth.do?response_type=code&client_id=**InsertClientID**&state=1&scope=useraccount&redirect_uri=https%3A%2F%2Fportal.azure.com%2FTokenAuthorize
96+
> - Token Endoint: https://**InsertInstanceName**.service-now.com/api/now/scim
97+
9798
1. In the **Notification Email** box, enter the email address of a person or group that should receive the provisioning error notifications. Then select the **Send an email notification when a failure occurs** check box.
9899

99100
1. Select **Save**.

articles/aks/learn/quick-kubernetes-deploy-portal.md

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,15 @@ This quickstart assumes a basic understanding of Kubernetes concepts. For more i
3030
## Create an AKS cluster
3131

3232
1. Sign in to the [Azure portal](https://portal.azure.com).
33-
34-
2. On the Azure portal menu or from the **Home** page, select **Create a resource**.
35-
36-
3. Select **Containers** > **Kubernetes Service**.
37-
38-
4. On the **Basics** page, configure the following options:
33+
1. On the Azure portal menu or from the **Home** page, select **Create a resource**.
34+
1. Select **Containers** > **Kubernetes Service**.
35+
1. On the **Basics** page, configure the following options:
3936

4037
- **Project details**:
4138
* Select an Azure **Subscription**.
4239
* Select or create an Azure **Resource group**, such as *myResourceGroup*.
4340
- **Cluster details**:
44-
* Ensure the the **Preset configuration** is *Standard ($$)*. For more details on preset configurations, see [Cluster configuration presets in the Azure portal][preset-config].
41+
* Ensure the **Preset configuration** is *Standard ($$)*. For more details on preset configurations, see [Cluster configuration presets in the Azure portal][preset-config].
4542
* Enter a **Kubernetes cluster name**, such as *myAKSCluster*.
4643
* Select a **Region** for the AKS cluster, and leave the default value selected for **Kubernetes version**.
4744
* Select **99.5%** for **API server availability**.
@@ -54,20 +51,20 @@ This quickstart assumes a basic understanding of Kubernetes concepts. For more i
5451
> You can change the preset configuration when creating your cluster by selecting *Learn more and compare presets* and choosing a different option.
5552
> :::image type="content" source="media/quick-kubernetes-deploy-portal/cluster-preset-options.png" alt-text="Screenshot of Create AKS cluster - portal preset options.":::
5653
57-
5. Select **Next: Node pools** when complete.
58-
59-
6. Keep the default **Node pools** options. At the bottom of the screen, click **Next: Access**.
60-
61-
7. On the **Access** page, configure the following options:
54+
1. Select **Next: Node pools** when complete.
55+
1. Keep the default **Node pools** options. At the bottom of the screen, click **Next: Access**.
56+
1. On the **Access** page, configure the following options:
6257

6358
- The default value for **Resource identity** is **System-assigned managed identity**. Managed identities provide an identity for applications to use when connecting to resources that support Azure Active Directory (Azure AD) authentication. For more details about managed identities, see [What are managed identities for Azure resources?](../../active-directory/managed-identities-azure-resources/overview.md).
6459
- The Kubernetes role-based access control (RBAC) option is the default value to provide more fine-grained control over access to the Kubernetes resources deployed in your AKS cluster.
6560

6661
By default, *Basic* networking is used, and [Container insights](../../azure-monitor/containers/container-insights-overview.md) is enabled.
6762

68-
8. Click **Review + create**. When you navigate to the **Review + create** tab, Azure runs validation on the settings that you have chosen. If validation passes, you can proceed to create the AKS cluster by selecting **Create**. If validation fails, then it indicates which settings need to be modified.
69-
70-
9. It takes a few minutes to create the AKS cluster. When your deployment is complete, navigate to your resource by either:
63+
1. Select **Next: Networking** when complete.
64+
1. Keep the default **Networking** options. At the bottom of the screen, click **Next: Integrations**.
65+
1. On the **Integrations** page, if you want to enable the [recommended out-of-the-box alerts](../../azure-monitor/alerts/alerts-overview.md#recommended-alert-rules) for AKS clusters, select **Enable recommended alert rules**. You can see the list of alerts that are automatically enabled if you select this option.
66+
1. Click **Review + create**. When you navigate to the **Review + create** tab, Azure runs validation on the settings that you have chosen. If validation passes, you can proceed to create the AKS cluster by selecting **Create**. If validation fails, then it indicates which settings need to be modified.
67+
1. It takes a few minutes to create the AKS cluster. When your deployment is complete, navigate to your resource by either:
7168
* Selecting **Go to resource**, or
7269
* Browsing to the AKS cluster resource group and selecting the AKS resource. In this example you browse for *myResourceGroup* and select the resource *myAKSCluster*.
7370

articles/azure-functions/configure-monitoring.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ Function apps are an essential part of solutions that can cause high volumes of
307307

308308
The generated telemetry can be consumed in real-time dashboards, alerting, detailed diagnostics, and so on. Depending on how the generated telemetry is going to be consumed, you'll need to define a strategy to reduce the volume of data generated. This strategy will allow you to properly monitor, operate, and diagnose your function apps in production. You can consider the following options:
309309

310-
+ **Use sampling**: As mentioned [earlier](#configure-sampling), it will help to dramatically reduce the volume of telemetry events ingested while maintaining a statistically correct analysis. It could happen that even using sampling you still a get high volume of telemetry. Inspect the options that [adaptive sampling](../azure-monitor/app/sampling.md#configuring-adaptive-sampling-for-aspnet-applications) provides to you. For example, set the `maxTelemetryItemsPerSecond` to a value that balances the volume generated with your monitoring needs. Keep in mind that the telemetry sampling is applied per host executing your function app.
310+
+ **Use sampling**: As mentioned [earlier](#configure-sampling), it will help to dramatically reduce the volume of telemetry events ingested while maintaining a statistically correct analysis. It could happen that even using sampling you still get a high volume of telemetry. Inspect the options that [adaptive sampling](../azure-monitor/app/sampling.md#configuring-adaptive-sampling-for-aspnet-applications) provides to you. For example, set the `maxTelemetryItemsPerSecond` to a value that balances the volume generated with your monitoring needs. Keep in mind that the telemetry sampling is applied per host executing your function app.
311311

312312
+ **Default log level**: Use `Warning` or `Error` as the default value for all telemetry categories. Now, you can decide which [categories](#configure-categories) you want to set at `Information` level so that you can monitor and diagnose your functions properly.
313313

articles/azure-functions/dotnet-isolated-process-guide.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ A function can have zero or more input bindings that can pass data to a function
196196

197197
### Output bindings
198198

199-
To write to an output binding, you must apply an output binding attribute to the function method, which defined how to write to the bound service. The value returned by the method is written to the output binding. For example, the following example writes a string value to a message queue named `myqueue-output` by using an output binding:
199+
To write to an output binding, you must apply an output binding attribute to the function method, which defined how to write to the bound service. The value returned by the method is written to the output binding. For example, the following example writes a string value to a message queue named `output-queue` by using an output binding:
200200

201201
:::code language="csharp" source="~/azure-functions-dotnet-worker/samples/Extensions/Queue/QueueFunction.cs" id="docsnippet_queue_output_binding" :::
202202

articles/azure-functions/functions-app-settings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ Specifies the repository or provider to use for key storage. Keys are always enc
253253
|AzureWebJobsSecretStorageType|`blob`|Keys are stored in a Blob storage container in the account provided by the `AzureWebJobsStorage` setting. Blob storage is the default behavior when `AzureWebJobsSecretStorageType` isn't set.<br/>To specify a different storage account, use the `AzureWebJobsSecretStorageSas` setting to indicate the SAS URL of a second storage account. |
254254
|AzureWebJobsSecretStorageType | `files` | Keys are persisted on the file system. This is the default behavior for Functions v1.x.|
255255
|AzureWebJobsSecretStorageType |`keyvault` | Keys are stored in a key vault instance set by `AzureWebJobsSecretStorageKeyVaultName`. |
256-
|Kubernetes Secrets | `kubernetes` | Supported only when running the Functions runtime in Kubernetes. When `AzureWebJobsKubernetesSecretName` isn't set, the repository is considered read-only. In this case, the values must be generated before deployment. The [Azure Functions Core Tools](functions-run-local.md) generates the values automatically when deploying to Kubernetes.|
256+
|AzureWebJobsSecretStorageType | `kubernetes` | Supported only when running the Functions runtime in Kubernetes. When `AzureWebJobsKubernetesSecretName` isn't set, the repository is considered read-only. In this case, the values must be generated before deployment. The [Azure Functions Core Tools](functions-run-local.md) generates the values automatically when deploying to Kubernetes.|
257257

258258
To learn more, see [Secret repositories](security-concepts.md#secret-repositories).
259259

articles/azure-functions/functions-bindings-event-hubs-output.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,23 @@ The following example shows how to use the `IAsyncCollector` interface to send a
4242
[FunctionName("EH2EH")]
4343
public static async Task Run(
4444
[EventHubTrigger("source", Connection = "EventHubConnectionAppSetting")] EventData[] events,
45-
[EventHub("dest", Connection = "EventHubConnectionAppSetting")]IAsyncCollector<string> outputEvents,
45+
[EventHub("dest", Connection = "EventHubConnectionAppSetting")]IAsyncCollector<EventData> outputEvents,
4646
ILogger log)
4747
{
4848
foreach (EventData eventData in events)
4949
{
50-
// do some processing:
51-
var myProcessedEvent = DoSomething(eventData);
52-
53-
// then send the message
54-
await outputEvents.AddAsync(JsonConvert.SerializeObject(myProcessedEvent));
50+
// Do some processing:
51+
string newEventBody = DoSomething(eventData);
52+
53+
// Queue the message to be sent in the background by adding it to the collector.
54+
// If only the event is passed, an Event Hub partition to be be assigned via
55+
// round-robin for each batch.
56+
await outputEvents.AddAsync(new EventData(newEventBody));
57+
58+
// If your scenario requires that certain events are grouped together in an
59+
// Event Hub partition, you can specify a partition key. Events added with
60+
// the same key will always be assigned to the same partition.
61+
await outputEvents.AddAsync(new EventData(newEventBody), "sample-key");
5562
}
5663
}
5764
```
@@ -311,7 +318,7 @@ In-process C# class library functions supports the following types:
311318

312319
This version of [EventData](/dotnet/api/azure.messaging.eventhubs.eventdata) drops support for the legacy `Body` type in favor of [EventBody](/dotnet/api/azure.messaging.eventhubs.eventdata.eventbody).
313320

314-
Send messages by using a method parameter such as `out string paramName`. To write multiple messages, you can use `ICollector<string>` or `IAsyncCollector<string>` in place of `out string`.
321+
Send messages by using a method parameter such as `out string paramName`. To write multiple messages, you can use `ICollector<EventData>` or `IAsyncCollector<EventData>` in place of `out string`. Partition keys may only be used with `IAsyncCollector<EventData>`.
315322

316323
# [Extension v3.x+](#tab/extensionv3/in-process)
317324

0 commit comments

Comments
 (0)