From 78db9ea809e604b1caf9824ad3e16dd8e61f00df Mon Sep 17 00:00:00 2001 From: Sergei Calabonga Date: Thu, 12 Dec 2024 16:17:42 +0700 Subject: [PATCH 1/2] authorization code + pkce --- .../Definitions/OpenApi/OpenApiDefinition.cs | 1 + .../OpenIddict/OpenIddictDefinition.cs | 14 +++--- .../HostedServices/OpenIddictWorker.cs | 14 +++++- .../Pages/Connect/Logout.cshtml | 25 ++++++++++ .../Pages/Connect/Logout.cshtml.cs | 50 +++++++++++++++++++ .../Definitions/OpenApi/OpenApiDefinition.cs | 1 + 6 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml create mode 100644 AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml.cs diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs index 393977d..540a48c 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs @@ -57,6 +57,7 @@ public override void ConfigureApplication(WebApplication app) settings.OAuthClientId("client-id-code"); settings.OAuthClientSecret("client-secret-code"); settings.DisplayRequestDuration(); + settings.OAuthUsePkce(); settings.OAuthAppName(AppData.ServiceName); }); } diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs index 728f316..797eefe 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs @@ -33,7 +33,7 @@ public override void ConfigureServices(WebApplicationBuilder builder) // => Password flow // => Refresh token flow options - .AllowAuthorizationCodeFlow()//.RequireProofKeyForCodeExchange() + .AllowAuthorizationCodeFlow().RequireProofKeyForCodeExchange() .AllowPasswordFlow() .AllowClientCredentialsFlow() .AllowRefreshTokenFlow(); @@ -50,10 +50,9 @@ public override void ConfigureServices(WebApplicationBuilder builder) // => options.SetRefreshTokenLifetime(TimeSpan.FromDays(7)); // Enable the token endpoint. - options.SetAuthorizationEndpointUris("connect/authorize") - //.RequireProofKeyForCodeExchange() // enable PKCE - //.SetDeviceEndpointUris("connect/device") - //.SetIntrospectionEndpointUris("connect/introspect") + options.SetAuthorizationEndpointUris("connect/authorize").RequireProofKeyForCodeExchange() // enable PKCE + //.SetDeviceEndpointUris("connect/device") + .SetIntrospectionEndpointUris("connect/introspect") .SetLogoutEndpointUris("connect/logout") .SetTokenEndpointUris("connect/token") //.SetVerificationEndpointUris("connect/verify"), @@ -81,9 +80,10 @@ public override void ConfigureServices(WebApplicationBuilder builder) // Register the ASP.NET Core host and configure the ASP.NET Core options. options .UseAspNetCore() - //.DisableTransportSecurityRequirement() // disable HTTPS + .EnableLogoutEndpointPassthrough() .EnableTokenEndpointPassthrough() - .EnableAuthorizationEndpointPassthrough(); + .EnableAuthorizationEndpointPassthrough() + .DisableTransportSecurityRequirement(); //JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); //JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear(); diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs index 2bb5de3..7bfcf89 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs @@ -50,15 +50,21 @@ await manager.CreateAsync(new OpenIddictApplicationDescriptor ClientSecret = "client-secret-code", DisplayName = "API testing clients with Authorization Code Flow demonstration", RedirectUris = { + new Uri("https://localhost:7207/signin-oidc"), new Uri("https://www.thunderclient.com/oauth/callback"), // https://www.thunderclient.com/ new Uri($"{url}/swagger/oauth2-redirect.html"), // https://swagger.io/ new Uri("https://localhost:20001/swagger/oauth2-redirect.html") // https://swagger.io/ for Module as Example }, - + PostLogoutRedirectUris = + { + new Uri("https://localhost:7207/signout-callback-oidc") + }, Permissions = { // Endpoint permissions OpenIddictConstants.Permissions.Endpoints.Authorization, + OpenIddictConstants.Permissions.Endpoints.Logout, + OpenIddictConstants.Permissions.Endpoints.Introspection, OpenIddictConstants.Permissions.Endpoints.Token, // Grant type permissions @@ -68,6 +74,10 @@ await manager.CreateAsync(new OpenIddictApplicationDescriptor // Scope permissions OpenIddictConstants.Permissions.Prefixes.Scope + "api", OpenIddictConstants.Permissions.Prefixes.Scope + "custom", + OpenIddictConstants.Permissions.Scopes.Email, + OpenIddictConstants.Permissions.Scopes.Address, + OpenIddictConstants.Permissions.Scopes.Profile, + OpenIddictConstants.Permissions.Scopes.Roles, // Response types OpenIddictConstants.Permissions.ResponseTypes.Code, @@ -78,4 +88,4 @@ await manager.CreateAsync(new OpenIddictApplicationDescriptor } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; -} \ No newline at end of file +} diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml new file mode 100644 index 0000000..bf5bcd1 --- /dev/null +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml @@ -0,0 +1,25 @@ +@page +@using Microsoft.AspNetCore.Mvc.TagHelpers +@using Microsoft.Extensions.Primitives +@model Calabonga.Microservice.IdentityModule.Web.Pages.Connect.LogoutModel +@{ + var items = HttpContext.Request.HasFormContentType + ? (IEnumerable>)HttpContext.Request.Form + : HttpContext.Request.Query; +} +
+ +

Are you sure you want to exit?

+ +
+ + @foreach (var parameter in items) + { + + } + + + +
+ +
\ No newline at end of file diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml.cs new file mode 100644 index 0000000..09129dc --- /dev/null +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Pages/Connect/Logout.cshtml.cs @@ -0,0 +1,50 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using OpenIddict.Client.AspNetCore; +using OpenIddict.Server.AspNetCore; + +namespace Calabonga.Microservice.IdentityModule.Web.Pages.Connect; + +public class LogoutModel : PageModel +{ + public void OnGet() + { + } + + public async Task OnPost(string returnUrl) + { + // Retrieve the identity stored in the local authentication cookie. If it's not available, + // this indicate that the user is already logged out locally (or has not logged in yet). + // + // For scenarios where the default authentication handler configured in the ASP.NET Core + // authentication options shouldn't be used, a specific scheme can be specified here. + var result = await HttpContext.AuthenticateAsync(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme); + if (result is not { Succeeded: true }) + { + // Only allow local return URLs to prevent open redirect attacks. + return Redirect(Url.IsLocalUrl(returnUrl) ? returnUrl : "/"); + } + + // Remove the local authentication cookie before triggering a redirection to the remote server. + // + // For scenarios where the default sign-out handler configured in the ASP.NET Core + // authentication options shouldn't be used, a specific scheme can be specified here. + await HttpContext.SignOutAsync(); + + var properties = new AuthenticationProperties(new Dictionary + { + // While not required, the specification encourages sending an id_token_hint + // parameter containing an identity token returned by the server for this user. + [OpenIddictClientAspNetCoreConstants.Properties.IdentityTokenHint] = result.Properties.GetTokenValue(OpenIddictClientAspNetCoreConstants.Tokens.BackchannelIdentityToken) + }) + { + // Only allow local return URLs to prevent open redirect attacks. + RedirectUri = Url.IsLocalUrl(returnUrl) ? returnUrl : "/" + }; + + // Ask the OpenIddict client middleware to redirect the user agent to the identity provider. + return SignOut(properties, OpenIddictServerAspNetCoreDefaults.AuthenticationScheme); + + } +} diff --git a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs index 1d36d7c..ae28a03 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs @@ -58,6 +58,7 @@ public override void ConfigureApplication(WebApplication app) settings.OAuthClientSecret("client-secret-code"); settings.DisplayRequestDuration(); settings.OAuthAppName(AppData.ServiceName); + settings.OAuthUsePkce(); }); } } From a34531646e2315a3859fa02c1c60cb4881864c7d Mon Sep 17 00:00:00 2001 From: Sergei Calabonga Date: Fri, 13 Dec 2024 07:37:37 +0700 Subject: [PATCH 2/2] update Authorization Code Flow --- .../Calabonga.Microservice.IdentityModule.Template.csproj | 2 +- .../Calabonga.Microservice.IdentityModule.Web.csproj | 4 ++-- .../Definitions/OpenApi/OpenApiDefinition.cs | 2 +- .../Definitions/OpenIddict/OpenIddictDefinition.cs | 4 ++-- .../HostedServices/OpenIddictWorker.cs | 4 +--- .../Calabonga.Microservice.IdentityModule.Web/readme.md | 4 ++-- .../Calabonga.Microservice.Module.Template.csproj | 2 +- .../Calabonga.Microservice.Module.Web.csproj | 4 ++-- .../Definitions/OpenApi/OpenApiDefinition.cs | 2 +- .../content/Calabonga.Microservice.Module.Web/readme.md | 5 ++--- README.md | 7 +++++++ 11 files changed, 22 insertions(+), 18 deletions(-) diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/Calabonga.Microservice.IdentityModule.Template.csproj b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/Calabonga.Microservice.IdentityModule.Template.csproj index f1f4a03..171d307 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/Calabonga.Microservice.IdentityModule.Template.csproj +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/Calabonga.Microservice.IdentityModule.Template.csproj @@ -4,7 +4,7 @@ Calabonga.Microservice.IdentityModule.Template - 9.0.0 + 9.0.1 Microservice template with OpenIddict Calabonga Calabonga SOFT © 2019 - $([System.DateTime]::Now.ToString(yyyy)) diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Calabonga.Microservice.IdentityModule.Web.csproj b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Calabonga.Microservice.IdentityModule.Web.csproj index 70fb2d0..3256ac3 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Calabonga.Microservice.IdentityModule.Web.csproj +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Calabonga.Microservice.IdentityModule.Web.csproj @@ -28,11 +28,11 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + - + diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs index 540a48c..f522f3b 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenApi/OpenApiDefinition.cs @@ -15,7 +15,7 @@ public class OpenApiDefinition : AppDefinition // Otherwise, you can change versions of your API by manually. // If you are not going to use git-versioning, do not forget install package "GitInfo" // private const string AppVersion = $"{ThisAssembly.Git.SemVer.Major}.{ThisAssembly.Git.SemVer.Minor}.{ThisAssembly.Git.SemVer.Patch}"; - public const string AppVersion = "9.0.0"; + public const string AppVersion = "9.0.1"; private const string _openApiConfig = "/openapi/v1.json"; diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs index 797eefe..05b46a1 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/Definitions/OpenIddict/OpenIddictDefinition.cs @@ -85,8 +85,8 @@ public override void ConfigureServices(WebApplicationBuilder builder) .EnableAuthorizationEndpointPassthrough() .DisableTransportSecurityRequirement(); - //JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); - //JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear(); + // JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + // JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear(); //options.AddEventHandler(builder => //{ diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs index 7bfcf89..d133522 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/HostedServices/OpenIddictWorker.cs @@ -50,9 +50,8 @@ await manager.CreateAsync(new OpenIddictApplicationDescriptor ClientSecret = "client-secret-code", DisplayName = "API testing clients with Authorization Code Flow demonstration", RedirectUris = { - new Uri("https://localhost:7207/signin-oidc"), new Uri("https://www.thunderclient.com/oauth/callback"), // https://www.thunderclient.com/ - new Uri($"{url}/swagger/oauth2-redirect.html"), // https://swagger.io/ + new Uri($"{url}/swagger/oauth2-redirect.html"), // https://swagger.io/ for IdentityModule as Example new Uri("https://localhost:20001/swagger/oauth2-redirect.html") // https://swagger.io/ for Module as Example }, PostLogoutRedirectUris = @@ -75,7 +74,6 @@ await manager.CreateAsync(new OpenIddictApplicationDescriptor OpenIddictConstants.Permissions.Prefixes.Scope + "api", OpenIddictConstants.Permissions.Prefixes.Scope + "custom", OpenIddictConstants.Permissions.Scopes.Email, - OpenIddictConstants.Permissions.Scopes.Address, OpenIddictConstants.Permissions.Scopes.Profile, OpenIddictConstants.Permissions.Scopes.Roles, diff --git a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/readme.md b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/readme.md index 441230f..cbe8563 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/readme.md +++ b/AspNetCore v9.0/Calabonga.Microservice.IdentityModule.Template/content/Calabonga.Microservice.IdentityModule.Web/readme.md @@ -2,14 +2,14 @@ Please find out all comments with 'ATTENTION!' because that is required some decisions from you. -# About +# About template | Name | Description | | ------------ | ------------------------------------------ | | Name | Microservice Template for ASP.NET Core API | | Author | Calabonga SOFT © 2005-2024 Calabonga SOFT | | Created Date | 2024-11-26 | -| Create From | Microservice-Template NET8.0 | +| Create From | Microservice-Template NET 8.0 | # Versions diff --git a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/Calabonga.Microservice.Module.Template.csproj b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/Calabonga.Microservice.Module.Template.csproj index d9bd36a..cba3e18 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/Calabonga.Microservice.Module.Template.csproj +++ b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/Calabonga.Microservice.Module.Template.csproj @@ -4,7 +4,7 @@ Calabonga.Microservice.Module.Template - 9.0.0 + 9.0.1 Microservice template Calabonga Calabonga SOFT © 2019 - $([System.DateTime]::Now.ToString(yyyy)) diff --git a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Calabonga.Microservice.Module.Web.csproj b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Calabonga.Microservice.Module.Web.csproj index 626d614..554b069 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Calabonga.Microservice.Module.Web.csproj +++ b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Calabonga.Microservice.Module.Web.csproj @@ -23,11 +23,11 @@ - + - + diff --git a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs index ae28a03..e1f3aa5 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs +++ b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/Definitions/OpenApi/OpenApiDefinition.cs @@ -15,7 +15,7 @@ public class OpenApiDefinition : AppDefinition // Otherwise, you can change versions of your API by manually. // If you are not going to use git-versioning, do not forget install package "GitInfo" // private const string AppVersion = $"{ThisAssembly.Git.SemVer.Major}.{ThisAssembly.Git.SemVer.Minor}.{ThisAssembly.Git.SemVer.Patch}"; - public const string AppVersion = "9.0.0"; + public const string AppVersion = "9.0.1"; private const string _openApiConfig = "/openapi/v1.json"; diff --git a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/readme.md b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/readme.md index 441230f..775058a 100644 --- a/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/readme.md +++ b/AspNetCore v9.0/Calabonga.Microservice.Module.Template/content/Calabonga.Microservice.Module.Web/readme.md @@ -2,14 +2,13 @@ Please find out all comments with 'ATTENTION!' because that is required some decisions from you. -# About - +# About template | Name | Description | | ------------ | ------------------------------------------ | | Name | Microservice Template for ASP.NET Core API | | Author | Calabonga SOFT © 2005-2024 Calabonga SOFT | | Created Date | 2024-11-26 | -| Create From | Microservice-Template NET8.0 | +| Create From | Microservice-Template NET 8.0 | # Versions diff --git a/README.md b/README.md index b28dd56..7d60e6a 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,13 @@ To install templates (`Visual Studio`, `Rider`, `dotnet CLI`) please, read [wiki ## История Nimble Framework +### 2024-12-13 Версия 9.0.1 + +* Подключен `EnableLogoutEndpointPassthrough` endpoint, а также `SetIntrospectionEndpointUris`. +* Подключена поддержка `PKCE` для `Authorization Code Flow`. +* Обновились nuget-пакеты в проекте `IdentityModule`. +* Обновились nuget-пакеты в проекте `Module`. + ### 2024-11-26 Версия 9.0.0 * Обновилась версия платформы NET9.0, установлены nuget-пакеты, соответствующие версии.