diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs
index 30e5e81be2..f27fb4c591 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs
@@ -6,6 +6,10 @@ public static class UrlHelpers
{
private const string WildcardSubdomain = "*.";
+ ///
+ /// Check if the subdomain is a subdomain of the domain.
+ /// The Uri must be absolute URI and the scheme, port, and host must be the same.
+ ///
public static bool IsSubdomainOf(string subdomain, string domain)
{
if (Uri.TryCreate(subdomain, UriKind.Absolute, out var subdomainUri) &&
@@ -17,6 +21,10 @@ public static class UrlHelpers
return false;
}
+ ///
+ /// Check if the subdomain is a subdomain of the domain.
+ /// The Uri must be absolute URI and the scheme, port, and host must be the same.
+ ///
public static bool IsSubdomainOf(Uri subdomain, Uri domain)
{
return subdomain.IsAbsoluteUri
diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddictServerModule.cs b/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddictServerModule.cs
index e73bb0e77f..b6e262ee32 100644
--- a/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddictServerModule.cs
+++ b/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddictServerModule.cs
@@ -34,6 +34,7 @@ using Volo.Abp.SettingManagement.Web;
using Volo.Abp.TenantManagement;
using Volo.Abp.TenantManagement.EntityFrameworkCore;
using Volo.Abp.TenantManagement.Web;
+using Volo.Abp.Uow;
namespace OpenIddict.Demo.Server;
@@ -116,7 +117,7 @@ public class OpenIddictServerModule : AbpModule
PreConfigure(options =>
{
options.EnableWildcardDomainSupport = true;
- options.WildcardDomainsFormat.Add("https://{0}.abp.io/signin-oidc");
+ options.WildcardDomainsFormat.Add("https://*.abp.io");
});
PreConfigure(builder =>
@@ -155,8 +156,19 @@ public class OpenIddictServerModule : AbpModule
});
}
- public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
+ public async override Task OnPreApplicationInitializationAsync(ApplicationInitializationContext context)
{
+ using var uow = context.ServiceProvider.GetRequiredService().Begin();
+ {
+ var dbContext = await context.ServiceProvider.GetRequiredService>().GetDbContextAsync();
+ if ((await dbContext.Database.GetPendingMigrationsAsync()).Any())
+ {
+ await dbContext.Database.MigrateAsync();
+ }
+
+ await uow.CompleteAsync();
+ }
+
await context.ServiceProvider
.GetRequiredService()
.SeedAsync();
diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainBase.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainBase.cs
index c3ba2c6bce..7525d75d47 100644
--- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainBase.cs
+++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainBase.cs
@@ -1,10 +1,11 @@
-using System;
+using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
+using Microsoft.IdentityModel.Tokens;
using OpenIddict.Server;
-using Volo.Abp.Text.Formatting;
+using Volo.Abp.Http;
namespace Volo.Abp.OpenIddict.WildcardDomains;
@@ -29,30 +30,24 @@ public abstract class AbpOpenIddictWildcardDomainBase CheckWildcardDomainAsync(string url)
{
- Logger.LogDebug("Checking wildcard domain for url: {url}", url);
-
- foreach (var domainFormat in WildcardDomainOptions.WildcardDomainsFormat)
+ if (WildcardDomainOptions.WildcardDomainsFormat.IsNullOrEmpty())
{
- Logger.LogDebug("Checking wildcard domain format: {domainFormat}", domainFormat);
- var extractResult = FormattedStringValueExtracter.Extract(url, domainFormat, ignoreCase: true);
- if (extractResult.IsMatch)
- {
- Logger.LogDebug("Wildcard domain found for url: {url}", url);
- return Task.FromResult(true);
- }
+ Logger.LogDebug("No wildcard domain format configured.");
+ return Task.FromResult(false);
}
- foreach (var domainFormat in WildcardDomainOptions.WildcardDomainsFormat)
+ Logger.LogDebug("Checking wildcard domain for url: {url}", url);
+ foreach (var domain in WildcardDomainOptions.WildcardDomainsFormat.Select(domainFormat => domainFormat.Replace("{0}", "*")))
{
- Logger.LogDebug("Checking wildcard domain format: {domainFormat}", domainFormat);
- if (domainFormat.Replace("{0}.", "").Equals(url, StringComparison.OrdinalIgnoreCase))
+ Logger.LogDebug("Checking wildcard domain format: {newDomainFormat}", domain);
+ if (UrlHelpers.IsSubdomainOf(url, domain))
{
- Logger.LogDebug("Wildcard domain found for url: {url}", url);
+ Logger.LogDebug("The url: {url} is a wildcard domain of: {domain}", url, domain);
return Task.FromResult(true);
}
}
- Logger.LogDebug("Wildcard domain not found for url: {url}", url);
+ Logger.LogDebug("No wildcard domain found for url: {url}", url);
return Task.FromResult(false);
}
}
diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainOptions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainOptions.cs
index 358974e3d6..54c56178f9 100644
--- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainOptions.cs
+++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainOptions.cs
@@ -6,6 +6,9 @@ public class AbpOpenIddictWildcardDomainOptions
{
public bool EnableWildcardDomainSupport { get; set; }
+ ///
+ /// Wildcard domains format. For example: https://*.abp.io
+ ///
public HashSet WildcardDomainsFormat { get; }
public AbpOpenIddictWildcardDomainOptions()