Browse Source

Attach auth server current culture info to response.

pull/20428/head
maliming 2 years ago
parent
commit
f53967b316
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 29
      framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs
  2. 7702
      modules/openiddict/app/angular/yarn.lock
  3. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs
  4. 5
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs
  5. 43
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Globalization/AttachCultureInfo.cs

29
framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs

@ -3,11 +3,15 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OAuth.Claims;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.RequestLocalization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Volo.Abp;
using Volo.Abp.AspNetCore.Authentication.OpenIdConnect;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.Localization;
using Volo.Abp.Security.Claims;
namespace Microsoft.Extensions.DependencyInjection;
@ -52,6 +56,7 @@ public static class AbpOpenIdConnectExtensions
options.Events.OnTokenValidated = async (context) =>
{
var logger = context.HttpContext.RequestServices.GetRequiredService<ILogger<AbpAspNetCoreAuthenticationOpenIdConnectModule>>();
var client = context.HttpContext.RequestServices.GetRequiredService<IOpenIdLocalUserCreationClient>();
try
{
@ -59,8 +64,28 @@ public static class AbpOpenIdConnectExtensions
}
catch (Exception ex)
{
var logger = context.HttpContext.RequestServices.GetService<ILogger<AbpAspNetCoreAuthenticationOpenIdConnectModule>>();
logger?.LogException(ex);
logger.LogException(ex);
}
var culture = context.ProtocolMessage.GetParameter("culture");
var uiCulture = context.ProtocolMessage.GetParameter("ui-culture");
if (CultureHelper.IsValidCultureCode(culture) && CultureHelper.IsValidCultureCode(uiCulture))
{
context.Response.OnStarting(() =>
{
logger.LogInformation($"Setting culture and ui-culture to the response. culture: {culture}, ui-culture: {uiCulture}");
AbpRequestCultureCookieHelper.SetCultureCookie(
context.HttpContext,
new RequestCulture(culture, uiCulture)
);
return Task.CompletedTask;
});
}
else
{
logger.LogWarning($"Invalid culture or ui-culture parameter in the OpenIdConnect response. culture: {culture}, ui-culture: {uiCulture}");
}
};

7702
modules/openiddict/app/angular/yarn.lock

File diff suppressed because it is too large

2
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs

@ -5,6 +5,7 @@ using OpenIddict.Server;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.Modularity;
using Volo.Abp.OpenIddict.Globalization;
using Volo.Abp.OpenIddict.Scopes;
using Volo.Abp.OpenIddict.WildcardDomains;
using Volo.Abp.Security.Claims;
@ -136,6 +137,7 @@ public class AbpOpenIddictAspNetCoreModule : AbpModule
builder.AddEventHandler(RemoveClaimsFromClientCredentialsGrantType.Descriptor);
builder.AddEventHandler(AttachScopes.Descriptor);
builder.AddEventHandler(AttachCultureInfo.Descriptor);
services.ExecutePreConfiguredActions(builder);
});

5
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs

@ -15,4 +15,9 @@ public class AbpOpenIddictAspNetCoreOptions
/// Default: true.
/// </summary>
public bool AddDevelopmentEncryptionAndSigningCertificate { get; set; } = true;
/// <summary>
/// Attach auth server current culture info to response.
/// </summary>
public bool AttachCultureInfo { get; set; } = true;
}

43
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Globalization/AttachCultureInfo.cs

@ -0,0 +1,43 @@
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using OpenIddict.Server;
namespace Volo.Abp.OpenIddict.Globalization;
public class AttachCultureInfo : IOpenIddictServerHandler<OpenIddictServerEvents.ApplyAuthorizationResponseContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ApplyAuthorizationResponseContext>()
.UseSingletonHandler<AttachCultureInfo>()
.SetOrder(OpenIddictServerHandlers.Authentication.AttachIssuer.Descriptor.Order + 1_000)
.SetType(OpenIddictServerHandlerType.Custom)
.Build();
protected IOptions<AbpOpenIddictAspNetCoreOptions> Options { get; }
public AttachCultureInfo(IOptions<AbpOpenIddictAspNetCoreOptions> options)
{
Options = options;
}
public ValueTask HandleAsync(OpenIddictServerEvents.ApplyAuthorizationResponseContext context)
{
Check.NotNull(context, nameof(context));
if (Options.Value.AttachCultureInfo)
{
if (!context.Response.HasParameter("culture"))
{
context.Response.SetParameter("culture", CultureInfo.CurrentCulture.Name);
}
if (!context.Response.HasParameter("ui-culture"))
{
context.Response.SetParameter("ui-culture", CultureInfo.CurrentUICulture.Name);
}
}
return default;
}
}
Loading…
Cancel
Save