5
5
using System . Collections . Generic ;
6
6
using System . Text . Json ;
7
7
using Microsoft . IdentityModel . Logging ;
8
- using Microsoft . IdentityModel . Tokens ;
9
8
using Microsoft . IdentityModel . Tokens . Json ;
10
9
11
10
namespace Microsoft . IdentityModel . JsonWebTokens
@@ -40,7 +39,8 @@ internal JsonClaimSet CreatePayloadClaimSet(ReadOnlySpan<byte> byteSpan)
40
39
{
41
40
if ( reader . TokenType == JsonTokenType . PropertyName )
42
41
{
43
- ReadPayloadValue ( ref reader , claims ) ;
42
+ string claimName = reader . GetString ( ) ;
43
+ claims [ claimName ] = ReadTokenPayloadValueDelegate ( ref reader , claimName ) ;
44
44
}
45
45
// We read a JsonTokenType.StartObject above, exiting and positioning reader at next token.
46
46
else if ( JsonSerializerPrimitives . IsReaderAtTokenType ( ref reader , JsonTokenType . EndObject , false ) )
@@ -52,72 +52,63 @@ internal JsonClaimSet CreatePayloadClaimSet(ReadOnlySpan<byte> byteSpan)
52
52
return new JsonClaimSet ( claims ) ;
53
53
}
54
54
55
- private protected virtual void ReadPayloadValue ( ref Utf8JsonReader reader , IDictionary < string , object > claims )
55
+ /// <summary>
56
+ /// Reads and saves the value of the payload claim from the reader.
57
+ /// </summary>
58
+ /// <param name="reader">The reader over the JWT.</param>
59
+ /// <param name="claimName">The claim at the current position of the reader.</param>
60
+ /// <returns>A claim that was read.</returns>
61
+ internal static object ReadTokenPayloadValue ( ref Utf8JsonReader reader , string claimName )
56
62
{
57
63
if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Aud ) )
58
64
{
59
- _audiences = [ ] ;
65
+ List < string > _audiences = [ ] ;
60
66
reader . Read ( ) ;
61
67
if ( reader . TokenType == JsonTokenType . StartArray )
62
68
{
63
69
JsonSerializerPrimitives . ReadStringsSkipNulls ( ref reader , _audiences , JwtRegisteredClaimNames . Aud , ClassName ) ;
64
- claims [ JwtRegisteredClaimNames . Aud ] = _audiences ;
65
70
}
66
71
else
67
72
{
68
73
if ( reader . TokenType != JsonTokenType . Null )
69
74
{
70
75
_audiences . Add ( JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Aud , ClassName ) ) ;
71
- claims [ JwtRegisteredClaimNames . Aud ] = _audiences [ 0 ] ;
72
- }
73
- else
74
- {
75
- claims [ JwtRegisteredClaimNames . Aud ] = _audiences ;
76
+ return _audiences [ 0 ] ;
76
77
}
77
78
}
79
+ return _audiences ;
78
80
}
79
81
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Azp ) )
80
82
{
81
- _azp = JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Azp , ClassName , true ) ;
82
- claims [ JwtRegisteredClaimNames . Azp ] = _azp ;
83
+ return JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Azp , ClassName , true ) ;
83
84
}
84
85
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Exp ) )
85
86
{
86
- _exp = JsonSerializerPrimitives . ReadLong ( ref reader , JwtRegisteredClaimNames . Exp , ClassName , true ) ;
87
- _expDateTime = EpochTime . DateTime ( _exp . Value ) ;
88
- claims [ JwtRegisteredClaimNames . Exp ] = _exp ;
87
+ return JsonSerializerPrimitives . ReadLong ( ref reader , JwtRegisteredClaimNames . Exp , ClassName , true ) ;
89
88
}
90
89
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Iat ) )
91
90
{
92
- _iat = JsonSerializerPrimitives . ReadLong ( ref reader , JwtRegisteredClaimNames . Iat , ClassName , true ) ;
93
- _iatDateTime = EpochTime . DateTime ( _iat . Value ) ;
94
- claims [ JwtRegisteredClaimNames . Iat ] = _iat ;
91
+ return JsonSerializerPrimitives . ReadLong ( ref reader , JwtRegisteredClaimNames . Iat , ClassName , true ) ;
95
92
}
96
93
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Iss ) )
97
94
{
98
- _iss = JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Iss , ClassName , true ) ;
99
- claims [ JwtRegisteredClaimNames . Iss ] = _iss ;
95
+ return JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Iss , ClassName , true ) ;
100
96
}
101
97
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Jti ) )
102
98
{
103
- _jti = JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Jti , ClassName , true ) ;
104
- claims [ JwtRegisteredClaimNames . Jti ] = _jti ;
99
+ return JsonSerializerPrimitives . ReadString ( ref reader , JwtRegisteredClaimNames . Jti , ClassName , true ) ;
105
100
}
106
101
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Nbf ) )
107
102
{
108
- _nbf = JsonSerializerPrimitives . ReadLong ( ref reader , JwtRegisteredClaimNames . Nbf , ClassName , true ) ;
109
- _nbfDateTime = EpochTime . DateTime ( _nbf . Value ) ;
110
- claims [ JwtRegisteredClaimNames . Nbf ] = _nbf ;
103
+ return JsonSerializerPrimitives . ReadLong ( ref reader , JwtRegisteredClaimNames . Nbf , ClassName , true ) ;
111
104
}
112
105
else if ( reader . ValueTextEquals ( JwtPayloadUtf8Bytes . Sub ) )
113
106
{
114
- _sub = JsonSerializerPrimitives . ReadStringOrNumberAsString ( ref reader , JwtRegisteredClaimNames . Sub , ClassName , true ) ;
115
- claims [ JwtRegisteredClaimNames . Sub ] = _sub ;
107
+ return JsonSerializerPrimitives . ReadStringOrNumberAsString ( ref reader , JwtRegisteredClaimNames . Sub , ClassName , true ) ;
116
108
}
117
109
else
118
110
{
119
- string propertyName = reader . GetString ( ) ;
120
- claims [ propertyName ] = JsonSerializerPrimitives . ReadPropertyValueAsObject ( ref reader , propertyName , JsonClaimSet . ClassName , true ) ;
111
+ return JsonSerializerPrimitives . ReadPropertyValueAsObject ( ref reader , claimName , JsonClaimSet . ClassName , true ) ;
121
112
}
122
113
}
123
114
}
0 commit comments