Activities of "vmquang95"

Hi

Our team is currently building a medical data storage and management application using the ABP Framework. Given the highly sensitive nature of our domain, our data is primarily stored in two locations:

  • Physical Files: Stored via S3 (MinIO).
  • Relational Database: Stored in PostgreSQL.

Core Security Objectives:

  • Data Confidentiality: Ensure absolute security for Personally Identifiable Information (PII) at rest (Data at Rest).
  • Centralized Key Management: Ensure the lifecycle of encryption keys is strictly and securely managed, isolated from the application logic.

To achieve these goals, I would like to ask ABP for advice on the best practices and implementation strategies for data encryption within the ABP ecosystem for the following two issues:


Issue 1: Physical File Encryption (XML Files on S3/MinIO)

Our system currently stores medical records as XML files via S3 (MinIO).

  • ABP Modules/Packages: Does ABP provide any built-in modules, packages, or integrations (e.g., intercepting the BLOB Storing module) that support transparent encryption/decryption of these files before uploading them to S3?
  • Architecture Flow: What should the standard encryption/decryption flow look like to optimize performance?
  • Algorithms: Which encryption algorithms are recommended for this specific use case?
  • Key Management: How should we securely manage, store, and rotate encryption keys for this file system?

Issue 2: Field-Level Data Encryption in PostgreSQL

Our PostgreSQL database contains highly sensitive patient information such as: National ID/Health Insurance Numbers, Full Names, Addresses, Medical History, etc.

  • ABP Support Mechanisms: To what extent does the framework support encrypting these properties? (e.g., using EF Core Value Converters, or does ABP have specific Data Masking/Encryption features?).
  • Tokenization vs. Encryption: What built-in mechanisms does ABP offer regarding Encryption vs. Tokenization? What are the standard algorithms used?
  • Architecture Flow: How does the read/write flow work for encrypted data fields, especially when performing querying/searching operations on them?
  • Key Management: Similar to the file system, how should we set up the management of Master Keys or Data Encryption Keys (DEK) for the database in ABP?

I would greatly appreciate any real-world experience, insights, keywords, or related documentation you could share. Thank you!

I have a project integrated with another system (let’s call it System B). System B is responsible for managing user information and provides us with a sessionCode to identify users. When the sessionCode is valid, System B returns the full user information.

In our project, we plan to use this sessionCode for authentication by passing it through the request header. Technically, we can customize this behavior using Middleware or an ActionFilter to validate the sessionCode.

However, we would still like to leverage ABP’s built-in user context, specifically ICurrentUser, for use in Domain Services and other business logic.

So my question is: Is there a way to customize the authentication mechanism in ABP so that we can validate the sessionCode and still populate ICurrentUser properly?

Thank you.

I’m currently working on a project built with an ABP Microservice architecture, using Angular for the web UI. It has been working very well for the existing system.

Now, we need to develop a Mini App for mobile (essentially a webview embedded an existing mobile application). The project is reusing all existing backend services as the Mini App server.

The main question is about the frontend approach:

  • Reusing the existing Angular UI doesn’t seem suitable because it is not optimized for mobile interfaces.
  • Creating a new Angular project raises questions about how to best leverage existing ABP features and infrastructure while still ensuring a mobile-optimized UI.

What would be the recommended approach in this case to:

  • Reuse as much as possible from ABP (e.g., authentication, API integration, modules, etc.)
  • While building a UI that is properly optimized for mobile (Mini App / WebView context)?

Thank you!

I have built a microservice-based application with multi-tenancy, and it has already been deployed and is running in the Production environment.

Now, I would like to migrate all tenant-related data from the Production environment to a different Test environment. The goal is not to create new tenants, but to reuse the existing tenants from Production with all their original information.

What steps should I take to achieve this?

Thank you.

  • Template: microservice
  • Created ABP Studio Version: 1.3.3
  • Current ABP Studio Version: 2.1.3
  • Multi-Tenancy: Yes
  • UI Framework: blazor-server
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Run Install Libs: Yes
  • Database Provider: ef
  • Database Management System: sqlserver
  • Mobile Framework: none
  • Public Website: No
  • Social Login: Yes
  • Include Tests: Yes
  • Dynamic Localization: Yes
  • Kubernetes Configuration: Yes
  • Grafana Dashboard: Yes
  • Use Local References: No
  • Aspire: No
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • AuditLogging
    • Chat
    • OpenIddictAdmin
  • Selected Languages: Vietnamese, English
  • Default Language: Vietnamese
  • Create Command: abp new demoKCB -t microservice --ui-framework blazor-server --database-provider ef --database-management-system sqlserver --theme leptonx --skip-migrator --without-cms-kit --dont-run-bundling -no-language-management -chat -file-management

I am deploying an ABP microservice–based project using Docker Compose, and the application encounters an error when running the AuthServer. The application returns an HTTP 500 (Internal Server Error) from the server side. After checking the logs, I found the following error:

  • Exception message and full stack trace:

I have checked the language-related tables in the database, with the following results. I would appreciate any assistance to help resolve this issue so the project can continue as soon as possible

  • Template: microservice
  • Created ABP Studio Version: 2.0.2
  • Current ABP Studio Version: 2.1.0
  • Multi-Tenancy: Yes
  • UI Framework: angular
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Run Install Libs: Yes
  • Database Provider: ef
  • Database Management System: postgresql
  • Mobile Framework: none
  • Public Website: No
  • Social Login: Yes
  • Include Tests: Yes
  • Dynamic Localization: Yes
  • Kubernetes Configuration: Yes
  • Grafana Dashboard: Yes
  • Use Local References: No
  • Aspire: No
  • Optional Modules:
    • FileManagement
    • TextTemplateManagement
    • AuditLogging
    • OpenIddictAdmin
  • Selected Languages: Vietnamese (Vietnam), English (United Kingdom)
  • Default Language: Vietnamese (Vietnam)
  • Create Command: abp new CsdlAttp -t microservice --ui-framework angular --database-provider ef --database-management-system postgresql --theme leptonx --skip-migrator --without-cms-kit --dont-run-bundling -no-gdpr -no-language-management -file-management
  • Exception message and full stack trace: CsdlAttp.AdministrationService.Tests test net10.0 failed with 2 error(s) (6.9s) D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\bin\Debug\net10.0\CsdlAttp.AdministrationService.Tests.dll : error TESTERROR: CsdlAttp.AdministrationService.Tests.Controllers.DemoController_Tests.HelloWorld (5s 9ms): Error Message: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such table: AbpLanguages'. Stack Trace: at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellat ionToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync() at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken) at Volo.Abp.LanguageManagement.EntityFrameworkCore.EfCoreLanguageRepository.GetListByIsEnabledAsync(Boolean isEnabled, CancellationToken cancellationToken) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Abp.LanguageManagement.DatabaseLanguageProvider.q5L442B2Z() at Volo.Abp.Caching.DistributedCache2.GetOrAddAsync(TCacheKey key, Func1 factory, Func1 optionsFactory, Nullable1 hideErrors, Boolean considerUow, CancellationToke n token) at Volo.Abp.LanguageManagement.DatabaseLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>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.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCt s, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) at CsdlAttp.AdministrationService.Tests.AdministrationServiceIntegrationTestBase.GetResponseAsync(String url, HttpStatusCode expectedStatusCode) in D:\csdl-attp\servic es\administration\CsdlAttp.AdministrationService.Tests\AdministrationServiceIntegrationTestBase.cs:line 34 at CsdlAttp.AdministrationService.Tests.AdministrationServiceIntegrationTestBase.GetResponseAsStringAsync(String url, HttpStatusCode expectedStatusCode) in D:\csdl-att p\services\administration\CsdlAttp.AdministrationService.Tests\AdministrationServiceIntegrationTestBase.cs:line 26 at CsdlAttp.AdministrationService.Tests.Controllers.DemoController_Tests.HelloWorld() in D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\Cont rollers\DemoController_Tests.cs:line 17 --- End of stack trace from previous location --- D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\bin\Debug\net10.0\CsdlAttp.AdministrationService.Tests.dll : error TESTERROR: CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions (5s 46ms): Error Message: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such table: AbpLanguageTexts'. Stack Trace: at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.InitializeReader(Enumerator enumerator) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__22_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.Storage.NonRetryingExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Volo.Abp.LanguageManagement.EntityFrameworkCore.EfCoreLanguageTextRepository.GetList(String resourceName, String cultureName) at Castle.Proxies.Invocations.ILanguageTextRepository_GetList.InvokeMethodOnTarget() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.DynamicProxy.AbstractInvocation.ProceedInfo.Invoke() at Castle.DynamicProxy.AsyncInterceptorBase.ProceedSynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) --- End of stack trace from previous location --- at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed at Castle.Proxies.IBasicRepository1Proxy_7.GetList(String resourceName, String cultureName) at Volo.Abp.LanguageManagement.DynamicResourceLocalizer.CreateCacheItem(LocalizationResourceBase resource, String cultureName) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, IAuditingHelper auditingHelper, IAuditLogSc ope auditLogScope) at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAudit ingManager auditingManager, IAuditingHelper auditingHelper, IUnitOfWorkManager unitOfWorkManager) at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAudit ingManager auditingManager, IAuditingHelper auditingHelper, IUnitOfWorkManager unitOfWorkManager) at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions() in D:\csdl-attp\services\administration\CsdlAttp.Admini strationService.Tests\ApplicationServices\PermissionAppService_Tests.cs:line 26 --- End of stack trace from previous location ---

  • Steps to reproduce the issue: Hello ABP support team,

Our project is encountering an issue related to testing. The project requirement is that all services must pass dotnet test. However, among all the services, AdministrationService fails when running dotnet test. In the output, the error indicates that several tables related to Languages are missing. Specifically: Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: AbpLanguages' Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: AbpLanguageTexts'. CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions (5s 46ms):
Error Message: Microsoft.Data.Sqlite.SqliteException: SQLite Error 1: 'no such table: AbpLanguageTexts'.

Based on the ABP documentation (https://abp.io/docs/latest/framework/data/entity-framework-core/migrations ) and the ABP AI assistant, it seems I need to manually add the table creation logic for the Language module inside the AdministrationServiceTestsModule.

I would like to confirm with the ABP support team: What is the root cause of this issue, and what is the recommended way to fix it? Thank you.

volo.abp.studio.cli 2.1.0 abp volo.abp.suite 10.0.0 abp-suite

  • Template: microservice
  • Created ABP Studio Version: 2.0.2
  • Current ABP Studio Version: 2.1.0
  • Multi-Tenancy: Yes
  • UI Framework: angular
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Run Install Libs: Yes
  • Database Provider: ef
  • Database Management System: postgresql
  • Mobile Framework: none
  • Public Website: No
  • Social Login: Yes
  • Include Tests: Yes
  • Dynamic Localization: Yes
  • Kubernetes Configuration: Yes
  • Grafana Dashboard: Yes
  • Use Local References: No
  • Aspire: No
  • Optional Modules:
    • FileManagement
    • TextTemplateManagement
    • AuditLogging
    • OpenIddictAdmin
  • Selected Languages: Vietnamese (Vietnam), English (United Kingdom)
  • Default Language: Vietnamese (Vietnam)
  • Create Command: abp new CsdlAttp -t microservice --ui-framework angular --database-provider ef --database-management-system postgresql --theme leptonx --skip-migrator --without-cms-kit --dont-run-bundling -no-gdpr -no-language-management -file-management
  • Exception message and full stack trace: System.NullReferenceException: Object reference not set to an instance of an object. at Task<bool> Volo.Abp.Studio.UI.ViewModels.NewModule.NewModuleTemplateAdditionalOptionsWizardPageViewModel.BeforeNextPageAsync() at async Task Volo.Abp.Studio.UI.ViewModels.NewModule.NewModuleTemplateWizardWindowViewModel.UP5BhRG7LM()
  • Steps to reproduce the issue: Hello, Our team has just updated ABP to version 2.1.0, and we encountered an issue when trying to add a new service to our current Microservice project. This error prevents our team from continuing the work. We kindly ask for your support as soon as possible so we can resume our development.

Thank you!

Showing 1 to 7 of 7 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.8.0-preview. Updated on October 21, 2026, 11:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.