8000 Update to .NET 9 by cnblogs-dudu · Pull Request #5 · cnblogs/IdentityServer4 · GitHub
[go: up one dir, main page]

Skip to content
8000

Update to .NET 9 #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
May 2, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2305ee2
chore(deps): update TargetFramework to net9.0
cnblogs-dudu Apr 30, 2025
05778f6
build: update global.json
cnblogs-dudu Apr 30, 2025
d1940b1
chore(desp): update packages version in Directory.Build.targets
cnblogs-dudu May 1, 2025
3f03417
fix: use IReadOnlyCollection instead
cnblogs-dudu May 1, 2025
7dfa549
chore(deps): update pacakges
cnblogs-dudu May 1, 2025
1f74be0
fix: use IReadOnlyCollection instead
cnblogs-dudu May 1, 2025
86634c2
chore(deps): update packages
cnblogs-dudu May 1, 2025
f28f82f
chore(deps): update packages
cnblogs-dudu May 1, 2025
26c45e5
fix: use news FluentAssertions apis
cnblogs-dudu May 1, 2025
5d00c32
fix: changes for Bullseye update
cnblogs-dudu May 1, 2025
40a7f4a
ci: use dotnet 9
cnblogs-dudu May 1, 2025
68fc729
chore(deps): rename IdentityModel to Duende.IdentityModel
cnblogs-dudu May 1, 2025
6cd7977
chore: change IdentityServerVersion to 4.3.0
cnblogs-dudu May 1, 2025
248a9ca
refactor: use Duende.IdentityModel.Client
cnblogs-dudu May 2, 2025
c4af605
test: shet ShowPII to true
cnblogs-dudu May 2, 2025
75f4698
fix(test): remove extra comma in json
cnblogs-dudu May 2, 2025
8000
29cf3c2
fix(test): use double quote in json
cnblogs-dudu May 2, 2025
1d15407
refactor: use JsonSerializer of System.Text.Json
cnblogs-dudu May 2, 2025
466ef5e
test: remove a test for changes of System.IdentityModel.Tokens.Jwt
cnblogs-dudu May 2, 2025
bb2e602
test: remove a test align with Duende.IdentityModel.Client
cnblogs-dudu May 2, 2025
02d4583
refactor: use Duende.IdentityModel
cnblogs-dudu May 2, 2025
cf8e784
chore(deps): update samples to .net 9
cnblogs-dudu May 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
chore(deps): rename IdentityModel to Duende.IdentityModel
  • Loading branch information
cnblogs-dudu committed May 1, 2025
commit 68fc729c9313972b5eb84ff518c4ad29ec8380f0
26 changes: 13 additions & 13 deletions samples/Clients/Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
<Project>

<PropertyGroup>
<AspNetVersion>3.1.0</AspNetVersion>
</PropertyGroup>
<PropertyGroup>
<AspNetVersion>3.1.0</AspNetVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Update="IdentityModel" Version="4.3.0" />
<PackageReference Update="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="$(AspNetVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(AspNetVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(AspNetVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.Certificate" Version="$(AspNetVersion)"/>
<PackageReference Update="System.IdentityModel.Tokens.Jwt" Version="5.6.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Update="Duende.IdentityModel" Version="4.3.0" />

<PackageReference Update="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="$(AspNetVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(AspNetVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(AspNetVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.Certificate" Version="$(AspNetVersion)" />

<PackageReference Update="System.IdentityModel.Tokens.Jwt" Version="5.6.0" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion samples/Clients/old/MvcHybrid/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.IdentityModel.Tokens.Jwt;
using IdentityModel;
using Duende.IdentityModel;
using Clients;
using Microsoft.IdentityModel.Tokens;
using Microsoft.AspNetCore.Authentication.Cookies;
Expand Down
4 changes: 2 additions & 2 deletions samples/Clients/old/MvcHybridAutomaticRefresh/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.IdentityModel.Tokens.Jwt;
using IdentityModel;
using Duende.IdentityModel;
using Clients;
using Microsoft.IdentityModel.Tokens;
using Microsoft.AspNetCore.Authentication.Cookies;
Expand Down Expand Up @@ -50,7 +50,7 @@ public void ConfigureServices(IServiceCollection services)
options.Scope.Add("email");
options.Scope.Add("api1");
options.Scope.Add("offline_access");

options.ClaimActions.MapAllExcept("iss", "nbf", "exp", "aud", "nonce", "iat", "c_hash");

options.GetClaimsFromUserInfoEndpoint = true;
Expand Down
2 changes: 1 addition & 1 deletion samples/Clients/old/MvcImplicit/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
Expand Down
2 changes: 1 addition & 1 deletion samples/Clients/old/MvcImplicitJwtRequest/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
Expand Down
4 changes: 2 additions & 2 deletions samples/Clients/old/MvcManual/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
using System.Linq;
using Microsoft.IdentityModel.Tokens;
using System.Collections.Generic;
using IdentityModel;
using Duende.IdentityModel;
using System.Security.Cryptography;
using System.IdentityModel.Tokens.Jwt;
using Clients;
Expand All @@ -32,7 +32,7 @@ public async Task<IActionResult> Secure()
return await StartAuthentication();
}

public async Task <IActionResult> Logout()
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

Expand Down
2 changes: 1 addition & 1 deletion 10000 samples/Clients/src/ConsoleDeviceFlow/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Newtonsoft.Json.Linq;
using System;
Expand Down
18 changes: 9 additions & 9 deletions samples/Clients/src/ConsoleEphemeralMtlsClient/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Newtonsoft.Json.Linq;

Expand All @@ -14,18 +14,18 @@ namespace ConsoleEphemeralMtlsClient
class Program
{
private static X509Certificate2 ClientCertificate;

static async Task Main(string[] args)
{
ClientCertificate = CreateClientCertificate("client");

var response = await RequestTokenAsync();
response.Show();

Console.ReadLine();
await CallServiceAsync(response.AccessToken);
}

static async Task<TokenResponse> RequestTokenAsync()
{
var client = new HttpClient(GetHandler(ClientCertificate));
Expand All @@ -37,7 +37,7 @@ static async Task<TokenResponse> RequestTokenAsync()
.TryGetValue(OidcConstants.Discovery.MtlsEndpointAliases)
.Value<string>(OidcConstants.Discovery.TokenEndpoint)
.ToString();

var response = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = endpoint,
Expand All @@ -64,17 +64,17 @@ static async Task CallServiceAsync(string token)
"\n\nService claims:".ConsoleGreen();
Console.WriteLine(JArray.Parse(response));
}

static X509Certificate2 CreateClientCertificate(string name)
{
X500DistinguishedName distinguishedName = new X500DistinguishedName($"CN={name}");

using (var rsa = RSA.Create(2048))
{
var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1);
var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

request.CertificateExtensions.Add(
new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature , false));
new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature, false));

request.CertificateExtensions.Add(
new X509EnhancedKeyUsageExtension(
Expand All @@ -83,7 +83,7 @@ static X509Certificate2 CreateClientCertificate(string name)
return request.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650)));
}
}

static SocketsHttpHandler GetHandler(X509Certificate2 certificate)
{
var handler = new SocketsHttpHandler
Expand Down
6 changes: 3 additions & 3 deletions samples/Clients/src/ConsoleMTLSClient/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Newtonsoft.Json.Linq;
using System;
Expand Down Expand Up @@ -34,7 +34,7 @@ static async Task<TokenResponse> RequestTokenAsync()
.TryGetValue(OidcConstants.Discovery.MtlsEndpointAliases)
.Value<string>(OidcConstants.Discovery.TokenEndpoint)
.ToString();

var response = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = endpoint,
Expand Down Expand Up @@ -64,7 +64,7 @@ static async Task CallServiceAsync(string token)
static SocketsHttpHandler GetHandler()
{
var handler = new SocketsHttpHandler();

var cert = new X509Certificate2("client.p12", "changeit");
handler.SslOptions.ClientCertificates = new X509CertificateCollection { cert };

Expand Down
10 changes: 5 additions & 5 deletions samples/Clients/src/ConsolePrivateKeyJwtClient/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Microsoft.IdentityModel.Tokens;
using System;
Expand All @@ -16,7 +16,7 @@ namespace ConsolePrivateKeyJwtClient
public class Program
{
private static string rsaKey = "{'d':'GmiaucNIzdvsEzGjZjd43SDToy1pz-Ph-shsOUXXh-dsYNGftITGerp8bO1iryXh_zUEo8oDK3r1y4klTonQ6bLsWw4ogjLPmL3yiqsoSjJa1G2Ymh_RY_sFZLLXAcrmpbzdWIAkgkHSZTaliL6g57vA7gxvd8L4s82wgGer_JmURI0ECbaCg98JVS0Srtf9GeTRHoX4foLWKc1Vq6NHthzqRMLZe-aRBNU9IMvXNd7kCcIbHCM3GTD_8cFj135nBPP2HOgC_ZXI1txsEf-djqJj8W5vaM7ViKU28IDv1gZGH3CatoysYx6jv1XJVvb2PH8RbFKbJmeyUm3Wvo-rgQ','dp':'YNjVBTCIwZD65WCht5ve06vnBLP_Po1NtL_4lkholmPzJ5jbLYBU8f5foNp8DVJBdFQW7wcLmx85-NC5Pl1ZeyA-Ecbw4fDraa5Z4wUKlF0LT6VV79rfOF19y8kwf6MigyrDqMLcH_CRnRGg5NfDsijlZXffINGuxg6wWzhiqqE','dq':'LfMDQbvTFNngkZjKkN2CBh5_MBG6Yrmfy4kWA8IC2HQqID5FtreiY2MTAwoDcoINfh3S5CItpuq94tlB2t-VUv8wunhbngHiB5xUprwGAAnwJ3DL39D2m43i_3YP-UO1TgZQUAOh7Jrd4foatpatTvBtY3F1DrCrUKE5Kkn770M','e':'AQAB','kid':'ZzAjSnraU3bkWGnnAqLapYGpTyNfLbjbzgAPbbW2GEA','kty':'RSA','n':'wWwQFtSzeRjjerpEM5Rmqz_DsNaZ9S1Bw6UbZkDLowuuTCjBWUax0vBMMxdy6XjEEK4Oq9lKMvx9JzjmeJf1knoqSNrox3Ka0rnxXpNAz6sATvme8p9mTXyp0cX4lF4U2J54xa2_S9NF5QWvpXvBeC4GAJx7QaSw4zrUkrc6XyaAiFnLhQEwKJCwUw4NOqIuYvYp_IXhw-5Ti_icDlZS-282PcccnBeOcX7vc21pozibIdmZJKqXNsL1Ibx5Nkx1F1jLnekJAmdaACDjYRLL_6n3W4wUp19UvzB1lGtXcJKLLkqB6YDiZNu16OSiSprfmrRXvYmvD8m6Fnl5aetgKw','p':'7enorp9Pm9XSHaCvQyENcvdU99WCPbnp8vc0KnY_0g9UdX4ZDH07JwKu6DQEwfmUA1qspC-e_KFWTl3x0-I2eJRnHjLOoLrTjrVSBRhBMGEH5PvtZTTThnIY2LReH-6EhceGvcsJ_MhNDUEZLykiH1OnKhmRuvSdhi8oiETqtPE','q':'0CBLGi_kRPLqI8yfVkpBbA9zkCAshgrWWn9hsq6a7Zl2LcLaLBRUxH0q1jWnXgeJh9o5v8sYGXwhbrmuypw7kJ0uA3OgEzSsNvX5Ay3R9sNel-3Mqm8Me5OfWWvmTEBOci8RwHstdR-7b9ZT13jk-dsZI7OlV_uBja1ny9Nz9ts','qi':'pG6J4dcUDrDndMxa-ee1yG4KjZqqyCQcmPAfqklI2LmnpRIjcK78scclvpboI3JQyg6RCEKVMwAhVtQM6cBcIO3JrHgqeYDblp5wXHjto70HVW6Z8kBruNx1AH9E8LzNvSRL-JVTFzBkJuNgzKQfD0G77tQRgJ-Ri7qu3_9o1M4'}";

public static async Task Main()
{
Console.Title = "Console Client Credentials Flow with JWT Assertion";
Expand All @@ -35,7 +35,7 @@ public static async Task Main()
var jwk = new JsonWebKey(rsaKey);
response = await RequestTokenAsync(new SigningCredentials(jwk, "RS256"));
response.Show();

Console.ReadLine();
await CallServiceAsync(response.AccessToken);
}
Expand All @@ -47,7 +47,7 @@ static async Task<TokenResponse> RequestTokenAsync(SigningCredentials credential
var disco = await client.GetDiscoveryDocumentAsync(Constants.Authority);
if (disco.IsError) throw new Exception(disco.Error);

var clientToken = CreateClientToken(credential,"client.jwt", disco.TokenEndpoint);
var clientToken = CreateClientToken(credential, "client.jwt", disco.TokenEndpoint);

var response = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Expand Down Expand Up @@ -83,7 +83,7 @@ static async Task CallServiceAsync(string token)

private static string CreateClientToken(SigningCredentials credential, string clientId, string audience)
{

var now = DateTime.UtcNow;

var token = new JwtSecurityToken(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Newtonsoft.Json.Linq;
using System;
Expand Down
2 changes: 1 addition & 1 deletion samples/Clients/src/Constants/Constants.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="IdentityModel" />
<PackageReference Include="Duende.IdentityModel" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion samples/Clients/src/Constants/TokenResponseExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Newtonsoft.Json.Linq;
using System;
Expand Down
2 changes: 1 addition & 1 deletion samples/Clients/src/MvcAutomaticTokenManagement/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public static int Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Warning()
.MinimumLevel.Override("IdentityModel", LogEventLevel.Debug)
.MinimumLevel.Override("Duende.IdentityModel", LogEventLevel.Debug)
.MinimumLevel.Override("System.Net.Http", LogEventLevel.Information)
.MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Information)
.Enrich.FromLogContext()
Expand Down
4 changes: 2 additions & 2 deletions samples/Clients/src/MvcCode/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
Expand All @@ -18,7 +18,7 @@ public void ConfigureServices(IServiceCollection services)
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

services.AddControllersWithViews();

services.AddHttpClient();

services.AddSingleton<IDiscoveryCache>(r =>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Clients;
using IdentityModel;
using Duende.IdentityModel;
using IdentityModel.Client;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
Expand Down
2 changes: 1 addition & 1 deletion samples/Clients/src/MvcHybridBackChannel/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.IdentityModel.Tokens.Jwt;
using IdentityModel;
using Duende.IdentityModel;
using Clients;
using Microsoft.IdentityModel.Tokens;
using Microsoft.AspNetCore.Authentication.Cookies;
Expand Down
16 changes: 8 additions & 8 deletions samples/KeyManagement/FileSystem/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.DependencyInjection;
using IdentityModel;
using Duende.IdentityModel;
using System.Linq;
using System.IO;
using Microsoft.Extensions.Configuration;
Expand All @@ -31,7 +31,7 @@ public void ConfigureServices(IServiceCollection services)

services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(Path.Combine(Environment.ContentRootPath, "dataprotectionkeys")));
//.ProtectKeysWithCertificate(cert);
//.ProtectKeysWithCertificate(cert);

var builder = services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
Expand Down Expand Up @@ -60,12 +60,12 @@ public void ConfigureServices(IServiceCollection services)
.PersistKeysToFileSystem(Path.Combine(Environment.ContentRootPath, @"signingkeys"))
.ProtectKeysWithDataProtection();

// .PersistKeysWith<TYourStore>() // use this when you implement your own ISigningKeyStore
//.EnableInMemoryCaching() // caching disabled unless explicitly enabled
// run "..\cert\cert.ps1" from a powershell prompt to create new cert/pfx
// put the pfx created in the local machine store
//.ProtectKeysWithX509Certificate("CN=SigningKeysMasterKey")
;
// .PersistKeysWith<TYourStore>() // use this when you implement your own ISigningKeyStore
//.EnableInMemoryCaching() // caching disabled unless explicitly enabled
// run "..\cert\cert.ps1" from a powershell prompt to create new cert/pfx
// put the pfx created in the local machine store
//.ProtectKeysWithX509Certificate("CN=SigningKeysMasterKey")
;
}

public void Configure(IApplicationBuilder app)
Expand Down
9 changes: 5 additions & 4 deletions samples/KeyManagement/database/EF/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

using System;
using System.Linq;
using IdentityModel;
using Duende.IdentityModel;
using IdentityServer4.KeyManagement.EntityFramework;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.DataProtection;
Expand Down Expand Up @@ -43,7 +43,7 @@ public void ConfigureServices(IServiceCollection services)
ConfigureDbContext = b => b.UseSqlServer(cn),
LoggerFactory = LoggerFactory,
});
//.ProtectKeysWithCertificate(cert);
//.ProtectKeysWithCertificate(cert);

var builder = services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
Expand All @@ -68,11 +68,12 @@ public void ConfigureServices(IServiceCollection services)
options.Licensee = "your licensee";
options.License = "your license key";
})
.PersistKeysToDatabase(new DatabaseKeyManagementOptions {
.PersistKeysToDatabase(new DatabaseKeyManagementOptions
{
ConfigureDbContext = b => b.UseSqlServer(cn),
})
.ProtectKeysWithDataProtection()
//.EnableInMemoryCaching() // caching disabled unless explicitly enabled
//.EnableInMemoryCaching() // caching disabled unless explicitly enabled
;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="IdentityModel" />
<PackageReference Include="Duende.IdentityModel" />
</ItemGroup>

</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="IdentityModel" />
<PackageReference Include="Duende.IdentityModel" />
</ItemGroup>

</Project>
</Project>
Loading
0