Skip to content

Commit f6aaf7f

Browse files
authored
[Identity] Upgrade MSAL dependencies to 4.78.0 and prepare patch for Azure.Identity (#54037)
* Update MSAL dependencies to version 4.78.0 * Revert Azure.Identity to latest release tag * Add changelog entry * Prepare release
1 parent 79b7498 commit f6aaf7f

25 files changed

+21
-1635
lines changed

eng/Packages.Data.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,9 @@
185185
<!-- Other approved packages -->
186186
<PackageReference Update="Microsoft.Azure.Amqp" Version="2.7.0" />
187187
<PackageReference Update="Microsoft.Azure.WebPubSub.Common" Version="1.5.0" />
188-
<PackageReference Update="Microsoft.Identity.Client" Version="4.76.0" />
189-
<PackageReference Update="Microsoft.Identity.Client.Extensions.Msal" Version="4.76.0" />
190-
<PackageReference Update="Microsoft.Identity.Client.Broker" Version="4.76.0" />
188+
<PackageReference Update="Microsoft.Identity.Client" Version="4.78.0" />
189+
<PackageReference Update="Microsoft.Identity.Client.Extensions.Msal" Version="4.78.0" />
190+
<PackageReference Update="Microsoft.Identity.Client.Broker" Version="4.78.0" />
191191
<PackageReference Update="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.14.0" />
192192
<PackageReference Update="Microsoft.IdentityModel.Tokens" Version="8.14.0" />
193193
<PackageReference Update="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />

sdk/identity/Azure.Identity.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Identity.Broker", "Az
1717
EndProject
1818
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Identity.Broker.Tests", "Azure.Identity.Broker\tests\Azure.Identity.Broker.Tests.csproj", "{5F72962A-E4A5-4DBD-BA00-AB5B7725CACA}"
1919
EndProject
20+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Core", "..\core\Azure.Core\src\Azure.Core.csproj", "{B8BF1ED4-DD68-4504-9060-008D1A980958}"
21+
EndProject
2022
Global
2123
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2224
Debug|Any CPU = Debug|Any CPU
@@ -51,6 +53,10 @@ Global
5153
{5F72962A-E4A5-4DBD-BA00-AB5B7725CACA}.Debug|Any CPU.Build.0 = Debug|Any CPU
5254
{5F72962A-E4A5-4DBD-BA00-AB5B7725CACA}.Release|Any CPU.ActiveCfg = Release|Any CPU
5355
{5F72962A-E4A5-4DBD-BA00-AB5B7725CACA}.Release|Any CPU.Build.0 = Release|Any CPU
56+
{B8BF1ED4-DD68-4504-9060-008D1A980958}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
57+
{B8BF1ED4-DD68-4504-9060-008D1A980958}.Debug|Any CPU.Build.0 = Debug|Any CPU
58+
{B8BF1ED4-DD68-4504-9060-008D1A980958}.Release|Any CPU.ActiveCfg = Release|Any CPU
59+
{B8BF1ED4-DD68-4504-9060-008D1A980958}.Release|Any CPU.Build.0 = Release|Any CPU
5460
EndGlobalSection
5561
GlobalSection(SolutionProperties) = preSolution
5662
HideSolutionNode = FALSE

sdk/identity/Azure.Identity/CHANGELOG.md

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
# Release History
22

3-
## 1.18.0-beta.2 (Unreleased)
4-
5-
### Features Added
6-
7-
### Breaking Changes
8-
9-
### Bugs Fixed
3+
## 1.17.1 (2025-11-18)
104

115
### Other Changes
126

7+
- Updated `Microsoft.Identity.Client` and `Microsoft.Identity.Client.Extensions.Msal` dependencies to version 4.78.0.
8+
139
## 1.18.0-beta.1 (2025-11-14)
1410

1511
### Features Added

sdk/identity/Azure.Identity/README.md

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -107,45 +107,6 @@ While `DefaultAzureCredential` is generally the quickest way to authenticate app
107107

108108
As of version 1.8.0, `ManagedIdentityCredential` supports [token caching](#token-caching).
109109

110-
## Identity binding mode (WorkloadIdentityCredential)
111-
112-
`WorkloadIdentityCredential` supports an opt-in identity binding mode to work around [Entra ID's limit on federated identity credentials (FICs)](https://learn.microsoft.com/entra/workload-id/workload-identity-federation-considerations#federated-identity-credential-considerations) per managed identity. When enabled via the `IsAzureKubernetesTokenProxyEnabled ` option, the credential redirects token requests to an AKS-provided proxy that handles the FIC exchange centrally, allowing multiple pods to share the same identity without hitting FIC limits.
113-
114-
**Note:** This feature is only available when using `WorkloadIdentityCredential` directly. It is not supported by `DefaultAzureCredential` or `ManagedIdentityCredential`.
115-
116-
### Usage
117-
118-
```C# Snippet:WorkloadIdentityCredentialWithIdentityBinding
119-
var credential = new WorkloadIdentityCredential(new WorkloadIdentityCredentialOptions
120-
{
121-
IsAzureKubernetesTokenProxyEnabled = true // Enable identity binding mode
122-
});
123-
```
124-
125-
When enabled, the credential reads these environment variables (typically configured by AKS):
126-
127-
* `AZURE_KUBERNETES_TOKEN_PROXY` - Base HTTPS URL for the proxy endpoint
128-
* `AZURE_KUBERNETES_CA_FILE` - Path to PEM bundle with proxy CA certificates
129-
* `AZURE_KUBERNETES_CA_DATA` - PEM-encoded CA bundle (mutually exclusive with `AZURE_KUBERNETES_CA_FILE `)
130-
* `AZURE_KUBERNETES_SNI_NAME` - TLS Server Name Indication (optional)
131-
132-
The credential validates the configuration at construction time and throws `InvalidOperationException` if the configuration is invalid or incomplete.
133-
134-
### Migration from ManagedIdentityCredential
135-
136-
If you're currently using `ManagedIdentityCredential` for workload identity in AKS and need to use identity binding mode, migrate to `WorkloadIdentityCredential`:
137-
138-
```C# Snippet:MigrationToWorkloadIdentityCredential
139-
// Before (no identity binding support):
140-
// var credential = new ManagedIdentityCredential(ManagedIdentityId.SystemAssigned);
141-
142-
// After (with identity binding support):
143-
var credential = new WorkloadIdentityCredential(new WorkloadIdentityCredentialOptions
144-
{
145-
IsAzureKubernetesTokenProxyEnabled = true
146-
});
147-
```
148-
149110
## Sovereign cloud configuration
150111

151112
By default, credentials authenticate to the Microsoft Entra endpoint for the Azure Public Cloud. To access resources in other clouds, such as Azure US Government or a private cloud, use one of the following solutions:
@@ -181,7 +142,7 @@ Not all credentials require this configuration. Credentials that authenticate th
181142
|-|-|-|
182143
|[`EnvironmentCredential`][ref_EnvironmentCredential]|Authenticates a service principal or user via credential information specified in [environment variables](#environment-variables).||
183144
|[`ManagedIdentityCredential`][ref_ManagedIdentityCredential]|Authenticates the managed identity of an Azure resource.|[user-assigned managed identity][uami_doc]<br>[system-assigned managed identity][sami_doc]|
184-
|[`WorkloadIdentityCredential`][ref_WorkloadIdentityCredential]|Supports [Microsoft Entra Workload ID](https://learn.microsoft.com/azure/aks/workload-identity-overview) on Kubernetes. Supports [identity binding mode](#identity-binding-mode-workloadidentitycredential) to work around FIC limits in AKS.||
145+
|[`WorkloadIdentityCredential`][ref_WorkloadIdentityCredential]|Supports [Microsoft Entra Workload ID](https://learn.microsoft.com/azure/aks/workload-identity-overview) on Kubernetes.||
185146

186147
### Authenticate service principals
187148

sdk/identity/Azure.Identity/api/Azure.Identity.net8.0.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ public partial class BrowserCustomizationOptions
115115
public BrowserCustomizationOptions() { }
116116
public string ErrorMessage { get { throw null; } set { } }
117117
public string SuccessMessage { get { throw null; } set { } }
118-
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
119118
[System.ObsoleteAttribute("This option requires additional dependencies on Microsoft.Identity.Client.Desktop and is no longer supported. Consider using brokered authentication instead")]
120119
public bool? UseEmbeddedWebView { get { throw null; } set { } }
121120
}
@@ -325,12 +324,10 @@ public partial class ManagedIdentityCredential : Azure.Core.TokenCredential
325324
{
326325
protected ManagedIdentityCredential() { }
327326
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
328-
[System.ObsoleteAttribute("Use constructor ManagedIdentityCredential(ManagedIdentityId id) or ManagedIdentityCredential(ManagedIdentityCredentialOptions options).")]
329327
public ManagedIdentityCredential(Azure.Core.ResourceIdentifier resourceId, Azure.Identity.TokenCredentialOptions options = null) { }
330328
public ManagedIdentityCredential(Azure.Identity.ManagedIdentityCredentialOptions options) { }
331329
public ManagedIdentityCredential(Azure.Identity.ManagedIdentityId id) { }
332330
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
333-
[System.ObsoleteAttribute("Use constructor ManagedIdentityCredential(ManagedIdentityId id) or ManagedIdentityCredential(ManagedIdentityCredentialOptions options).")]
334331
public ManagedIdentityCredential(string clientId = null, Azure.Identity.TokenCredentialOptions options = null) { }
335332
public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
336333
public override System.Threading.Tasks.ValueTask<Azure.Core.AccessToken> GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
@@ -502,7 +499,6 @@ public WorkloadIdentityCredentialOptions() { }
502499
public System.Collections.Generic.IList<string> AdditionallyAllowedTenants { get { throw null; } }
503500
public string ClientId { get { throw null; } set { } }
504501
public bool DisableInstanceDiscovery { get { throw null; } set { } }
505-
public bool IsAzureKubernetesTokenProxyEnabled { get { throw null; } set { } }
506502
public string TenantId { get { throw null; } set { } }
507503
public string TokenFilePath { get { throw null; } set { } }
508504
}

sdk/identity/Azure.Identity/api/Azure.Identity.netstandard2.0.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public partial class BrowserCustomizationOptions
113113
public BrowserCustomizationOptions() { }
114114
public string ErrorMessage { get { throw null; } set { } }
115115
public string SuccessMessage { get { throw null; } set { } }
116-
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
117116
[System.ObsoleteAttribute("This option requires additional dependencies on Microsoft.Identity.Client.Desktop and is no longer supported. Consider using brokered authentication instead")]
118117
public bool? UseEmbeddedWebView { get { throw null; } set { } }
119118
}
@@ -322,12 +321,10 @@ public partial class ManagedIdentityCredential : Azure.Core.TokenCredential
322321
{
323322
protected ManagedIdentityCredential() { }
324323
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
325-
[System.ObsoleteAttribute("Use constructor ManagedIdentityCredential(ManagedIdentityId id) or ManagedIdentityCredential(ManagedIdentityCredentialOptions options).")]
326324
public ManagedIdentityCredential(Azure.Core.ResourceIdentifier resourceId, Azure.Identity.TokenCredentialOptions options = null) { }
327325
public ManagedIdentityCredential(Azure.Identity.ManagedIdentityCredentialOptions options) { }
328326
public ManagedIdentityCredential(Azure.Identity.ManagedIdentityId id) { }
329327
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
330-
[System.ObsoleteAttribute("Use constructor ManagedIdentityCredential(ManagedIdentityId id) or ManagedIdentityCredential(ManagedIdentityCredentialOptions options).")]
331328
public ManagedIdentityCredential(string clientId = null, Azure.Identity.TokenCredentialOptions options = null) { }
332329
public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
333330
public override System.Threading.Tasks.ValueTask<Azure.Core.AccessToken> GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
@@ -499,7 +496,6 @@ public WorkloadIdentityCredentialOptions() { }
499496
public System.Collections.Generic.IList<string> AdditionallyAllowedTenants { get { throw null; } }
500497
public string ClientId { get { throw null; } set { } }
501498
public bool DisableInstanceDiscovery { get { throw null; } set { } }
502-
public bool IsAzureKubernetesTokenProxyEnabled { get { throw null; } set { } }
503499
public string TenantId { get { throw null; } set { } }
504500
public string TokenFilePath { get { throw null; } set { } }
505501
}

sdk/identity/Azure.Identity/integration/Directory.Build.props

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<!-- Signal that integration projects are building in the repo -->
66
<IsClientLibrary>true</IsClientLibrary>
77
<IsPackable>true</IsPackable>
8-
<IsTestProject>true</IsTestProject>
98
<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
109
<NoWarn>
1110
$(NoWarn);

sdk/identity/Azure.Identity/integration/Integration.Identity.Common/ManagedIdentityTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public static void AuthToStorage()
2121
string account1 = Environment.GetEnvironmentVariable("IDENTITY_STORAGE_NAME_1")!;
2222
string account2 = Environment.GetEnvironmentVariable("IDENTITY_STORAGE_NAME_2")!;
2323

24-
var credential1 = new ManagedIdentityCredential(ManagedIdentityId.SystemAssigned);
25-
var credential2 = new ManagedIdentityCredential(ManagedIdentityId.FromUserAssignedResourceId(new ResourceIdentifier(resourceId)));
24+
var credential1 = new ManagedIdentityCredential();
25+
var credential2 = new ManagedIdentityCredential(new ResourceIdentifier(resourceId));
2626
var client1 = new BlobServiceClient(new Uri($"https://{account1}.blob.core.windows.net/"), credential1);
2727
var client2 = new BlobServiceClient(new Uri($"https://{account2}.blob.core.windows.net/"), credential2);
2828
client1.GetBlobContainers().ToList();

sdk/identity/Azure.Identity/src/Azure.Identity.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Description>Provides APIs for authenticating to Microsoft Entra ID</Description>
44
<AssemblyTitle>Microsoft Azure.Identity Component</AssemblyTitle>
5-
<Version>1.18.0-beta.2</Version>
5+
<Version>1.17.1</Version>
66
<!--The ApiCompatVersion is managed automatically and should not generally be modified manually.-->
77
<ApiCompatVersion>1.17.0</ApiCompatVersion>
88
<PackageTags>Microsoft Azure Identity;$(PackageCommonTags)</PackageTags>

sdk/identity/Azure.Identity/src/AzureIdentityEventSource.cs

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,6 @@ internal sealed class AzureIdentityEventSource : AzureEventSource, IIdentityLogg
4343
private const int ServiceFabricManagedIdentityRuntimeConfigurationNotSupportedEvent = 22;
4444
private const int ManagedIdentitySourceAttemptedEvent = 25;
4545
private const int ManagedIdentityCredentialSelectedEvent = 26;
46-
private const int KubernetesProxyCaCertificateReloadSkippedEvent = 27;
47-
private const int KubernetesProxyCaCertificateReloadFailedEvent = 28;
48-
private const int KubernetesProxyCaCertificateReloadedEvent = 29;
4946

5047
internal const string TenantIdDiscoveredAndNotUsedEventMessage = "A token was request for a different tenant than was configured on the credential, but the configured value was used since multi tenant authentication has been disabled. Configured TenantId: {0}, Requested TenantId {1}";
5148
internal const string TenantIdDiscoveredAndUsedEventMessage = "A token was requested for a different tenant than was configured on the credential, and the requested tenant id was used to authenticate. Configured TenantId: {0}, Requested TenantId {1}";
@@ -56,9 +53,6 @@ internal sealed class AzureIdentityEventSource : AzureEventSource, IIdentityLogg
5653
internal const string ServiceFabricManagedIdentityRuntimeConfigurationNotSupportedMessage = "Service Fabric user assigned managed identity ClientId or ResourceId is not configurable at runtime.";
5754
internal const string ManagedIdentitySourceAttemptedMessage = "ManagedIdentitySource {0} was attempted. IsSelected={1}.";
5855
internal const string ManagedIdentityCredentialSelectedMessage = "Managed Identity source selected: {0} with ID: {1}";
59-
internal const string KubernetesProxyCaCertificateReloadSkippedMessage = "Kubernetes proxy CA certificate reload skipped. Reason: {0}";
60-
internal const string KubernetesProxyCaCertificateReloadFailedMessage = "Kubernetes proxy CA certificate read failed. Error: {0}";
61-
internal const string KubernetesProxyCaCertificateReloadedMessage = "Kubernetes proxy CA certificate changed, handler will be reloaded.";
6256

6357
private AzureIdentityEventSource() : base(EventSourceName) { }
6458

@@ -431,32 +425,5 @@ public void ManagedIdentityCredentialSelected(string credentialType, string id)
431425
WriteEvent(ManagedIdentityCredentialSelectedEvent, credentialType, id);
432426
}
433427
}
434-
435-
[Event(KubernetesProxyCaCertificateReloadSkippedEvent, Level = EventLevel.Informational, Message = KubernetesProxyCaCertificateReloadSkippedMessage)]
436-
public void KubernetesProxyCaCertificateReloadSkipped(string reason)
437-
{
438-
if (IsEnabled(EventLevel.Informational, EventKeywords.All))
439-
{
440-
WriteEvent(KubernetesProxyCaCertificateReloadSkippedEvent, reason);
441-
}
442-
}
443-
444-
[Event(KubernetesProxyCaCertificateReloadFailedEvent, Level = EventLevel.Warning, Message = KubernetesProxyCaCertificateReloadFailedMessage)]
445-
public void KubernetesProxyCaCertificateReloadFailed(string error)
446-
{
447-
if (IsEnabled(EventLevel.Warning, EventKeywords.All))
448-
{
449-
WriteEvent(KubernetesProxyCaCertificateReloadFailedEvent, error);
450-
}
451-
}
452-
453-
[Event(KubernetesProxyCaCertificateReloadedEvent, Level = EventLevel.Informational, Message = KubernetesProxyCaCertificateReloadedMessage)]
454-
public void KubernetesProxyCaCertificateReloaded()
455-
{
456-
if (IsEnabled(EventLevel.Informational, EventKeywords.All))
457-
{
458-
WriteEvent(KubernetesProxyCaCertificateReloadedEvent);
459-
}
460-
}
461428
}
462429
}

0 commit comments

Comments
 (0)