diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index 38e8f1d55..8c3c3133d 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -3,7 +3,7 @@
10.0.5
10.0.5
- 10.0.5
+ 10.0.10
1.0.1-*
@@ -61,8 +61,8 @@
-
-
+
+
diff --git a/src/EntityFramework.Storage/migrations/Migrator/Migrator.csproj b/src/EntityFramework.Storage/migrations/Migrator/Migrator.csproj
index e15481e39..0e6b15c3f 100644
--- a/src/EntityFramework.Storage/migrations/Migrator/Migrator.csproj
+++ b/src/EntityFramework.Storage/migrations/Migrator/Migrator.csproj
@@ -9,6 +9,7 @@
+
diff --git a/src/EntityFramework.Storage/src/Entities/Compatibility/IdentityServerKeyMaterial.cs b/src/EntityFramework.Storage/src/Entities/Compatibility/IdentityServerKeyMaterial.cs
index 911f31777..262cb8a14 100644
--- a/src/EntityFramework.Storage/src/Entities/Compatibility/IdentityServerKeyMaterial.cs
+++ b/src/EntityFramework.Storage/src/Entities/Compatibility/IdentityServerKeyMaterial.cs
@@ -15,7 +15,7 @@ public class IdentityServerKeyMaterial
///
/// Get or set unique identifier
///
- public string Id { get; set; }
+ public string Id { get; set; } = null!;
///
/// Get or set version of key material
@@ -35,7 +35,7 @@ public class IdentityServerKeyMaterial
///
/// Get or set key algorithm value
///
- public string Algorithm { get; set; }
+ public string Algorithm { get; set; } = null!;
///
/// Get or set is x509 certificate value
@@ -45,7 +45,7 @@ public class IdentityServerKeyMaterial
///
/// Get or set data value
///
- public string Data { get; set; }
+ public string Data { get; set; } = null!;
///
/// Get or set created value
diff --git a/src/EntityFramework.Storage/test/IntegrationTests/Open.IdentityServer.EntityFramework.IntegrationTests.csproj b/src/EntityFramework.Storage/test/IntegrationTests/Open.IdentityServer.EntityFramework.IntegrationTests.csproj
index 60534d618..0fe620306 100644
--- a/src/EntityFramework.Storage/test/IntegrationTests/Open.IdentityServer.EntityFramework.IntegrationTests.csproj
+++ b/src/EntityFramework.Storage/test/IntegrationTests/Open.IdentityServer.EntityFramework.IntegrationTests.csproj
@@ -27,6 +27,7 @@
+
diff --git a/src/EntityFramework.Storage/test/UnitTests/Open.IdentityServer.EntityFramework.UnitTests.csproj b/src/EntityFramework.Storage/test/UnitTests/Open.IdentityServer.EntityFramework.UnitTests.csproj
index bebc111c5..8d15a86af 100644
--- a/src/EntityFramework.Storage/test/UnitTests/Open.IdentityServer.EntityFramework.UnitTests.csproj
+++ b/src/EntityFramework.Storage/test/UnitTests/Open.IdentityServer.EntityFramework.UnitTests.csproj
@@ -20,6 +20,7 @@
+
diff --git a/src/EntityFramework/test/Open.IdentityServer.EntityFramework.Tests/Open.IdentityServer.EntityFramework.Tests.csproj b/src/EntityFramework/test/Open.IdentityServer.EntityFramework.Tests/Open.IdentityServer.EntityFramework.Tests.csproj
index 0d6629ff4..2d4b5b5d1 100644
--- a/src/EntityFramework/test/Open.IdentityServer.EntityFramework.Tests/Open.IdentityServer.EntityFramework.Tests.csproj
+++ b/src/EntityFramework/test/Open.IdentityServer.EntityFramework.Tests/Open.IdentityServer.EntityFramework.Tests.csproj
@@ -15,6 +15,7 @@
+
diff --git a/src/Open.IdentityServer/host/Host.csproj b/src/Open.IdentityServer/host/Host.csproj
index 9b55fec48..29c8684ca 100644
--- a/src/Open.IdentityServer/host/Host.csproj
+++ b/src/Open.IdentityServer/host/Host.csproj
@@ -19,6 +19,7 @@
+
diff --git a/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Common/IdentityServerPipeline.cs b/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Common/IdentityServerPipeline.cs
index c5a3b5793..f03d6b190 100644
--- a/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Common/IdentityServerPipeline.cs
+++ b/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Common/IdentityServerPipeline.cs
@@ -315,7 +315,7 @@ public Cookie GetSessionCookie()
public string CreateAuthorizeUrl(
string clientId = null!,
- string? responseType = null,
+ string responseType = null!,
string? scope = null,
string? redirectUri = null,
string? state = null,
diff --git a/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Endpoints/Introspection/IntrospectionTests.cs b/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Endpoints/Introspection/IntrospectionTests.cs
index b2bb809fa..7d466ad0e 100644
--- a/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Endpoints/Introspection/IntrospectionTests.cs
+++ b/src/Open.IdentityServer/test/Open.IdentityServer.IntegrationTests/Endpoints/Introspection/IntrospectionTests.cs
@@ -174,7 +174,7 @@ public async Task Valid_token_and_valid_scope_should_succeed()
ClientId = "api1",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
introspectionResponse.IsActive.Should().Be(true);
@@ -206,11 +206,12 @@ public async Task Response_data_should_be_valid_using_single_scope()
ClientId = "api1",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
var values = introspectionResponse.Json.Deserialize>();
-
+
+ values.Should().NotBeNull();
((JsonElement)values["aud"]).ValueKind.Should().Be(JsonValueKind.String);
((JsonElement)values["iss"]).ValueKind.Should().Be(JsonValueKind.String);
((JsonElement)values["nbf"]).ValueKind.Should().Be(JsonValueKind.Number);
@@ -245,11 +246,12 @@ public async Task Response_data_with_user_authentication_should_be_valid_using_s
ClientId = "api1",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
var values = introspectionResponse.Json.Deserialize>();
+ values.Should().NotBeNull();
((JsonElement)values["aud"]).ValueKind.Should().Be(JsonValueKind.String);
((JsonElement)values["iss"]).ValueKind.Should().Be(JsonValueKind.String);
((JsonElement)values["nbf"]).ValueKind.Should().Be(JsonValueKind.Number);
@@ -284,11 +286,12 @@ public async Task Response_data_should_be_valid_using_multiple_scopes_multiple_a
ClientId = "api3",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
var values = introspectionResponse.Json.Deserialize>();
+ values.Should().NotBeNull();
values["aud"].GetType().Name.Should().Be("JsonElement");
var audiences = ((JsonElement)values["aud"]).EnumerateArray();
@@ -329,11 +332,12 @@ public async Task Response_data_should_be_valid_using_multiple_scopes_single_aud
ClientId = "api3",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
var values = introspectionResponse.Json.Deserialize>();
+ values.Should().NotBeNull();
((JsonElement)values["aud"]).ValueKind.Should().Be(JsonValueKind.String);
((JsonElement)values["iss"]).ValueKind.Should().Be(JsonValueKind.String);
((JsonElement)values["nbf"]).ValueKind.Should().Be(JsonValueKind.Number);
@@ -367,17 +371,17 @@ public async Task Token_with_many_scopes_but_api_should_only_see_its_own_scopes(
ClientId = "api3",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
introspectionResponse.IsActive.Should().BeTrue();
introspectionResponse.IsError.Should().BeFalse();
- var scopes = from c in introspectionResponse.Claims
+ var scopes = (from c in introspectionResponse.Claims
where c.Type == "scope"
- select c.Value;
-
- scopes.Count().Should().Be(1);
+ select c.Value).ToList();
+
+ scopes.Count.Should().Be(1);
scopes.First().Should().Be("api3-a");
}
@@ -400,17 +404,17 @@ public async Task Valid_token_with_valid_multiple_scopes()
ClientId = "api1",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
introspectionResponse.IsActive.Should().Be(true);
introspectionResponse.IsError.Should().Be(false);
- var scopes = from c in introspectionResponse.Claims
+ var scopes = (from c in introspectionResponse.Claims
where c.Type == "scope"
- select c;
+ select c).ToList();
- scopes.Count().Should().Be(1);
+ scopes.Count.Should().Be(1);
scopes.First().Value.Should().Be("api1");
}
@@ -433,7 +437,7 @@ public async Task Valid_token_with_invalid_scopes_should_fail()
ClientId = "api2",
ClientSecret = "secret",
- Token = tokenResponse.AccessToken
+ Token = tokenResponse.AccessToken ?? string.Empty
}, TestContext.Current.CancellationToken);
introspectionResponse.IsActive.Should().Be(false);
diff --git a/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/ResponseHandling/TokenResponseGenerator/TokenResponseGeneratorTests_RefreshToken.cs b/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/ResponseHandling/TokenResponseGenerator/TokenResponseGeneratorTests_RefreshToken.cs
index 6e25c4ce3..9e5c11aff 100644
--- a/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/ResponseHandling/TokenResponseGenerator/TokenResponseGeneratorTests_RefreshToken.cs
+++ b/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/ResponseHandling/TokenResponseGenerator/TokenResponseGeneratorTests_RefreshToken.cs
@@ -488,7 +488,7 @@ public async Task ProcessAsync_WhenClientUpdateClaimsOnRefreshIsFalse_ShouldStil
};
var fakeTokenString = "some.token.string";
- Token? updatedToken = null;
+ Token updatedToken = null;
Mock.Get(tokenService)
.Setup(x => x.CreateSecurityTokenAsync(It.IsAny()))
.ReturnsAsync((Token token) =>
diff --git a/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Stores/Default/DefaultPersistedGrantStoreTests.cs b/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Stores/Default/DefaultPersistedGrantStoreTests.cs
index c5c72f7f8..9b461c304 100644
--- a/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Stores/Default/DefaultPersistedGrantStoreTests.cs
+++ b/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Stores/Default/DefaultPersistedGrantStoreTests.cs
@@ -17,21 +17,22 @@
using Open.IdentityServer.Stores;
using Open.IdentityServer.Stores.Serialization;
using Xunit;
+#pragma warning disable CS0618 // Type or member is obsolete
namespace IdentityServer.UnitTests.Stores.Default;
public class DefaultPersistedGrantStoreTests
{
- private InMemoryPersistedGrantStore _store = new InMemoryPersistedGrantStore();
- private IAuthorizationCodeStore _codes;
- private IRefreshTokenStore _refreshTokens;
- private IReferenceTokenStore _referenceTokens;
- private IUserConsentStore _userConsent;
- private StubHandleGenerationService _stubHandleGenerationService = new StubHandleGenerationService();
-
- private ClaimsPrincipal _user = new IdentityServerUser("123").CreatePrincipal();
+ private readonly InMemoryPersistedGrantStore _store = new InMemoryPersistedGrantStore();
+ private readonly IAuthorizationCodeStore _codes;
+ private readonly IRefreshTokenStore _refreshTokens;
+ private readonly IReferenceTokenStore _referenceTokens;
+ private readonly IUserConsentStore _userConsent;
+ private readonly StubHandleGenerationService _stubHandleGenerationService = new StubHandleGenerationService();
+
+ private readonly ClaimsPrincipal _user = new IdentityServerUser("123").CreatePrincipal();
- private ILogger refreshTokenStoreLogger = Mock.Of>();
+ private readonly ILogger refreshTokenStoreLogger = Mock.Of>();
public DefaultPersistedGrantStoreTests()
{
@@ -56,7 +57,7 @@ public DefaultPersistedGrantStoreTests()
[Fact]
public async Task StoreAuthorizationCodeAsync_ShouldGenerateHexEncodedHandle()
{
- var code1 = new AuthorizationCode()
+ var code1 = new AuthorizationCode
{
ClientId = "test",
CreationTime = DateTime.UtcNow,
@@ -76,7 +77,7 @@ public async Task StoreAuthorizationCodeAsync_ShouldGenerateHexEncodedHandle()
[Fact]
public async Task StoreAuthorizationCodeAsync_should_persist_grant()
{
- var code1 = new AuthorizationCode()
+ var code1 = new AuthorizationCode
{
ClientId = "test",
CreationTime = DateTime.UtcNow,
@@ -104,7 +105,7 @@ public async Task StoreAuthorizationCodeAsync_should_persist_grant()
[Fact]
public async Task RemoveAuthorizationCodeAsync_should_remove_grant()
{
- var code1 = new AuthorizationCode()
+ var code1 = new AuthorizationCode
{
ClientId = "test",
CreationTime = DateTime.UtcNow,
@@ -130,7 +131,7 @@ public async Task RemoveAuthorizationCodeAsync_should_remove_grant()
[InlineData(7)]
public async Task GetRefreshTokenAsync_when_unsupported_token_stored_should_return_null_and_log_error(int unsupportedVersion)
{
- var token1 = new RefreshToken()
+ var token1 = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
@@ -143,13 +144,13 @@ public async Task GetRefreshTokenAsync_when_unsupported_token_stored_should_retu
token2.Should().BeNull();
Mock.Get(refreshTokenStoreLogger)
- .Verify(x => x.Log(LogLevel.Error, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>()));
+ .Verify(x => x.Log(LogLevel.Error, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>()));
}
[Fact]
public async Task GetRefreshTokenAsync_when_v4_token_stored_should_retrieve_mapped_grant()
{
- var token1 = new RefreshToken()
+ var token1 = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
@@ -191,7 +192,7 @@ public async Task GetRefreshTokenAsync_when_v4_token_stored_should_retrieve_mapp
[Fact]
public async Task StoreRefreshTokenAsync_ShouldGenerateHexEncodedHandle()
{
- var token1 = new RefreshToken()
+ var token1 = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
@@ -224,7 +225,7 @@ public async Task StoreRefreshTokenAsync_ShouldGenerateHexEncodedHandle()
[Fact]
public async Task StoreRefreshTokenAsync_should_persist_grant()
{
- var token1 = new RefreshToken()
+ var token1 = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
@@ -265,7 +266,7 @@ public async Task StoreRefreshTokenAsync_should_persist_grant()
[Fact]
public async Task RemoveRefreshTokenAsync_should_remove_grant()
{
- var token1 = new RefreshToken()
+ var token1 = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
@@ -287,7 +288,7 @@ public async Task RemoveRefreshTokenAsync_should_remove_grant()
[Fact]
public async Task RemoveRefreshTokenAsync_by_sub_and_client_should_remove_grant()
{
- var token1 = new RefreshToken()
+ var token1 = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
@@ -312,7 +313,7 @@ public async Task RemoveRefreshTokenAsync_by_sub_and_client_should_remove_grant(
[Fact]
public async Task StoreReferenceTokenAsync_ShouldGenerateHexEncodedHandle()
{
- var token1 = new Token()
+ var token1 = new Token
{
ClientId = "client",
Audiences = { "aud" },
@@ -335,7 +336,7 @@ public async Task StoreReferenceTokenAsync_ShouldGenerateHexEncodedHandle()
[Fact]
public async Task StoreReferenceTokenAsync_should_persist_grant()
{
- var token1 = new Token()
+ var token1 = new Token
{
ClientId = "client",
Audiences = { "aud" },
@@ -365,7 +366,7 @@ public async Task StoreReferenceTokenAsync_should_persist_grant()
[Fact]
public async Task RemoveReferenceTokenAsync_should_remove_grant()
{
- var token1 = new Token()
+ var token1 = new Token
{
ClientId = "client",
Audiences = { "aud" },
@@ -388,7 +389,7 @@ public async Task RemoveReferenceTokenAsync_should_remove_grant()
[Fact]
public async Task RemoveReferenceTokenAsync_by_sub_and_client_should_remove_grant()
{
- var token1 = new Token()
+ var token1 = new Token
{
ClientId = "client",
Audiences = { "aud" },
@@ -415,7 +416,7 @@ public async Task RemoveReferenceTokenAsync_by_sub_and_client_should_remove_gran
[Fact]
public async Task StoreUserConsentAsync_should_persist_grant()
{
- var consent1 = new Consent()
+ var consent1 = new Consent
{
CreationTime = DateTime.UtcNow,
ClientId = "client",
@@ -453,7 +454,7 @@ public async Task same_key_for_different_grant_types_should_not_interfere_with_e
{
_stubHandleGenerationService.Handle = "key";
- await _referenceTokens.StoreReferenceTokenAsync(new Token()
+ await _referenceTokens.StoreReferenceTokenAsync(new Token
{
ClientId = "client1",
Audiences = { "aud" },
@@ -468,7 +469,7 @@ await _referenceTokens.StoreReferenceTokenAsync(new Token()
}
});
- await _refreshTokens.StoreRefreshTokenAsync(new RefreshToken()
+ await _refreshTokens.StoreRefreshTokenAsync(new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 20,
@@ -478,7 +479,7 @@ await _refreshTokens.StoreRefreshTokenAsync(new RefreshToken()
AuthorizedScopes = ["baz1", "baz2"],
});
- await _codes.StoreAuthorizationCodeAsync(new AuthorizationCode()
+ await _codes.StoreAuthorizationCodeAsync(new AuthorizationCode
{
ClientId = "client1",
CreationTime = DateTime.UtcNow,
diff --git a/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Validation/TokenRequest Validation/TokenRequestValidation_RefreshToken_Invalid.cs b/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Validation/TokenRequest Validation/TokenRequestValidation_RefreshToken_Invalid.cs
index 4c5ed54cb..18bd4e9d1 100644
--- a/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Validation/TokenRequest Validation/TokenRequestValidation_RefreshToken_Invalid.cs
+++ b/src/Open.IdentityServer/test/Open.IdentityServer.UnitTests/Validation/TokenRequest Validation/TokenRequestValidation_RefreshToken_Invalid.cs
@@ -15,6 +15,7 @@
using Open.IdentityServer.Models;
using Open.IdentityServer.Stores;
using Xunit;
+#pragma warning disable CS0618 // Type or member is obsolete
namespace IdentityServer.UnitTests.Validation.TokenRequest_Validation;
diff --git a/src/Storage/src/Models/Client.cs b/src/Storage/src/Models/Client.cs
index f06d281d6..a9fe06d1f 100644
--- a/src/Storage/src/Models/Client.cs
+++ b/src/Storage/src/Models/Client.cs
@@ -451,7 +451,7 @@ IEnumerator IEnumerable.GetEnumerator()
///
/// Gets or sets initiate login URI (Unused, added for compatibility)
///
- public string? InitiateLoginUri { get; set; }
+ public string InitiateLoginUri { get; set; }
///
/// Gets or sets DPoP clock skew (Unused, added for compatibility)
diff --git a/src/Storage/src/Stores/Serialization/PersistentGrantSerializer.cs b/src/Storage/src/Stores/Serialization/PersistentGrantSerializer.cs
index 6ea427a71..70d9ee95c 100644
--- a/src/Storage/src/Stores/Serialization/PersistentGrantSerializer.cs
+++ b/src/Storage/src/Stores/Serialization/PersistentGrantSerializer.cs
@@ -4,6 +4,7 @@
#nullable enable
+using System;
using System.Text.Json;
using Open.IdentityServer.Models;
@@ -55,6 +56,12 @@ private static T HandleV4RefreshTokens(RefreshToken refreshToken)
throw new UnsupportedRefreshTokenException(refreshToken.Version);
}
+#pragma warning disable CS0618 // Type or member is obsolete
+ if (refreshToken.AccessToken == null)
+ {
+ throw new RefreshTokenNullAccessTokenException();
+ }
+
var user = new IdentityServerUser(refreshToken.AccessToken.SubjectId);
if (refreshToken.AccessToken.Claims != null)
{
@@ -73,6 +80,7 @@ private static T HandleV4RefreshTokens(RefreshToken refreshToken)
refreshToken.Version = 5;
refreshToken.AccessToken = null;
+#pragma warning restore CS0618 // Type or member is obsolete
return (T)(object)refreshToken;
}
diff --git a/src/Storage/src/Stores/Serialization/RefreshTokenNullAccessTokenException.cs b/src/Storage/src/Stores/Serialization/RefreshTokenNullAccessTokenException.cs
new file mode 100644
index 000000000..1fcd703a9
--- /dev/null
+++ b/src/Storage/src/Stores/Serialization/RefreshTokenNullAccessTokenException.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace Open.IdentityServer.Stores.Serialization;
+
+///
+/// Exception thrown when a refresh token's access token value is null when unexpected. This usually means its a version
+/// 4 refresh token
+///
+public class RefreshTokenNullAccessTokenException():
+ Exception($"Refresh token's access token value is unexpectedly null");
\ No newline at end of file
diff --git a/src/Storage/src/Utility/ClaimComparer.cs b/src/Storage/src/Utility/ClaimComparer.cs
index 1c0c79e5d..417def1bf 100644
--- a/src/Storage/src/Utility/ClaimComparer.cs
+++ b/src/Storage/src/Utility/ClaimComparer.cs
@@ -5,12 +5,14 @@
using System.Collections.Generic;
using System.Security.Claims;
+#nullable enable
+
namespace Open.IdentityServer;
///
/// Compares two instances of Claim
///
-public class ClaimComparer : EqualityComparer
+public class ClaimComparer: EqualityComparer
{
///
/// Claim comparison options
@@ -49,18 +51,15 @@ public ClaimComparer(Options options)
public override bool Equals(Claim? x, Claim? y)
{
if (x == null && y == null) return true;
- if (x == null && y != null) return false;
- if (x != null && y == null) return false;
-
- if (x == null) throw new ArgumentNullException(nameof(x));
- if (y == null) throw new ArgumentNullException(nameof(y));
+ if (x == null) return false;
+ if (y == null) return false;
var valueComparison = StringComparison.Ordinal;
- if (_options.IgnoreValueCase == true) valueComparison = StringComparison.OrdinalIgnoreCase;
+ if (_options.IgnoreValueCase) valueComparison = StringComparison.OrdinalIgnoreCase;
- var equal = (String.Equals(x.Type, y.Type, StringComparison.OrdinalIgnoreCase) &&
- String.Equals(x.Value, y.Value, valueComparison) &&
- String.Equals(x.ValueType, y.ValueType, StringComparison.Ordinal));
+ var equal = string.Equals(x.Type, y.Type, StringComparison.OrdinalIgnoreCase) &&
+ string.Equals(x.Value, y.Value, valueComparison) &&
+ string.Equals(x.ValueType, y.ValueType, StringComparison.Ordinal);
if (_options.IgnoreIssuer)
{
@@ -68,12 +67,12 @@ public override bool Equals(Claim? x, Claim? y)
}
else
{
- return (equal && String.Equals(x.Issuer, y.Issuer, valueComparison));
+ return equal && string.Equals(x.Issuer, y.Issuer, valueComparison);
}
}
///
- public override int GetHashCode(Claim claim)
+ public override int GetHashCode(Claim? claim)
{
if (claim is null) return 0;
diff --git a/src/Storage/tests/Open.IdentityServer.Storage.UnitTests/Stores/Serialization/PersistentGrantSerializerTests.cs b/src/Storage/tests/Open.IdentityServer.Storage.UnitTests/Stores/Serialization/PersistentGrantSerializerTests.cs
index 000b47592..92aac1854 100644
--- a/src/Storage/tests/Open.IdentityServer.Storage.UnitTests/Stores/Serialization/PersistentGrantSerializerTests.cs
+++ b/src/Storage/tests/Open.IdentityServer.Storage.UnitTests/Stores/Serialization/PersistentGrantSerializerTests.cs
@@ -93,7 +93,9 @@ public void Deserialize_WhenRefreshTokenV4WithEmptyClaims_ShouldMigrateSuccessfu
result.Subject!.FindFirst("name")!.Value.Should().Be("Test User");
result.Subject!.FindFirst("email")!.Value.Should().Be("test@example.com");
+#pragma warning disable CS0618 // Type or member is obsolete
result.AccessToken.Should().BeNull();
+#pragma warning restore CS0618 // Type or member is obsolete
result.AccessTokens[string.Empty].Claims
.Should().Contain(c => c.Type == "sid" && c.Value == "session1");
@@ -118,7 +120,9 @@ public void Deserialize_WhenRefreshTokenV5WithAccessTokens_ShouldNotMigrate()
var result = sut.Deserialize(json);
result!.Version.Should().Be(5);
+#pragma warning disable CS0618 // Type or member is obsolete
result.AccessToken.Should().BeNull();
+#pragma warning restore CS0618 // Type or member is obsolete
}
private static string CreateV4RefreshTokenJson() => """
@@ -141,6 +145,6 @@ private static string CreateV4RefreshTokenJson() => """
private class TestDto
{
- public string? Name { get; set; }
+ public string Name { get; set; }
}
}
\ No newline at end of file