If your SAST tool reports a specific CVE/GHSA for Scriban, the most reliable check is:
dotnet list package --include-transitive and confirm the resolved Scriban version is the fixed one for that advisory.Links I verified:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Don’t override Scriban to 7.x on ABP 8.2.3. The exception you see is expected because Volo.Abp.TextTemplating.Scriban (v8.2.3) was built against an older Scriban API. In Scriban 7, some types (e.g., Scriban.Parsing.ParserOptions) changed in a breaking way, so ABP 8.2.3’s Scriban integration assembly can no longer load the expected type shape, resulting in:
TypeLoadException ... ParserOptions ... value type mismatch.
Recommended mitigation on ABP 8.2.3 / .NET 8 (no framework/runtime upgrade):
<PackageReference Include="Scriban" Version="7.0.0" />).TemplateContext instances across renders in your own code. The reported GHSA/CWE scenario requires reusing the same TemplateContext and then tightening MemberFilter/MemberRenamer later. ABP’s integration is designed around rendering templates per call (i.e., no long-lived/reused TemplateContext pattern in normal usage).<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/GHSA-5wr9-m6jw-xx44" />
</ItemGroup>
What not to do
Volo.Abp.TextTemplating.Scriban v8.2.3 (as your runtime error demonstrates).If you need Scriban 7.x fix without suppression
Volo.Abp.TextTemplating.Scriban package is built for Scriban 7.x (i.e., an ABP upgrade path), not just a runtime/.NET upgrade toggle.Sources (validated):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
PermissionDefinition.RequireFeatures(...) affects authorization/runtime checks (i.e., whether a permission is considered applicable/grantable when evaluating grants), but the Permission Management UI can still list the permission definitions because it primarily renders from the permission definition list and does not automatically “hide” permissions just because a feature is disabled.
So, what you’re seeing is expected with the current behavior: disabling a feature does not guarantee that the permission nodes disappear from the Permission Management modal.
If you want them hidden, you need to disable/remove the permission definitions themselves when the feature is disabled (so they won’t be part of the definition list), rather than only attaching RequireFeatures(...).
PostDefine) and setting IsEnabled = false for that tenant/edition scenario is not possible directly because permission definitions are static at startup (not per-tenant).IFeatureChecker and excludes permissions that require disabled features.About ABP Suite generation:
.RequireFeatures(...) to generated permissions, and there’s also no “group-level” RequireFeatures(...) that automatically applies to all children in the way you expect; you must add it per-permission (or create your own helper/extension method to apply it consistently in code after generation).(No verified source available for this specific query.)
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
UpdateProfileDto belongs to the Account module (not Identity). ABP moved the whole profile API (IProfileAppService + related DTOs like UpdateProfileDto) from Identity to Account earlier (so it’s normal you don’t find it under Identity sources).
For the specific change you hit (UpdateProfileDto.AppName became required / newly required in v10.1.1): I can’t verify a public PR/commit/discussion for that change with the tools available here.
UpdateProfileDto / AppName but found no occurrences, which indicates the change is likely in a part not included in the indexed open-source repos (or in a product/module repo not available here).Practical guidance (so your custom React client won’t break again on such DTO changes):
appName (typical values used by ABP UIs are UI identifiers like "Angular", etc.). In your case, pick a stable constant for your frontend, e.g. "React" or your product name, and keep it consistent.Where you can reliably track some profile API history:
Links I can confirm are reachable:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
You’re not missing anything: in ABP 10.2.0, the OpenIddict Applications UI (Blazor Server) doesn’t expose a proper multi-value editor for RedirectUris (which is stored as a JSON array in the DB). So the UI ends up behaving like a single Redirect URI field.
And yes: if you open an application in that UI and save it, you can overwrite the JSON array with only what the UI sends (often just one URI). So it can effectively “throw away” the additional redirect URIs.
Do not edit/save OpenIddict Applications from the built-in UI if the application has multiple redirect URIs you need to preserve.
Use one of these safe approaches instead:
OpenIddict.Applications section so they’re consistently generated/updated by the seeder (and you’re not hand-editing UI data).RedirectUris JSON array in OpenIddictApplications manually.List<string> and serializes/deserializes to the JSON array correctly (recommended if you want it editable from UI).If your goal is “at least show raw JSON so we can edit it”:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
RedirectUris. That’s why you only see (and can effectively edit) a single Redirect URI in the modal/page, even though the database stores RedirectUris as a JSON array (e.g. ["https://url1","https://url2"]).What you should do to avoid losing RedirectUris (safe options):
RedirectUris column), orList<string> and serializes/deserializes properly, orRelated (often confused) setting:
RedirectAllowedUrls in appsettings.json is a separate deployment concern (ABP side) and not the per-client OpenIddict redirect URI list (OpenIddict side). It won’t solve the “multiple redirect URIs per client” editing problem.If you want this to be fixed in the commercial UI, please report it to ABP Commercial support with a minimal reproduction; that’s how it gets tracked and patched.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
What ABP can do in the background (only if you enabled it):
ABP features you mentioned are not timer-based connection creators by themselves:
IsDynamicClaimsEnabled = true): claims are typically evaluated during authentication / request pipeline usage, not via a standalone timer that continuously opens DB connections during total app idleness.Does ABP have internal background processes that open outbound connections independently of HTTP requests?
Only if you are running background workers/jobs (including Hangfire integration) in that same process. ABP provides the infrastructure, but it doesn’t continuously “refresh cache / flush audit logs / renew locks” on a timer by default in an otherwise idle app.
If you are running Hangfire server, that alone is sufficient to explain SQL connections during “idle HTTP”.
With dynamic claims + multi-tenancy, do SecurityStampValidator or MultiTenantConnectionStringResolver create connections on a timer?
No—those are request/job execution driven, not timer-driven background loops. They may open DB connections when invoked, but they’re not expected to steadily increase socket count with truly zero activity.
Similar socket accumulation with ABP + Hangfire.SqlServer on Azure App Service?
I don’t have a verified ABP-specific source that ties ABP to socket leaks here. However, Hangfire.SqlServer on App Service is a common suspect for persistent SQL connectivity and frequent polling. If sockets are accumulating (not just stable), that points more to a leak/misconfiguration or platform/network exhaustion than to ABP framework internals.
AddHangfireServer() and ABP Hangfire integration starting it).AsyncPeriodicBackgroundWorkerBase workers, they will run continuously and can trigger DB usage.This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Password_A keeps working.Fix (recommended): ensure the password is set in the AuthServer’s Identity DB under the target tenant context
using (CurrentTenant.Change(targetTenantId))
{
// set password for the tenant's admin/user via IdentityUserManager/UserAppService
// (this ensures it updates the tenant's identity store that AuthServer uses)
}
Verification steps
AbpUsers.PasswordHash (in the tenant schema) and confirm it changes when you set the password from Host.Password_B.—
Sources (verified)
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Please contact us at https://abp.io/contact.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
replaceableComponents.add(...) is still the correct mechanism in ABP v10 Angular; it did not get removed.eThemeLeptonXComponents.Navbar changed to eThemeLeptonXComponents.ToolbareThemeLeptonXComponents.Sidebar changed to eThemeLeptonXComponents.NavbarSo if your “header” customization was targeting the old Navbar key, it will no longer be used. Update your registration to the correct key(s) used by your layout.
this.replaceableComponents.add({
component: BreadcrumbComponent,
key: eThemeLeptonXComponents.Breadcrumb,
});
this.replaceableComponents.add({
component: AppSettingsComponent,
key: eThemeLeptonXComponents.Footer,
});
are still conceptually correct, but after upgrading you must ensure:
eThemeLeptonXComponents enum from the LeptonX theme package version you’re onToolbar/Navbar keys as noted abovekey: values with that list.Links (validated):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.