Activities of "MichelZ"

  • Template: app
  • Created ABP Studio Version: 0.9.12
  • Current ABP Studio Version: 1.2.2
  • Tiered: Yes
  • Multi-Tenancy: Yes
  • UI Framework: angular
  • Theme: leptonx
  • Theme Style: system
  • Progressive Web App: No
  • Database Provider: ef
  • Database Management System: postgresql
  • Separate Tenant Schema: Yes
  • Mobile Framework: none
  • Public Website: Yes
  • Include Tests: Yes
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • LanguageManagement
    • AuditLogging
    • SaaS
    • OpenIddictAdmin

ABP Version 9.3.1

2025-08-28T11:44:30|ERROR|P:163720|T:20|AbpExceptionFilter||An exception was thrown while activating Volo.Saas.Host.TenantController -> company.product.Tenants.productTenantAppService -> Volo.Abp.Account.AccountAppService -> Volo.Abp.BlobStoring.BlobContainer`1[[Volo.Abp.Account.AccountProfilePictureContainer, Volo.Abp.Account.Pro.Public.Application, Version=9.3.1.0, Culture=neutral, PublicKeyToken=null]].
EXCEPTION: Autofac.Core.DependencyResolutionException: An exception was thrown while activating Volo.Saas.Host.TenantController -> company.product.Tenants.productTenantAppService -> Volo.Abp.Account.AccountAppService -> Volo.Abp.BlobStoring.BlobContainer`1[[Volo.Abp.Account.AccountProfilePictureContainer, Volo.Abp.Account.Pro.Public.Application, Version=9.3.1.0, Culture=neutral, PublicKeyToken=null]].
 ---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Volo.Abp.BlobStoring.IBlobContainerFactory)' on type 'BlobContainer`1'.
 ---> Volo.Abp.AbpException: Could not find the BLOB Storage provider with the type (Volo.Abp.BlobStoring.Database.DatabaseBlobProvider, Volo.Abp.BlobStoring.Database.Domain, Version=9.3.1.0, Culture=neutral, PublicKeyToken=null) configured for the container account-profile-pictures and no default provider was set.
   at Volo.Abp.BlobStoring.DefaultBlobProviderSelector.Get(String containerName)
   at Volo.Abp.BlobStoring.BlobContainerFactory.Create(String name)
   at lambda_method3887(Closure, Object[])
   at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
   --- End of inner exception stack trace ---
   at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
   at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass14_0.<UseSingleConstructorActivation>b__0(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Builder.RegistrationBuilder`3.<>c__DisplayClass41_0.<PropertiesAutowired>b__0(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   --- End of inner exception stack trace ---
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest& request)
   at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest& request)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.&lt;&gt;c__DisplayClass6_0.&lt;CreateControllerFactory&gt;g__CreateController|0(ControllerContext controllerContext)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeNextExceptionFilterAsync&gt;g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

We have added the Minio BLOB provider to create new containers. We have added this to the ConfigureServices of the productHttpApiHostModule.cs:

Configure&lt;AbpBlobStoringOptions&gt;(options =>
 {
     options.Containers.ConfigureDefault(container =>
     {
         container.UseDatabase();
     });

     options.Containers.Configure&lt;AIModelBlobContainer&gt;(container =>
     {
         container.IsMultiTenant = false;

         container.UseMinio(minio =>
         {
             // Manual configuration binding - ABP's automatic binding is failing
             var configuration = context.Services.GetConfiguration();
             var blobSection = configuration.GetSection("BlobStoring:Containers:AIModelBlobContainer:Minio");

             minio.EndPoint = blobSection["EndPoint"];
             minio.AccessKey = blobSection["AccessKey"];
             minio.SecretKey = blobSection["SecretKey"];
             minio.BucketName = blobSection["BucketName"];
             minio.WithSSL = bool.Parse(blobSection["WithSSL"] ?? "true");
         });
     });
 });

Yes, downgrading the package works

I have now traced where the 8.12.1 version comes from. Owl.TokenWildcardIssuerValidator 2.0 :) :)

We do not have external login setup for local currently

[maliming] said: hi

Does the MissingMethodException only happen in Azure?

Can you get the same exception in your local?

Thanks.

We are not running in Azure. This runs in Kubernetes as a Container. If you're asking if it works while logging in locally (Username/Password Authentication) - then yes, that works

Thanks AI Bot. I know how I can potentially resolve this, but it's probably something that should be handled in-product, but I'm not sure if it needs handling directly or via another dependent library.

After updating to 9.3.1, when trying to log in using OpenID (Microsoft Azure), we get this exception:

2025-08-12T07:54:13|ERROR|authserver-69f45bbbbb-g444g |authserver-69f45bbbbb-g444g\app |10.51.2.244 | |T:34 |OpenIdConnectHandler      | |     || |Exception occurred while processing message.
EXCEPTION: System.MissingMethodException: Method not found: 'Void Microsoft.IdentityModel.Tokens.TokenValidationResult..ctor(Microsoft.IdentityModel.Tokens.SecurityToken, Microsoft.IdentityModel.Tokens.TokenHandler, Microsoft.IdentityModel.Tokens.TokenValidationParameters, System.String, System.Collections.Generic.List`1&lt;Microsoft.IdentityModel.Tokens.Experimental.ValidatedToken&gt;)'.
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.ValidateTokenUsingHandlerAsync(String idToken, AuthenticationProperties properties, TokenValidationParameters validationParameters)
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()
2025-08-12T07:54:13|ERROR|authserver-69f45bbbbb-g444g |authserver-69f45bbbbb-g444g\app |10.51.2.244 | |T:34 |ExceptionHandlerMiddleware | |     || |An unhandled exception has occurred while executing the request.
EXCEPTION: Microsoft.AspNetCore.Authentication.AuthenticationFailureException: An error was encountered while handling the remote login.
 ---> System.MissingMethodException: Method not found: 'Void Microsoft.IdentityModel.Tokens.TokenValidationResult..ctor(Microsoft.IdentityModel.Tokens.SecurityToken, Microsoft.IdentityModel.Tokens.TokenHandler, Microsoft.IdentityModel.Tokens.TokenValidationParameters, System.String, System.Collections.Generic.List`1<Microsoft.IdentityModel.Tokens.Experimental.ValidatedToken>)'.
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.ValidateTokenUsingHandlerAsync(String idToken, AuthenticationProperties properties, TokenValidationParameters validationParameters)
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Volo.Abp.AspNetCore.Security.AbpSecurityHeadersMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.&lt;&gt;c__DisplayClass2_0.&lt;&lt;CreateMiddleware&gt;b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.&lt;&gt;c__DisplayClass2_0.&lt;&lt;CreateMiddleware&gt;b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareImpl.&lt;Invoke&gt;g__Awaited|10_0(ExceptionHandlerMiddlewareImpl middleware, HttpContext context, Task task)

Microsoft Packages are all updated, Microsoft.IdentityModel.Tokens resolved Version seems to be 8.12.1 The release notes for this Version do say they had a little accident with leaking experimental code: https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/releases/tag/8.12.1 (PR https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/3259 for remediation)

I don't know if this is something in ABP to solve or upstream, but external login for us does not work in 9.3.1.

└─ Volo.Abp.AspNetCore.MultiTenancy (v9.3.1)
   │     └─ Volo.Abp.AspNetCore (v9.3.1)
   │        └─ Microsoft.AspNetCore.Authentication.OpenIdConnect (v9.0.8)
   │           └─ Microsoft.IdentityModel.Protocols.OpenIdConnect (v8.12.0)
   │              ├─ Microsoft.IdentityModel.Protocols (v8.12.0)
   │              │  └─ Microsoft.IdentityModel.Tokens (v8.12.1)
   │              └─ System.IdentityModel.Tokens.Jwt (v8.12.0)
   │                 ├─ Microsoft.IdentityModel.JsonWebTokens (v8.12.0)
   │                 │  └─ Microsoft.IdentityModel.Tokens (v8.12.1)
   │                 └─ Microsoft.IdentityModel.Tokens (v8.12.1)

Thanks, that nudged me in the right direction. I've opted to replace the IConnectionStringChecker instead, seems to work

    [Dependency(ReplaceServices = true)]
    [ExposeServices(typeof(IConnectionStringChecker), typeof(EncryptedConnectionStringChecker))]
    public class EncryptedConnectionStringChecker : SqlServerConnectionStringChecker, IConnectionStringChecker, ITransientDependency
    {
        private readonly IStringEncryptionService _stringEncryptionService;

        public EncryptedConnectionStringChecker(IStringEncryptionService stringEncryptionService)
        {
            _stringEncryptionService = stringEncryptionService ?? throw new ArgumentNullException(nameof(stringEncryptionService));
        }

        public override async Task<AbpConnectionStringCheckResult> CheckAsync(string connectionString)
        {
            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ArgumentException("Connection string cannot be null or empty.", nameof(connectionString));
            }
            try
            {
                var decryptedConnectionString = _stringEncryptionService.Decrypt(connectionString);
                return await base.CheckAsync(decryptedConnectionString);
            }
            catch (Exception)
            {
                return new AbpConnectionStringCheckResult { Connected = false, DatabaseExists = false };
            }
        }
    }

While I do get what you're telling me bot, I do think that overriding the actual Check logic should work in this case... So please let a human take this one :)

  • Template: app
  • Created ABP Studio Version: 0.8.1
  • Current ABP Studio Version: 1.0.1
  • Tiered: Yes
  • UI Framework: angular
  • Theme: leptonx (lepton actually?)
  • Theme Style: system
  • Progressive Web App: No
  • Database Provider: ef
  • Database Management System: sqlserver
  • Separate Tenant Schema: Yes
  • Mobile Framework: none
  • Public Website: No
  • Optional Modules:
    • GDPR
    • TextTemplateManagement
    • LanguageManagement
    • AuditLogging
    • SaaS
    • OpenIddictAdmin

We currently got an error when trying to create a Tenant:

EXCEPTION: Volo.Abp.UserFriendlyException: The tenant connection string 'Default' is not valid at Volo.Saas.Host.TenantAppService.CheckConnectionStringAsync(Tenant tenant) at Volo.Saas.Host.TenantAppService.<>c__DisplayClass27_0.ETBg5kcYQAHiA0HJrJL.MoveNext() --- End of stack trace from previous location --- at Volo.Saas.Host.TenantAppService.CreateAsync(SaasTenantCreateDto input)

We think this started happening after upgrading to 9.2.0. We have changed ABP to store connection strings encrypted. For this, we assign an encrypted connection string to SaasTenantCreateDto.ConnectionString.Default. This used to work fine, but now results in the error message above.

We have found a method to override on the ITenantAppService which looked promising:

  public override Task<bool> CheckConnectionStringAsync(string connectionString)
  {
      var decrypted = _stringEncryptionService.Decrypt(connectionString);
      return base.CheckConnectionStringAsync(decrypted);
  }

This however did not lead to success.

Any idea how we can fix this?

For further reference, this is how our overridden CreateAsync looks like:

  public override async Task<SaasTenantDto> CreateAsync(SaasTenantCreateDto input)
  {
      var servers = await _availableSqlServerAppService.GetListAsync(new GetAvailableSqlServersInput {AvailableForTenantDatabase = true});
      var first = servers.Items.OrderBy(i => i.NrOfTenants).First();

      var defaultConnectionString = new SqlConnectionStringBuilder(DbConnectionOptions.ConnectionStrings.Default);
      var baseDBName = string.Join('.', defaultConnectionString.InitialCatalog.Split(".").SkipLast(1));

      var connectionString = new SqlConnectionStringBuilder {InitialCatalog = $"{baseDBName}.Tenant.{input.Name}", DataSource = first.SqlServerName, UserID = first.LoginUser, Password = _stringEncryptionService.Decrypt(first.EncryptedPassword), TrustServerCertificate = true};
      input.ConnectionStrings.Default = _stringEncryptionService.Encrypt(connectionString.ConnectionString);

      await CreateAzureDatabaseIfNotExists(connectionString);
      return await base.CreateAsync(input);
  }

Thx

Showing 11 to 20 of 88 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on December 05, 2025, 12:34
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.