public async Task <GrantedToken?> GetToken( string scopes, string clientId, JwtPayload?idTokenJwsPayload, JwtPayload?userInfoJwsPayload, CancellationToken cancellationToken = default) { var token = await _database.StringGetAsync(clientId + scopes).ConfigureAwait(false); var options = token.HasValue ? JsonConvert.DeserializeObject <GrantedToken[]>(token) ! : Array.Empty <GrantedToken>(); return(options.FirstOrDefault( x => { var hasSameIdToken = (idTokenJwsPayload == null && x.IdTokenPayLoad == null) || idTokenJwsPayload?.All(a => x.IdTokenPayLoad?.Contains(a) == true) == true; var hasSameUserInfoToken = (userInfoJwsPayload == null && x.UserInfoPayLoad == null) || userInfoJwsPayload?.All(a => x.UserInfoPayLoad?.Contains(a) == true) == true; return hasSameIdToken && hasSameUserInfoToken; })); }