Skip to content

Commit a8d8df1

Browse files
authored
Merge pull request #28378 from microsoftgraph/diadabal-ops-ga
Promote OnPasswordSubmit event to v1.0
2 parents 0764425 + ceb8575 commit a8d8df1

16 files changed

Lines changed: 446 additions & 7 deletions

api-reference/v1.0/api/authenticationeventlistener-delete.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Delete an [authenticationEventListener](../resources/authenticationeventlistener
2222
- [onAttributeCollectionSubmitListener](../resources/onattributecollectionsubmitlistener.md) resource type
2323
- [onEmailOtpSendListener](../resources/onemailotpsendlistener.md) resource type
2424
- [onFraudProtectionLoadStartListener](../resources/onfraudprotectionloadstartlistener.md) resource type
25+
- [onPasswordSubmitListener](../resources/onpasswordsubmitlistener.md) resource type
2526

2627
[!INCLUDE [national-cloud-support](../../includes/global-us.md)]
2728

api-reference/v1.0/api/authenticationeventlistener-get.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Read the properties and relationships of an [authenticationEventListener](../res
2222
- [onAttributeCollectionSubmitListener](../resources/onattributecollectionsubmitlistener.md) resource type
2323
- [onEmailOtpSendListener](../resources/onemailotpsendlistener.md) resource type
2424
- [onFraudProtectionLoadStartListener](../resources/onfraudprotectionloadstartlistener.md) resource type
25+
- [onPasswordSubmitListener](../resources/onpasswordsubmitlistener.md) resource type
2526

2627
[!INCLUDE [national-cloud-support](../../includes/global-us.md)]
2728

api-reference/v1.0/api/authenticationeventlistener-update.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Update the properties of an [authenticationEventListener](../resources/authentic
2222
- [onAttributeCollectionSubmitListener](../resources/onattributecollectionsubmitlistener.md) resource type
2323
- [onEmailOtpSendListener](../resources/onemailotpsendlistener.md) resource type
2424
- [onFraudProtectionLoadStartListener](../resources/onfraudprotectionloadstartlistener.md) resource type
25+
- [onPasswordSubmitListener](../resources/onpasswordsubmitlistener.md) resource type
2526

2627
[!INCLUDE [national-cloud-support](../../includes/global-us.md)]
2728

@@ -58,8 +59,7 @@ You must specify the **@odata.type** property and the value of the [authenticati
5859
|:---|:---|:---|
5960
|conditions|[authenticationConditions](../resources/authenticationconditions.md)|The conditions on which this authenticationEventListener should trigger. Optional.|
6061
|displayName|String|The display name of the authentication event listener policy. Optional.|
61-
|handler|[onTokenIssuanceStartHandler](../resources/ontokenissuancestarthandler.md) &#124; [onFraudProtectionLoadStartHandler](../resources/onfraudprotectionloadstarthandler.md)|The handler to invoke when conditions are met. The type of handler depends on the listener type:<br/>- For **onTokenIssuanceStartListener**, use [onTokenIssuanceStartHandler](../resources/ontokenissuancestarthandler.md).<br/>- For **onFraudProtectionLoadStartListener**, use [onFraudProtectionLoadStartHandler](../resources/onfraudprotectionloadstarthandler.md).|
62-
62+
|handler|[onTokenIssuanceStartHandler](../resources/ontokenissuancestarthandler.md) or [onFraudProtectionLoadStartHandler](../resources/onfraudprotectionloadstarthandler.md) or [onPasswordSubmitHandler](../resources/onpasswordsubmithandler.md)|The handler to invoke when conditions are met. For **onTokenIssuanceStartListener**, set to [onTokenIssuanceStartHandler](../resources/ontokenissuancestarthandler.md). For **onFraudProtectionLoadStartListener**, set to [onFraudProtectionLoadStartHandler](../resources/onfraudprotectionloadstarthandler.md). For **onPasswordSubmitListener**, set to [onPasswordSubmitHandler](../resources/onpasswordsubmithandler.md).|
6363
## Response
6464

6565
If successful, this method returns a `204 No Content` response code.
@@ -77,7 +77,7 @@ The following example shows a request to update an authentication event listener
7777
"name": "update_authenticationeventlistener"
7878
}
7979
-->
80-
``` http
80+
```msgraph-interactive
8181
PATCH https://graph.microsoft.com/v1.0/identity/authenticationEventListeners/990d94e5-cc8f-4c4b-97b4-27e2678aac28
8282
Content-Type: application/json
8383
@@ -147,7 +147,7 @@ The following example shows a request to add an application to an authentication
147147
"name": "update_authenticationeventlistener_2"
148148
}
149149
-->
150-
``` http
150+
```msgraph-interactive
151151
POST https://graph.microsoft.com/v1.0/identity/authenticationEventListeners/0313cc37-d421-421d-857b-87804d61e33e/conditions/applications/includeApplications
152152
Content-Type: application/json
153153

api-reference/v1.0/api/identitycontainer-list-authenticationeventlisteners.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Get a list of the [authenticationEventListener](../resources/authenticationevent
2222
- [onAttributeCollectionSubmitListener](../resources/onattributecollectionsubmitlistener.md)
2323
- [onEmailOtpSendListener](../resources/onemailotpsendlistener.md)
2424
- [onFraudProtectionLoadStartListener](../resources/onfraudprotectionloadstartlistener.md)
25+
- [onPasswordSubmitListener](../resources/onpasswordsubmitlistener.md)
2526

2627
[!INCLUDE [national-cloud-support](../../includes/global-us.md)]
2728

api-reference/v1.0/api/identitycontainer-post-authenticationeventlisteners.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Create a new [authenticationEventListener](../resources/authenticationeventliste
2222
- [onAttributeCollectionSubmitListener](../resources/onattributecollectionsubmitlistener.md)
2323
- [onEmailOtpSendListener](../resources/onemailotpsendlistener.md)
2424
- [onFraudProtectionLoadStartListener](../resources/onfraudprotectionloadstartlistener.md) resource type
25+
- [onPasswordSubmitListener](../resources/onpasswordsubmitlistener.md) resource type
2526

2627
[!INCLUDE [national-cloud-support](../../includes/global-us.md)]
2728

@@ -59,6 +60,7 @@ You can specify the following properties when creating an **authenticationEventL
5960
|conditions|[authenticationConditions](../resources/authenticationconditions.md)|The conditions on which this authenticationEventListener should trigger. Optional.|
6061
|displayName|String|The display name of the authentication event listener policy. Optional.|
6162
|handler|[onTokenIssuanceStartHandler](../resources/ontokenissuancestarthandler.md) or [onFraudProtectionLoadStartHandler](../resources/onfraudprotectionloadstarthandler.md)|The handler to invoke when conditions are met. For **onTokenIssuanceStartListener**, set to [onTokenIssuanceStartHandler](../resources/ontokenissuancestarthandler.md). For **onFraudProtectionLoadStartListener**, set to [onFraudProtectionLoadStartHandler](../resources/onfraudprotectionloadstarthandler.md).|
63+
|handler|[onPasswordSubmitHandler](../resources/onpasswordsubmithandler.md)|The handler to invoke when conditions are met. Can be set for the **onPasswordSubmitListener** listener type.|
6264

6365
## Response
6466

@@ -385,3 +387,79 @@ Content-Type: application/json
385387
}
386388
}
387389
```
390+
391+
### Example 4: Create an onPasswordSubmitListener object
392+
393+
#### Request
394+
395+
The following example shows a request.
396+
397+
<!-- {
398+
"blockType": "request",
399+
"name": "create_authenticationeventlistener_onpasswordsubmitlistener"
400+
}
401+
-->
402+
```msgraph-interactive
403+
POST https://graph.microsoft.com/v1.0/identity/authenticationEventListeners
404+
Content-Type: application/json
405+
406+
{
407+
"@odata.type": "#microsoft.graph.onPasswordSubmitListener",
408+
"displayName": "JIT migration listener",
409+
"conditions": {
410+
"applications": {
411+
"includeAllApplications": false,
412+
"includeApplications": [
413+
{
414+
"appId": "00011111-aaaa-2222-bbbb-3333cccc4444"
415+
}
416+
]
417+
}
418+
},
419+
"handler": {
420+
"@odata.type": "#microsoft.graph.onPasswordMigrationCustomExtensionHandler",
421+
"migrationPropertyId": "extension_b7b1c57b532f40b8b5ed4b7a7ba67401_requiresMigration",
422+
"customExtension": {
423+
"id": "6fc5012e-7665-43d6-9708-4370863f4e6e"
424+
}
425+
}
426+
}
427+
```
428+
429+
#### Response
430+
431+
The following example shows the response.
432+
>**Note:** The response object shown here might be shortened for readability.
433+
<!-- {
434+
"blockType": "response",
435+
"truncated": true,
436+
"@odata.type": "microsoft.graph.authenticationEventListener"
437+
}
438+
-->
439+
``` http
440+
HTTP/1.1 201 Created
441+
Content-Type: application/json
442+
443+
{
444+
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identity/authenticationEventListeners/$entity",
445+
"@odata.type": "#microsoft.graph.onPasswordSubmitListener",
446+
"id": "4a6cb5f0-1234-5678-abcd-ef9012345678",
447+
"displayName": "JIT migration listener",
448+
"authenticationEventsFlowId": null,
449+
"conditions": {
450+
"applications": {
451+
"includeAllApplications": false,
452+
"includeApplications": [
453+
{
454+
"appId": "00011111-aaaa-2222-bbbb-3333cccc4444"
455+
}
456+
]
457+
}
458+
},
459+
"handler": {
460+
"@odata.type": "#microsoft.graph.onPasswordMigrationCustomExtensionHandler",
461+
"migrationPropertyId": "extension_b7b1c57b532f40b8b5ed4b7a7ba67401_requiresMigration",
462+
"configuration": null
463+
}
464+
}
465+
```

api-reference/v1.0/api/identitycontainer-post-customauthenticationextensions.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Create a new [customAuthenticationExtension](../resources/customauthenticationex
1818
- [onAttributeCollectionStartCustomExtension](../resources/onattributecollectionstartcustomextension.md) resource type.
1919
- [onAttributeCollectionSubmitCustomExtension](../resources/onattributecollectionsubmitcustomextension.md) resource type.
2020
- [onOtpSendCustomExtension](../resources/onOtpSendCustomExtension.md) resource type.
21+
- [onPasswordSubmitCustomExtension](../resources/onpasswordsubmitcustomextension.md) resource type.
2122

2223
> [!NOTE]
2324
>
@@ -501,3 +502,74 @@ Content-Type: application/json
501502
}
502503
```
503504

505+
506+
507+
### Example 5: Create an onPasswordSubmitCustomExtension object
508+
509+
#### Request
510+
511+
The following example shows a request.
512+
513+
<!-- {
514+
"blockType": "request",
515+
"name": "create_customauthenticationextension_onpasswordsubmitcustomextension"
516+
}
517+
-->
518+
```msgraph-interactive
519+
POST https://graph.microsoft.com/v1.0/identity/customAuthenticationExtensions
520+
Content-Type: application/json
521+
522+
{
523+
"@odata.type": "#microsoft.graph.onPasswordSubmitCustomExtension",
524+
"displayName": "Legacy password validator",
525+
"description": "Validates passwords against a legacy authentication system for JIT migration",
526+
"endpointConfiguration": {
527+
"@odata.type": "#microsoft.graph.httpRequestEndpoint",
528+
"targetUrl": "https://api.contoso.com/passwordvalidation"
529+
},
530+
"authenticationConfiguration": {
531+
"@odata.type": "#microsoft.graph.azureAdTokenAuthentication",
532+
"resourceId": "api://api.contoso.com/passwordvalidation"
533+
},
534+
"clientConfiguration": {
535+
"timeoutInMilliseconds": 2000,
536+
"maximumRetries": 1
537+
}
538+
}
539+
```
540+
541+
#### Response
542+
543+
The following example shows the response.
544+
>**Note:** The response object shown here might be shortened for readability.
545+
<!-- {
546+
"blockType": "response",
547+
"truncated": true,
548+
"@odata.type": "microsoft.graph.customAuthenticationExtension"
549+
}
550+
-->
551+
``` http
552+
HTTP/1.1 201 Created
553+
Content-Type: application/json
554+
555+
{
556+
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identity/customAuthenticationExtensions/$entity",
557+
"@odata.type": "#microsoft.graph.onPasswordSubmitCustomExtension",
558+
"id": "6fc5012e-7665-43d6-9708-4370863f4e6e",
559+
"displayName": "Legacy password validator",
560+
"description": "Validates passwords against a legacy authentication system for JIT migration",
561+
"behaviorOnError": null,
562+
"authenticationConfiguration": {
563+
"@odata.type": "#microsoft.graph.azureAdTokenAuthentication",
564+
"resourceId": "api://api.contoso.com/passwordvalidation"
565+
},
566+
"clientConfiguration": {
567+
"timeoutInMilliseconds": 2000,
568+
"maximumRetries": 1
569+
},
570+
"endpointConfiguration": {
571+
"@odata.type": "#microsoft.graph.httpRequestEndpoint",
572+
"targetUrl": "https://api.contoso.com/passwordvalidation"
573+
}
574+
}
575+
```

api-reference/v1.0/resources/authenticationeventlistener.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ To customize the authentication process, listeners can be registered which speci
2323
- [onAttributeCollectionSubmitListener](../resources/onattributecollectionsubmitlistener.md) resource type
2424
- [onEmailOtpSendListener](../resources/onemailotpsendlistener.md) resource type
2525
- [onFraudProtectionLoadStartListener](../resources/onfraudprotectionloadstartlistener.md) resource type
26+
- [onPasswordSubmitListener](../resources/onpasswordsubmitlistener.md) resource type
2627

2728
> [!NOTE]
2829
>

api-reference/v1.0/resources/customauthenticationextension.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Custom authentication extensions define interactions with external systems durin
1818
- [onAttributeCollectionStartCustomExtension](../resources/onattributecollectionstartcustomextension.md) resource type.
1919
- [onAttributeCollectionSubmitCustomExtension](../resources/onattributecollectionsubmitcustomextension.md) resource type.
2020
- [onOtpSendCustomExtension](../resources/onotpsendcustomextension.md) resource type.
21+
- [onPasswordSubmitCustomExtension](../resources/onpasswordsubmitcustomextension.md) resource type.
2122

2223
Inherits from [customCalloutExtension](../resources/customcalloutextension.md).
2324

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: "onPasswordMigrationCustomExtensionHandler resource type"
3+
description: "Represents a handler that invokes a custom authentication extension for password validation during Just-In-Time user migration."
4+
author: "diadabal"
5+
ms.date: 03/05/2026
6+
ms.localizationpriority: medium
7+
ms.subservice: "entra-sign-in"
8+
doc_type: resourcePageType
9+
---
10+
11+
# onPasswordMigrationCustomExtensionHandler resource type
12+
13+
Namespace: microsoft.graph
14+
15+
Represents a handler that invokes a custom authentication extension API to validate user credentials against a legacy authentication system during the sign-in process. This handler enables Just-In-Time (JIT) migration scenarios where passwords can't be exported from the legacy system.
16+
17+
When triggered, this handler:
18+
1. Checks if the user requires migration based on the specified **migrationPropertyI** custom attribute
19+
2. If migration is needed, calls the configured custom extension API with the user's credentials
20+
3. Upon successful validation, persists the credentials in Microsoft Entra ID and updates the migration status
21+
22+
Inherits from [onPasswordSubmitHandler](../resources/onpasswordsubmithandler.md).
23+
24+
## Properties
25+
|Property|Type|Description|
26+
|:---|:---|:---|
27+
|configuration|[customExtensionOverwriteConfiguration](../resources/customextensionoverwriteconfiguration.md)|Configuration that overrides the default settings from the referenced custom extension, such as timeout and retry values. Optional.|
28+
|migrationPropertyId|String|The name of the custom extension attribute that indicates whether a user requires migration. This property must reference a valid custom attribute on the user object (for example, `extension_<appId>_requiresMigration`). Required.|
29+
30+
## Relationships
31+
|Relationship|Type|Description|
32+
|:---|:---|:---|
33+
|customExtension|[onPasswordSubmitCustomExtension](../resources/onpasswordsubmitcustomextension.md)|Reference to the custom authentication extension that will be invoked to validate the user's password against the legacy system.|
34+
35+
## JSON representation
36+
The following JSON representation shows the resource type.
37+
<!-- {
38+
"blockType": "resource",
39+
"@odata.type": "microsoft.graph.onPasswordMigrationCustomExtensionHandler"
40+
}
41+
-->
42+
``` json
43+
{
44+
"@odata.type": "#microsoft.graph.onPasswordMigrationCustomExtensionHandler",
45+
"configuration": {
46+
"@odata.type": "microsoft.graph.customExtensionOverwriteConfiguration"
47+
},
48+
"migrationPropertyId": "String"
49+
}
50+
```
51+
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
---
2+
title: "onPasswordSubmitCustomExtension resource type"
3+
description: "Represents a custom authentication extension for the onPasswordSubmit event, used for Just-In-Time migration from legacy authentication providers."
4+
author: "diadabal"
5+
ms.date: 03/05/2026
6+
ms.localizationpriority: medium
7+
ms.subservice: "entra-sign-in"
8+
doc_type: resourcePageType
9+
---
10+
11+
# onPasswordSubmitCustomExtension resource type
12+
13+
Namespace: microsoft.graph
14+
15+
Represents a custom authentication extension for the **onPasswordSubmit** event. This extension enables organizations to validate user credentials against legacy authentication systems during the sign-in process, facilitating Just-In-Time (JIT) migration scenarios where passwords can't be exported from the legacy system.
16+
17+
When a user attempts to sign in, this extension calls a customer-provided API endpoint to validate the password against the legacy system. Upon successful validation, the user's credentials are persisted in Microsoft Entra ID, completing the migration for that user.
18+
19+
Inherits from [customAuthenticationExtension](../resources/customauthenticationextension.md).
20+
21+
## Methods
22+
None.
23+
24+
For the list of API operations for managing this resource type, see the [customAuthenticationExtension](../resources/customauthenticationextension.md) resource type.
25+
26+
## Properties
27+
|Property|Type|Description|
28+
|:---|:---|:---|
29+
|authenticationConfiguration|[customExtensionAuthenticationConfiguration](../resources/customextensionauthenticationconfiguration.md)|Configuration for securing the API call to the external system. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
30+
|behaviorOnError|[customExtensionBehaviorOnError](../resources/customextensionbehavioronerror.md)|Error handling behavior if the external API fails or is unreachable. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
31+
|clientConfiguration|[customExtensionClientConfiguration](../resources/customextensionclientconfiguration.md)|HTTP client configuration including timeout and retry settings. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
32+
|description|String|Description of the custom authentication extension. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
33+
|displayName|String|Display name for the custom authentication extension. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
34+
|endpointConfiguration|[customExtensionEndpointConfiguration](../resources/customextensionendpointconfiguration.md)|HTTP endpoint configuration for the external API. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
35+
|id|String|Unique identifier for the custom authentication extension. Inherited from [customAuthenticationExtension](../resources/customauthenticationextension.md).|
36+
37+
## Relationships
38+
None.
39+
40+
## JSON representation
41+
The following JSON representation shows the resource type.
42+
<!-- {
43+
"blockType": "resource",
44+
"keyProperty": "id",
45+
"@odata.type": "microsoft.graph.onPasswordSubmitCustomExtension",
46+
"baseType": "microsoft.graph.customAuthenticationExtension",
47+
"openType": false
48+
}
49+
-->
50+
``` json
51+
{
52+
"@odata.type": "#microsoft.graph.onPasswordSubmitCustomExtension",
53+
"id": "String (identifier)",
54+
"displayName": "String",
55+
"description": "String",
56+
"endpointConfiguration": {
57+
"@odata.type": "microsoft.graph.httpRequestEndpoint",
58+
"targetUrl": "String"
59+
},
60+
"authenticationConfiguration": {
61+
"@odata.type": "microsoft.graph.azureAdTokenAuthentication",
62+
"resourceId": "String"
63+
},
64+
"clientConfiguration": {
65+
"@odata.type": "microsoft.graph.customExtensionClientConfiguration"
66+
},
67+
"behaviorOnError": {
68+
"@odata.type": "microsoft.graph.customExtensionBehaviorOnError"
69+
}
70+
}
71+
```
72+

0 commit comments

Comments
 (0)