Skip to content

Commit f0a02aa

Browse files
bgavrilMSgladjohn
andauthored
MSAL 4.76 release op + script to move rows from PublicAPI (#5441)
* MSAL 4.75 release op + script to move rows from PublicAPI * 1 * 2 * Update CHANGELOG.md * fix --------- Co-authored-by: Gladwin Johnson <[email protected]>
1 parent 7aadc1f commit f0a02aa

15 files changed

+180
-54
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
4.76.0
2+
======
3+
4+
### New Features
5+
* Removal of `ExperimentalFeatures` flag on `WithMtlsProofOfPossession` API
6+
* Add Service Fabric token revocation support
7+
* Adding WithExtraBodyParameters api
8+
* Enable mTLS Proof‑of‑Possession for Client‑Assertion Delegates
9+
10+
### Bug Fixes
11+
* #5400 Fixing issue that leads to multiple active access tokens in the cache for non-tenanted oidc authority
12+
* Update NativeInterop package version to 0.19.4
13+
114
4.74.1
215
======
316

LibsAndSamples.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "all", "all", "{C44AADC0-1E9
4646
.editorconfig = .editorconfig
4747
.gitattributes = .gitattributes
4848
.gitignore = .gitignore
49+
CHANGELOG.md = CHANGELOG.md
4950
build\CodeCoverage.runsettings = build\CodeCoverage.runsettings
5051
build\credscan-exclusion.json = build\credscan-exclusion.json
5152
Directory.Build.props = Directory.Build.props

eng/Move-PublicAPI.ps1

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
param(
2+
[Parameter(Mandatory = $false)]
3+
[string]$Root,
4+
5+
[switch]$DryRun
6+
)
7+
8+
<#!
9+
.SYNOPSIS
10+
Moves all APIs from PublicAPI.Unshipped.txt files into the corresponding PublicAPI.Shipped.txt files.
11+
12+
.DESCRIPTION
13+
This script scans the repository for files named "PublicAPI.Unshipped.txt" and, for each one found,
14+
appends its content to the sibling "PublicAPI.Shipped.txt" file and then clears the unshipped file.
15+
16+
Run this script every time a release is made to move unshipped API entries to the shipped list.
17+
18+
.PARAMETER Root
19+
Optional. The root directory to scan. Defaults to the repository root (one level above the script's folder).
20+
21+
.PARAMETER DryRun
22+
Optional. If specified, the script will only report what it would do without making any changes.
23+
24+
.EXAMPLE
25+
./Move-PublicAPI.ps1
26+
27+
.EXAMPLE
28+
./Move-PublicAPI.ps1 -Root C:\g\msal
29+
30+
.EXAMPLE
31+
./Move-PublicAPI.ps1 -DryRun
32+
#>
33+
34+
Set-StrictMode -Version Latest
35+
$ErrorActionPreference = 'Stop'
36+
37+
if (-not $PSBoundParameters.ContainsKey('Root') -or [string]::IsNullOrWhiteSpace($Root)) {
38+
# Default Root to the repo root (one level above script directory)
39+
$Root = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
40+
}
41+
42+
Write-Host "Scanning for PublicAPI.Unshipped.txt under: $Root"
43+
44+
# Find all PublicAPI.Unshipped.txt files
45+
$unshippedFiles = Get-ChildItem -LiteralPath $Root -Recurse -File -Filter 'PublicAPI.Unshipped.txt' -ErrorAction Stop
46+
47+
if (-not $unshippedFiles -or $unshippedFiles.Count -eq 0) {
48+
Write-Host 'No PublicAPI.Unshipped.txt files found. Nothing to do.'
49+
return
50+
}
51+
52+
$updatedCount = 0
53+
54+
foreach ($unshipped in $unshippedFiles) {
55+
$unshippedPath = $unshipped.FullName
56+
$shippedPath = Join-Path $unshipped.DirectoryName 'PublicAPI.Shipped.txt'
57+
58+
# Read unshipped content
59+
$unshippedContent = Get-Content -LiteralPath $unshippedPath -Raw -ErrorAction Stop
60+
61+
if ([string]::IsNullOrWhiteSpace($unshippedContent)) {
62+
Write-Host "Skipping (empty): $unshippedPath"
63+
continue
64+
}
65+
66+
# Ensure shipped file exists
67+
if (-not (Test-Path -LiteralPath $shippedPath)) {
68+
if ($DryRun) {
69+
Write-Host "Would create missing shipped file: $shippedPath"
70+
}
71+
else {
72+
New-Item -ItemType File -Path $shippedPath -Force | Out-Null
73+
}
74+
}
75+
76+
# Read existing shipped content if any
77+
$existingShipped = ''
78+
if (Test-Path -LiteralPath $shippedPath) {
79+
$existingShipped = Get-Content -LiteralPath $shippedPath -Raw -ErrorAction Stop
80+
}
81+
82+
# Prepare content to append with reasonable separation
83+
$toAppend = $unshippedContent.TrimEnd("`r", "`n")
84+
85+
if (-not [string]::IsNullOrEmpty($existingShipped)) {
86+
# Ensure at least one blank line separation between existing shipped content and new additions
87+
$needsTrailingNewLine = -not $existingShipped.EndsWith("`n")
88+
$separator = if ($needsTrailingNewLine) { "`r`n`r`n" } else { "`r`n" }
89+
$toAppend = $separator + $toAppend + "`r`n"
90+
}
91+
else {
92+
# If shipped is empty, just ensure the appended content ends with a newline
93+
$toAppend = $toAppend + "`r`n"
94+
}
95+
96+
if ($DryRun) {
97+
$movedLines = ($unshippedContent -split "(`r`n|`n|`r)").Where({ $_ -ne '' }).Count
98+
Write-Host "Would move $movedLines line(s) from: $unshippedPath"`n" to: $shippedPath"
99+
continue
100+
}
101+
102+
# Append to shipped and clear unshipped
103+
Add-Content -LiteralPath $shippedPath -Value $toAppend -Encoding UTF8
104+
105+
# Clear the unshipped file (leave file present but empty)
106+
Set-Content -LiteralPath $unshippedPath -Value '' -NoNewline -Encoding UTF8
107+
108+
$updatedCount++
109+
Write-Host "Moved content from: $unshippedPath"`n" to: $shippedPath"
110+
}
111+
112+
Write-Host "Done. Files updated: $updatedCount"

src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Shipped.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,3 +1067,12 @@ Microsoft.Identity.Client.AuthenticationResult.SpaAuthCode.set -> void
10671067
Microsoft.Identity.Client.AuthenticationResult.TenantId.set -> void
10681068
Microsoft.Identity.Client.AuthenticationResult.TokenType.set -> void
10691069
Microsoft.Identity.Client.AuthenticationResult.UniqueId.set -> void
1070+
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
1071+
Microsoft.Identity.Client.ClientSignedAssertion
1072+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
1073+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
1074+
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
1075+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
1076+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
1077+
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
1078+
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder
Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +0,0 @@
1-
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
2-
Microsoft.Identity.Client.ClientSignedAssertion
3-
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
4-
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
5-
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
6-
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
7-
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
8-
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
9-
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder

src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Shipped.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,3 +1067,12 @@ Microsoft.Identity.Client.AuthenticationResult.SpaAuthCode.set -> void
10671067
Microsoft.Identity.Client.AuthenticationResult.TenantId.set -> void
10681068
Microsoft.Identity.Client.AuthenticationResult.TokenType.set -> void
10691069
Microsoft.Identity.Client.AuthenticationResult.UniqueId.set -> void
1070+
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
1071+
Microsoft.Identity.Client.ClientSignedAssertion
1072+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
1073+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
1074+
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
1075+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
1076+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
1077+
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
1078+
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder
Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +0,0 @@
1-
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
2-
Microsoft.Identity.Client.ClientSignedAssertion
3-
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
4-
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
5-
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
6-
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
7-
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
8-
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
9-
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder

src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Shipped.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,3 +1033,12 @@ Microsoft.Identity.Client.AuthenticationResult.SpaAuthCode.set -> void
10331033
Microsoft.Identity.Client.AuthenticationResult.TenantId.set -> void
10341034
Microsoft.Identity.Client.AuthenticationResult.TokenType.set -> void
10351035
Microsoft.Identity.Client.AuthenticationResult.UniqueId.set -> void
1036+
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
1037+
Microsoft.Identity.Client.ClientSignedAssertion
1038+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
1039+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
1040+
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
1041+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
1042+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
1043+
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
1044+
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder
Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +0,0 @@
1-
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
2-
Microsoft.Identity.Client.ClientSignedAssertion
3-
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
4-
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
5-
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
6-
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
7-
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
8-
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
9-
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder

src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Shipped.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,3 +1035,12 @@ Microsoft.Identity.Client.AuthenticationResult.SpaAuthCode.set -> void
10351035
Microsoft.Identity.Client.AuthenticationResult.TenantId.set -> void
10361036
Microsoft.Identity.Client.AuthenticationResult.TokenType.set -> void
10371037
Microsoft.Identity.Client.AuthenticationResult.UniqueId.set -> void
1038+
const Microsoft.Identity.Client.MsalError.InvalidClientAssertion = "invalid_client_assertion" -> string
1039+
Microsoft.Identity.Client.ClientSignedAssertion
1040+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.get -> string
1041+
Microsoft.Identity.Client.ClientSignedAssertion.Assertion.set -> void
1042+
Microsoft.Identity.Client.ClientSignedAssertion.ClientSignedAssertion() -> void
1043+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2
1044+
Microsoft.Identity.Client.ClientSignedAssertion.TokenBindingCertificate.set -> void
1045+
Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.WithClientAssertion(System.Func<Microsoft.Identity.Client.AssertionRequestOptions, System.Threading.CancellationToken, System.Threading.Tasks.Task<Microsoft.Identity.Client.ClientSignedAssertion>> clientSignedAssertionProvider) -> Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
1046+
static Microsoft.Identity.Client.Extensibility.AcquireTokenForClientBuilderExtensions.WithExtraBodyParameters(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, System.Collections.Generic.Dictionary<string, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task<string>>> extrabodyparams) -> Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder

0 commit comments

Comments
 (0)