From 7424286282b9ad4faae92d9aede75ac06bae14f0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 9 Mar 2021 14:03:02 +0800 Subject: [PATCH 1/3] Add RequestedClaims to AbpClaimsPrincipalOptions --- .../Volo/Abp/Security/AbpSecurityModule.cs | 2 +- .../Claims/AbpClaimsPrincipalFactory.cs | 4 ++-- .../Claims/AbpClaimsPrincipalFactoryOptions.cs | 14 -------------- .../Claims/AbpClaimsPrincipalOptions.cs | 18 ++++++++++++++++++ .../Abp/IdentityServer/AbpClaimsService.cs | 18 +++++++++++------- .../AbpIdentityServerDomainModule.cs | 10 +++++++++- .../AspNetIdentity/AbpProfileService.cs | 4 ++-- 7 files changed, 43 insertions(+), 27 deletions(-) delete mode 100644 framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs create mode 100644 framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs index cf517f0de4..98759bcaa2 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs @@ -61,7 +61,7 @@ namespace Volo.Abp.Security } }); - services.Configure(options => + services.Configure(options => { options.Contributors.AddIfNotContains(contributorTypes); }); diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs index b00b38ea8c..7a3ec769c3 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs @@ -9,11 +9,11 @@ namespace Volo.Abp.Security.Claims public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientDependency { protected IServiceScopeFactory ServiceScopeFactory { get; } - protected AbpClaimsPrincipalFactoryOptions Options { get; } + protected AbpClaimsPrincipalOptions Options { get; } public AbpClaimsPrincipalFactory( IServiceScopeFactory serviceScopeFactory, - IOptions abpClaimOptions) + IOptions abpClaimOptions) { ServiceScopeFactory = serviceScopeFactory; Options = abpClaimOptions.Value; diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs deleted file mode 100644 index 8083a018ee..0000000000 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Volo.Abp.Collections; - -namespace Volo.Abp.Security.Claims -{ - public class AbpClaimsPrincipalFactoryOptions - { - public ITypeList Contributors { get; } - - public AbpClaimsPrincipalFactoryOptions() - { - Contributors = new TypeList(); - } - } -} diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs new file mode 100644 index 0000000000..6e9b584aaa --- /dev/null +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Volo.Abp.Collections; + +namespace Volo.Abp.Security.Claims +{ + public class AbpClaimsPrincipalOptions + { + public ITypeList Contributors { get; } + + public List RequestedClaims { get; } + + public AbpClaimsPrincipalOptions() + { + Contributors = new TypeList(); + RequestedClaims = new List(); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs index a032ce6824..50750ff567 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs @@ -4,12 +4,15 @@ using System.Security.Claims; using IdentityModel; using IdentityServer4.Services; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Volo.Abp.Security.Claims; namespace Volo.Abp.IdentityServer { public class AbpClaimsService : DefaultClaimsService { + protected readonly AbpClaimsPrincipalOptions Options; + private static readonly string[] AdditionalOptionalClaimNames = { AbpClaimTypes.TenantId, @@ -20,20 +23,21 @@ namespace Volo.Abp.IdentityServer JwtClaimTypes.FamilyName, }; - public AbpClaimsService(IProfileService profile, ILogger logger) + public AbpClaimsService( + IProfileService profile, + ILogger logger, + IOptions options) : base(profile, logger) { + Options = options.Value; } protected override IEnumerable FilterRequestedClaimTypes(IEnumerable claimTypes) { return base.FilterRequestedClaimTypes(claimTypes) - .Union(new []{ - AbpClaimTypes.TenantId, - AbpClaimTypes.EditionId - }); + .Union(Options.RequestedClaims); } - + protected override IEnumerable GetOptionalClaims(ClaimsPrincipal subject) { return base.GetOptionalClaims(subject) @@ -52,4 +56,4 @@ namespace Volo.Abp.IdentityServer } } } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 328c70cc8a..92fd0501d3 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -10,7 +10,6 @@ using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.Identity; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.AspNetIdentity; -using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.IdentityResources; @@ -19,6 +18,7 @@ using Volo.Abp.Modularity; using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending.Modularity; using Volo.Abp.Security; +using Volo.Abp.Security.Claims; using Volo.Abp.Validation; using Volo.Abp.Threading; @@ -54,6 +54,14 @@ namespace Volo.Abp.IdentityServer options.EtoMappings.Add(typeof(AbpIdentityServerDomainModule)); }); + Configure(options => + { + options.RequestedClaims.AddRange(new []{ + AbpClaimTypes.TenantId, + AbpClaimTypes.EditionId + }); + }); + AddIdentityServer(context.Services); } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs index 3eb14131f1..224abc6c10 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity } [UnitOfWork] - public async override Task GetProfileDataAsync(ProfileDataRequestContext context) + public override async Task GetProfileDataAsync(ProfileDataRequestContext context) { using (CurrentTenant.Change(context.Subject.FindTenantId())) { @@ -33,7 +33,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity } [UnitOfWork] - public async override Task IsActiveAsync(IsActiveContext context) + public override async Task IsActiveAsync(IsActiveContext context) { using (CurrentTenant.Change(context.Subject.FindTenantId())) { From 62a801f545dfac58f25c101b52b98813161c94ff Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 9 Mar 2021 14:31:25 +0800 Subject: [PATCH 2/3] Added AbpClaimsServiceOptions --- .../Volo/Abp/Security/AbpSecurityModule.cs | 2 +- .../Security/Claims/AbpClaimsPrincipalFactory.cs | 8 ++++---- ...ions.cs => AbpClaimsPrincipalFactoryOptions.cs} | 7 ++----- .../Volo/Abp/IdentityServer/AbpClaimsService.cs | 4 ++-- .../Abp/IdentityServer/AbpClaimsServiceOptions.cs | 14 ++++++++++++++ .../AbpIdentityServerDomainModule.cs | 2 +- 6 files changed, 24 insertions(+), 13 deletions(-) rename framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/{AbpClaimsPrincipalOptions.cs => AbpClaimsPrincipalFactoryOptions.cs} (60%) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsServiceOptions.cs diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs index 98759bcaa2..cf517f0de4 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs @@ -61,7 +61,7 @@ namespace Volo.Abp.Security } }); - services.Configure(options => + services.Configure(options => { options.Contributors.AddIfNotContains(contributorTypes); }); diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs index 7a3ec769c3..6ae077580c 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs @@ -9,14 +9,14 @@ namespace Volo.Abp.Security.Claims public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientDependency { protected IServiceScopeFactory ServiceScopeFactory { get; } - protected AbpClaimsPrincipalOptions Options { get; } + protected AbpClaimsPrincipalFactoryOptions FactoryOptions { get; } public AbpClaimsPrincipalFactory( IServiceScopeFactory serviceScopeFactory, - IOptions abpClaimOptions) + IOptions abpClaimOptions) { ServiceScopeFactory = serviceScopeFactory; - Options = abpClaimOptions.Value; + FactoryOptions = abpClaimOptions.Value; } public virtual async Task CreateAsync() @@ -27,7 +27,7 @@ namespace Volo.Abp.Security.Claims var context = new AbpClaimsPrincipalContributorContext(claimsPrincipal, scope.ServiceProvider); - foreach (var contributorType in Options.Contributors) + foreach (var contributorType in FactoryOptions.Contributors) { var contributor = (IAbpClaimsPrincipalContributor) scope.ServiceProvider.GetRequiredService(contributorType); await contributor.ContributeAsync(context); diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs similarity index 60% rename from framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs rename to framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs index 6e9b584aaa..febe0c5661 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalOptions.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs @@ -3,16 +3,13 @@ using Volo.Abp.Collections; namespace Volo.Abp.Security.Claims { - public class AbpClaimsPrincipalOptions + public class AbpClaimsPrincipalFactoryOptions { public ITypeList Contributors { get; } - public List RequestedClaims { get; } - - public AbpClaimsPrincipalOptions() + public AbpClaimsPrincipalFactoryOptions() { Contributors = new TypeList(); - RequestedClaims = new List(); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs index 50750ff567..80c275252c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.IdentityServer { public class AbpClaimsService : DefaultClaimsService { - protected readonly AbpClaimsPrincipalOptions Options; + protected readonly AbpClaimsServiceOptions Options; private static readonly string[] AdditionalOptionalClaimNames = { @@ -26,7 +26,7 @@ namespace Volo.Abp.IdentityServer public AbpClaimsService( IProfileService profile, ILogger logger, - IOptions options) + IOptions options) : base(profile, logger) { Options = options.Value; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsServiceOptions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsServiceOptions.cs new file mode 100644 index 0000000000..a940cb6119 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsServiceOptions.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Volo.Abp.IdentityServer +{ + public class AbpClaimsServiceOptions + { + public List RequestedClaims { get; } + + public AbpClaimsServiceOptions() + { + RequestedClaims = new List(); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 92fd0501d3..55121aec99 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -54,7 +54,7 @@ namespace Volo.Abp.IdentityServer options.EtoMappings.Add(typeof(AbpIdentityServerDomainModule)); }); - Configure(options => + Configure(options => { options.RequestedClaims.AddRange(new []{ AbpClaimTypes.TenantId, From 067731ec2dc56608d22e348529a110eda2c522c6 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 9 Mar 2021 14:36:37 +0800 Subject: [PATCH 3/3] Improved --- .../Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs | 6 +++--- .../Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs index 6ae077580c..b00b38ea8c 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs @@ -9,14 +9,14 @@ namespace Volo.Abp.Security.Claims public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientDependency { protected IServiceScopeFactory ServiceScopeFactory { get; } - protected AbpClaimsPrincipalFactoryOptions FactoryOptions { get; } + protected AbpClaimsPrincipalFactoryOptions Options { get; } public AbpClaimsPrincipalFactory( IServiceScopeFactory serviceScopeFactory, IOptions abpClaimOptions) { ServiceScopeFactory = serviceScopeFactory; - FactoryOptions = abpClaimOptions.Value; + Options = abpClaimOptions.Value; } public virtual async Task CreateAsync() @@ -27,7 +27,7 @@ namespace Volo.Abp.Security.Claims var context = new AbpClaimsPrincipalContributorContext(claimsPrincipal, scope.ServiceProvider); - foreach (var contributorType in FactoryOptions.Contributors) + foreach (var contributorType in Options.Contributors) { var contributor = (IAbpClaimsPrincipalContributor) scope.ServiceProvider.GetRequiredService(contributorType); await contributor.ContributeAsync(context); diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs index febe0c5661..8083a018ee 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Volo.Abp.Collections; +using Volo.Abp.Collections; namespace Volo.Abp.Security.Claims {