Skip to content

Conversation

gladjohn
Copy link
Contributor

Fixes #5398

Changes proposed in this request
This pull request introduces significant enhancements to the mutual TLS Proof-of-Possession (mTLS PoP) functionality, refactors client assertion handling, and updates public APIs to support these changes. The most important changes include adding support for certificate-bound client assertions, refactoring the ClientCredential classes, and introducing new public APIs for client assertion configuration.

Enhancements to mTLS Proof-of-Possession:

Refactoring of Client Assertion Handling:

  • Introduced ClientAssertionDelegateCredential: Added a new class to handle client assertions supplied via a delegate, supporting JWTs with optional certificates for mTLS PoP. This replaces the removed SignedAssertionDelegateClientCredential class. (src/client/Microsoft.Identity.Client/Internal/ClientCredential/ClientAssertionDelegateCredential.cs, [1]; src/client/Microsoft.Identity.Client/Internal/ClientCredential/SignedAssertionDelegateClientCredential.cs, [2]
  • Support for JWT-PoP assertion type: Added a new constant for JWT-PoP assertion type in OAuth2 parameters to support certificate-bound assertions. (src/client/Microsoft.Identity.Client/OAuth2/OAuthConstants.cs, src/client/Microsoft.Identity.Client/OAuth2/OAuthConstants.csR69)

Updates to Public APIs:

  • Added AssertionResponse class: Introduced a new public class to encapsulate client assertions and optional certificates for token binding. (src/client/Microsoft.Identity.Client/AppConfig/AssertionResponse.cs, src/client/Microsoft.Identity.Client/AppConfig/AssertionResponse.csR1-R22)
  • Enhanced WithClientAssertion methods: Refactored existing methods to use the new AssertionResponse class and added a new overload for configuring client assertions with certificate binding. (src/client/Microsoft.Identity.Client/AppConfig/ConfidentialClientApplicationBuilder.cs, [1] [2] [3]
  • Public API declarations: Updated PublicAPI.Unshipped.txt files across multiple frameworks to include new APIs for client assertion configuration. (src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt, [1]; src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt, [2]; src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt, [3]

Miscellaneous Changes:

These changes collectively improve the flexibility and robustness of client assertion handling and enhance support for mTLS PoP scenarios.

Testing
unit

Performance impact
none

Documentation

  • All relevant documentation is updated.

@gladjohn gladjohn requested a review from a team as a code owner July 28, 2025 20:12
Copy link
Member

@bgavrilMS bgavrilMS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't use GetAwaiter / GetResult

@gladjohn gladjohn force-pushed the gladjohn/new-assertion-api branch from a71bc45 to b84be19 Compare August 9, 2025 19:45
@gladjohn gladjohn requested review from bgavrilMS and trwalke August 12, 2025 13:50
@gladjohn gladjohn force-pushed the gladjohn/new-assertion-api branch from f6f5a31 to cac7a77 Compare August 12, 2025 13:53
Copy link
Member

@trwalke trwalke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One minor comment.
Otherwise LGTM

@bgavrilMS bgavrilMS merged commit f120fdc into main Aug 15, 2025
11 checks passed
@bgavrilMS bgavrilMS deleted the gladjohn/new-assertion-api branch August 15, 2025 10:59
lilyydu pushed a commit to microsoft/teams-ai that referenced this pull request Aug 20, 2025
#minor 
Updated [Azure.Identity](https://github.com/Azure/azure-sdk-for-net)
from 1.14.2 to 1.15.0.

<details>
<summary>Release notes</summary>

_Sourced from [Azure.Identity's
releases](https://github.com/Azure/azure-sdk-for-net/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/Azure/azure-sdk-for-net/commits).
</details>

Updated
[Microsoft.Identity.Client](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet)
from 4.74.1 to 4.76.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Identity.Client's
releases](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/releases)._

## 4.76.0

## What's Changed
* Removal of `ExperimentalFeatures` flag on `WithMtlsProofOfPossession`
API: by @​gladjohn in
AzureAD/microsoft-authentication-library-for-dotnet#5402
* #​5400 Fixing issue that leads to multiple active access tokens in the
cache for non-tenanted oidc authority by @​andkorsh in
AzureAD/microsoft-authentication-library-for-dotnet#5401
* Add Service Fabric token revocation support by @​gladjohn in
AzureAD/microsoft-authentication-library-for-dotnet#5421
* Update NativeInterop package version to 0.19.4 by @​ashok672 in
AzureAD/microsoft-authentication-library-for-dotnet#5434
* Adding WithExtraBodyParameters api by @​trwalke in
AzureAD/microsoft-authentication-library-for-dotnet#5389
* Enable mTLS Proof‑of‑Possession for Client‑Assertion Delegates by
@​gladjohn in
AzureAD/microsoft-authentication-library-for-dotnet#5409

## New Contributors
* @​andkorsh made their first contribution in
AzureAD/microsoft-authentication-library-for-dotnet#5401

**Full Changelog**:
AzureAD/microsoft-authentication-library-for-dotnet@4.74.1...4.76.0

Commits viewable in [compare
view](AzureAD/microsoft-authentication-library-for-dotnet@4.74.1...4.76.0).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature Request] Allow DSTS client_assertion over mtls call for FIC
5 participants