diff --git a/src/Microsoft.IdentityModel.JsonWebTokens/JsonWebToken.cs b/src/Microsoft.IdentityModel.JsonWebTokens/JsonWebToken.cs index 9813cefd87..79e02c0544 100644 --- a/src/Microsoft.IdentityModel.JsonWebTokens/JsonWebToken.cs +++ b/src/Microsoft.IdentityModel.JsonWebTokens/JsonWebToken.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Security.Claims; using System.Text; +using System.Threading; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; @@ -17,7 +18,6 @@ namespace Microsoft.IdentityModel.JsonWebTokens /// public class JsonWebToken : SecurityToken { - internal object _audiencesLock = new(); private ClaimsIdentity _claimsIdentity; private bool _wasClaimsIdentitySet; @@ -614,12 +614,11 @@ public IEnumerable Audiences { if (_audiences == null) { - lock (_audiencesLock) - { - _audiences ??= Payload.TryGetValue(JwtRegisteredClaimNames.Aud, out IList audiences) ? - (audiences is string[] audiencesArray ? audiencesArray : audiences.ToArray()) : - Array.Empty(); - } + var tmp = Payload.TryGetValue(JwtRegisteredClaimNames.Aud, out IList audiences) ? + (audiences is string[] audiencesArray ? audiencesArray : audiences.ToArray()) : + Array.Empty(); + + Interlocked.CompareExchange(ref _audiences, tmp, null); } return _audiences;