Skip to content

Commit b52967e

Browse files
authored
Add CorrelationId to AssertionRequestOptions for FIC (#5937)
* init * fix
1 parent 3e3cb52 commit b52967e

16 files changed

Lines changed: 123 additions & 7 deletions

File tree

src/client/Microsoft.Identity.Client/ApiConfig/Parameters/MtlsPopParametersInitializer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ private static AssertionRequestOptions CreateAssertionRequestOptions(
124124
Claims = p.Claims,
125125
CancellationToken = ct,
126126
ClientAssertionFmiPath = p.ClientAssertionFmiPath,
127+
CorrelationId = p.CorrelationId,
127128

128129
// Best-effort context. IMPORTANT: use AbsoluteUri, not Uri.Authority (host only).
129130
TokenEndpoint = serviceBundle.Config.Authority.AuthorityInfo.CanonicalAuthority.AbsoluteUri

src/client/Microsoft.Identity.Client/AppConfig/AssertionRequestOptions.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Threading;
67

@@ -27,12 +28,14 @@ public AssertionRequestOptions()
2728
/// <param name="appConfig">The application configuration</param>
2829
/// <param name="tokenEndpoint">The token endpoint used to acquire the token</param>
2930
/// <param name="tenantId">The tenant ID from the runtime authority</param>
30-
internal AssertionRequestOptions(ApplicationConfiguration appConfig, string tokenEndpoint, string tenantId)
31+
/// <param name="correlationId">The correlation ID from the authentication request</param>
32+
internal AssertionRequestOptions(ApplicationConfiguration appConfig, string tokenEndpoint, string tenantId, Guid correlationId = default)
3133
{
3234
ClientID = appConfig.ClientId;
3335
TokenEndpoint = tokenEndpoint;
3436
Authority = appConfig.Authority?.AuthorityInfo?.CanonicalAuthority?.ToString();
3537
TenantId = tenantId;
38+
CorrelationId = correlationId;
3639
}
3740

3841
/// <summary>
@@ -76,5 +79,11 @@ internal AssertionRequestOptions(ApplicationConfiguration appConfig, string toke
7679
/// FMI path to be used for client assertion. Tokens are associated with this path in the cache.
7780
/// </summary>
7881
public string ClientAssertionFmiPath { get; set; }
82+
83+
/// <summary>
84+
/// Correlation ID of the authentication request. Use this to propagate the same correlation ID
85+
/// to downstream token requests (e.g., Managed Identity) for coherent end-to-end tracing.
86+
/// </summary>
87+
public Guid CorrelationId { get; set; }
7988
}
8089
}

src/client/Microsoft.Identity.Client/Internal/ClientCredential/CertificateAndClaimsClientCredential.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ private async Task<X509Certificate2> ResolveCertificateAsync(
142142
var options = new AssertionRequestOptions(
143143
requestParameters.AppConfig,
144144
tokenEndpoint,
145-
requestParameters.AuthorityManager.Authority.TenantId)
145+
requestParameters.AuthorityManager.Authority.TenantId,
146+
requestParameters.RequestContext.CorrelationId)
146147
{
147148
Claims = requestParameters.Claims,
148149
ClientCapabilities = requestParameters.AppConfig.ClientCapabilities,

src/client/Microsoft.Identity.Client/Internal/ClientCredential/ClientAssertionDelegateCredential.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ public async Task<ClientCredentialApplicationResult> AddConfidentialClientParame
5757
TokenEndpoint = tokenEndpoint,
5858
ClientCapabilities = p.RequestContext.ServiceBundle.Config.ClientCapabilities,
5959
Claims = p.Claims,
60-
ClientAssertionFmiPath = p.ClientAssertionFmiPath
60+
ClientAssertionFmiPath = p.ClientAssertionFmiPath,
61+
CorrelationId = p.RequestContext.CorrelationId
6162
};
6263

6364
ClientSignedAssertion resp = await GetAssertionAsync(opts, ct).ConfigureAwait(false);

src/client/Microsoft.Identity.Client/Internal/ClientCredential/ClientAssertionStringDelegateCredential.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public async Task<ClientCredentialApplicationResult> AddConfidentialClientParame
4141
TokenEndpoint = tokenEndpoint,
4242
ClientCapabilities = p.RequestContext.ServiceBundle.Config.ClientCapabilities,
4343
Claims = p.Claims,
44-
ClientAssertionFmiPath = p.ClientAssertionFmiPath
44+
ClientAssertionFmiPath = p.ClientAssertionFmiPath,
45+
CorrelationId = p.RequestContext.CorrelationId
4546
};
4647

4748
string assertion = await _provider(opts, ct).ConfigureAwait(false);

src/client/Microsoft.Identity.Client/Internal/Requests/ClientCredentialRequest.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,8 @@ private async Task<bool> InvokeOnMsalServiceFailureCallbackAsync(
251251
var options = new AssertionRequestOptions(
252252
AuthenticationRequestParameters.AppConfig,
253253
tokenEndpoint,
254-
AuthenticationRequestParameters.AuthorityManager.Authority.TenantId);
254+
AuthenticationRequestParameters.AuthorityManager.Authority.TenantId,
255+
AuthenticationRequestParameters.RequestContext.CorrelationId);
255256

256257
var executionResult = new ExecutionResult
257258
{
@@ -299,7 +300,8 @@ private async Task InvokeOnCompletionCallbackAsync(
299300
var options = new AssertionRequestOptions(
300301
AuthenticationRequestParameters.AppConfig,
301302
tokenEndpoint,
302-
AuthenticationRequestParameters.AuthorityManager.Authority.TenantId);
303+
AuthenticationRequestParameters.AuthorityManager.Authority.TenantId,
304+
AuthenticationRequestParameters.RequestContext.CorrelationId);
303305

304306
var executionResult = new ExecutionResult
305307
{
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.get -> System.Guid
2+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.set -> void
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.get -> System.Guid
2+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.set -> void
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.get -> System.Guid
2+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.set -> void
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.get -> System.Guid
2+
Microsoft.Identity.Client.AssertionRequestOptions.CorrelationId.set -> void

0 commit comments

Comments
 (0)