Skip to content

Commit 35cc68b

Browse files
brentschmaltzHP712
andauthored
Update return from validation steps to use M.I.Abstractions.OperationResult (#3284)
* ValidationResult -> OperationResult Standardize validation across token types. * Addressing PR comments. --------- Co-authored-by: id4s <[email protected]>
1 parent d25996a commit 35cc68b

File tree

216 files changed

+9000
-13287
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

216 files changed

+9000
-13287
lines changed

benchmark/Microsoft.IdentityModel.Benchmarks/ValidateTokenAsyncTests.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Threading.Tasks;
1010
using BenchmarkDotNet.Attributes;
1111
using BenchmarkDotNet.Configs;
12+
using Microsoft.Identity.Abstractions;
1213
using Microsoft.IdentityModel.JsonWebTokens;
1314
using Microsoft.IdentityModel.Tokens;
1415
using Microsoft.IdentityModel.Tokens.Experimental;
@@ -65,7 +66,7 @@ public void Setup()
6566
_validationParameters = new ValidationParameters();
6667
_validationParameters.ValidAudiences.Add(BenchmarkUtils.Audience);
6768
_validationParameters.ValidIssuers.Add(BenchmarkUtils.Issuer);
68-
_validationParameters.IssuerSigningKeys.Add(BenchmarkUtils.SigningCredentialsRsaSha256.Key);
69+
_validationParameters.SigningKeys.Add(BenchmarkUtils.SigningCredentialsRsaSha256.Key);
6970

7071
_invalidTokenValidationParameters = new TokenValidationParameters()
7172
{
@@ -105,8 +106,8 @@ public async Task<bool> JsonWebTokenHandler_ValidateTokenAsyncWithVP()
105106
{
106107
// Because ValidationResult is an internal type, we cannot return it in the benchmark.
107108
// We return a boolean instead until the type is made public.
108-
ValidationResult<ValidatedToken, ValidationError> result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
109-
return result.IsValid;
109+
OperationResult<ValidatedToken, ValidationError> operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
110+
return operationResult.Succeeded;
110111
}
111112

112113
[BenchmarkCategory("ValidateTokenAsync_FailTwiceBeforeSuccess"), Benchmark(Baseline = true)]
@@ -132,11 +133,11 @@ public async Task<TokenValidationResult> JsonWebTokenHandler_ValidateTokenAsyncW
132133
[BenchmarkCategory("ValidateTokenAsync_FailTwiceBeforeSuccess"), Benchmark]
133134
public async Task<bool> JsonWebTokenHandler_ValidateTokenAsyncWithVP_SucceedOnThirdAttempt()
134135
{
135-
ValidationResult<ValidatedToken, ValidationError> result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
136-
result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
137-
result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
136+
OperationResult<ValidatedToken, ValidationError> operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
137+
operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
138+
operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
138139

139-
return result.IsValid;
140+
return operationResult.Succeeded;
140141
}
141142

142143
[BenchmarkCategory("ValidateTokenAsync_FailFourTimesBeforeSuccess"), Benchmark(Baseline = true)]
@@ -166,13 +167,13 @@ public async Task<TokenValidationResult> JsonWebTokenHandler_ValidateTokenAsyncW
166167
[BenchmarkCategory("ValidateTokenAsync_FailFourTimesBeforeSuccess"), Benchmark]
167168
public async Task<bool> JsonWebTokenHandler_ValidateTokenAsyncWithVP_SucceedOnFifthAttempt()
168169
{
169-
ValidationResult<ValidatedToken, ValidationError> result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
170-
result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
171-
result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
172-
result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
173-
result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
170+
OperationResult<ValidatedToken, ValidationError> operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
171+
operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
172+
operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
173+
operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _invalidValidationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
174+
operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
174175

175-
return result.IsValid;
176+
return operationResult.Succeeded;
176177
}
177178

178179
[BenchmarkCategory("ValidateTokenAsyncClaimAccess"), Benchmark(Baseline = true)]
@@ -187,8 +188,8 @@ public async Task<List<Claim>> JsonWebTokenHandler_ValidateTokenAsyncWithTVP_Cre
187188
[BenchmarkCategory("ValidateTokenAsyncClaimAccess"), Benchmark]
188189
public async Task<List<Claim>> JsonWebTokenHandler_ValidateTokenAsyncWithVP_CreateClaims()
189190
{
190-
ValidationResult<ValidatedToken, ValidationError> result = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
191-
var claimsIdentity = result.UnwrapResult().ClaimsIdentity;
191+
OperationResult<ValidatedToken, ValidationError> operationResult = await _jsonWebTokenHandler.ValidateTokenAsync(_jwsExtendedClaims, _validationParameters, _callContext, CancellationToken.None).ConfigureAwait(false);
192+
var claimsIdentity = operationResult.Result.ClaimsIdentity;
192193
var claims = claimsIdentity.Claims;
193194
return claims.ToList();
194195
}

build/dependencies.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<AspNetCoreMinSupportedVersion>2.1.1</AspNetCoreMinSupportedVersion>
55
<BannedApiAnalyzersVersion>4.14.0</BannedApiAnalyzersVersion>
6+
<MicrosoftIdentityAbstractionsVersion>9.2.0</MicrosoftIdentityAbstractionsVersion>
67
<MicrosoftBclTimeProviderVersion>8.0.1</MicrosoftBclTimeProviderVersion>
78
<MicrosoftCSharpVersion>4.5.0</MicrosoftCSharpVersion>
89
<MicrosoftSourceLinkGitHubVersion>1.0.0</MicrosoftSourceLinkGitHubVersion>

src/Microsoft.IdentityModel.JsonWebTokens/Experimental/JsonWebTokenHandler.ClaimsIdentity.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.IdentityModel.Tokens;
77
using Microsoft.IdentityModel.Logging;
88
using Microsoft.IdentityModel.Tokens.Experimental;
9+
using System.Collections.Generic;
910

1011
#nullable enable
1112
namespace Microsoft.IdentityModel.JsonWebTokens
@@ -33,7 +34,10 @@ internal virtual ClaimsIdentity CreateClaimsIdentity(JsonWebToken? jwtToken, Val
3334
/// <param name="validationParameters">The <see cref="ValidationParameters"/> to be used for validating the token.</param>
3435
/// <param name="issuer">Specifies the issuer for the <see cref="ClaimsIdentity"/>.</param>
3536
/// <returns>A <see cref="ClaimsIdentity"/> containing the <see cref="JsonWebToken.Claims"/>.</returns>
36-
internal virtual ClaimsIdentity CreateClaimsIdentity(JsonWebToken? jwtToken, ValidationParameters validationParameters, string issuer)
37+
internal virtual ClaimsIdentity CreateClaimsIdentity(
38+
JsonWebToken? jwtToken,
39+
ValidationParameters validationParameters,
40+
string issuer)
3741
{
3842
// TODO: Make protected once ValidationParameters is public.
3943
_ = jwtToken ?? throw LogHelper.LogArgumentNullException(nameof(jwtToken));
@@ -69,7 +73,9 @@ private ClaimsIdentity CreateClaimsIdentityWithMapping(JsonWebToken jwtToken, Va
6973
if (claimType == ClaimTypes.Actor)
7074
{
7175
if (identity.Actor != null)
72-
throw LogHelper.LogExceptionMessage(new InvalidOperationException(LogHelper.FormatInvariant(
76+
throw LogHelper.LogExceptionMessage(
77+
new InvalidOperationException(
78+
LogHelper.FormatInvariant(
7379
LogMessages.IDX14112,
7480
LogHelper.MarkAsNonPII(JwtRegisteredClaimNames.Actort),
7581
jwtClaim.Value)));
@@ -115,7 +121,12 @@ private ClaimsIdentity CreateClaimsIdentityPrivate(JsonWebToken jwtToken, Valida
115121
if (claimType == ClaimTypes.Actor)
116122
{
117123
if (identity.Actor != null)
118-
throw LogHelper.LogExceptionMessage(new InvalidOperationException(LogHelper.FormatInvariant(LogMessages.IDX14112, LogHelper.MarkAsNonPII(JwtRegisteredClaimNames.Actort), jwtClaim.Value)));
124+
throw LogHelper.LogExceptionMessage(
125+
new InvalidOperationException(
126+
LogHelper.FormatInvariant(
127+
LogMessages.IDX14112,
128+
LogHelper.MarkAsNonPII(JwtRegisteredClaimNames.Actort),
129+
jwtClaim.Value)));
119130

120131
if (CanReadToken(jwtClaim.Value))
121132
{
@@ -130,9 +141,9 @@ private ClaimsIdentity CreateClaimsIdentityPrivate(JsonWebToken jwtToken, Valida
130141
}
131142
else
132143
{
133-
Claim claim = new Claim(claimType, jwtClaim.Value, jwtClaim.ValueType, issuer, issuer, identity);
144+
Claim claim = new(claimType, jwtClaim.Value, jwtClaim.ValueType, issuer, issuer, identity);
134145

135-
foreach (var kv in jwtClaim.Properties)
146+
foreach (KeyValuePair<string, string> kv in jwtClaim.Properties)
136147
claim.Properties[kv.Key] = kv.Value;
137148

138149
identity.AddClaim(claim);

0 commit comments

Comments
 (0)