From 52bc3bb57137934b3f1f4b4a64710a3e82c49e7e Mon Sep 17 00:00:00 2001 From: PM Extra Date: Fri, 24 Sep 2021 14:52:30 +0800 Subject: [PATCH 1/4] fix(identity-server): includeDetails of ApiScopeRepository.FindByNameAsync. --- .../Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs index 9529a0bd4a..72375aa0a1 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; @@ -21,6 +21,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public async Task FindByNameAsync(string scopeName, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) .OrderBy(x=>x.Id) .FirstOrDefaultAsync(x => x.Name == scopeName, GetCancellationToken(cancellationToken)); } From 3149f770eadb336fab2a6e31498300bb58249e51 Mon Sep 17 00:00:00 2001 From: PM Extra Date: Fri, 24 Sep 2021 18:50:28 +0800 Subject: [PATCH 2/4] chore(identity-server): some detailed improvements. --- .../ApiResources/ApiResource.cs | 4 +-- .../Abp/IdentityServer/ApiScopes/ApiScope.cs | 4 +-- .../IdentityServer/Devices/DeviceFlowStore.cs | 6 ++-- .../IdentityServer/Grants/PersistedGrant.cs | 18 +++++------ .../IdentityResources/IdentityResource.cs | 7 ++--- .../ApiResources/ApiResourceRepository.cs | 30 ++++++++----------- .../ApiScopes/ApiScopeRepository.cs | 13 ++++---- .../Clients/ClientRepository.cs | 2 +- .../Devices/DeviceFlowCodesRepository.cs | 6 ++-- .../Grants/PersistentGrantRepository.cs | 3 +- .../IdentityResourceRepository.cs | 14 ++++----- .../MongoDB/MongoApiResourceRepository.cs | 5 ++-- .../MongoDB/MongoApiScopeRepository.cs | 15 ++++------ .../MongoDB/MongoClientRepository.cs | 7 ++--- .../MongoIdentityResourceRepository.cs | 2 +- 15 files changed, 58 insertions(+), 78 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs index 90725c3f6a..d6c7e031bc 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs @@ -35,12 +35,10 @@ namespace Volo.Abp.IdentityServer.ApiResources } - public ApiResource(Guid id, [NotNull] string name, string displayName = null, string description = null) + public ApiResource(Guid id, [NotNull] string name, string displayName = null, string description = null) : base(id) { Check.NotNull(name, nameof(name)); - Id = id; - Name = name; DisplayName = displayName; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs index 27f8ad1d58..a0cf7ff372 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs @@ -40,11 +40,11 @@ namespace Volo.Abp.IdentityServer.ApiScopes bool required = false, bool emphasize = false, bool showInDiscoveryDocument = true, - bool enabled = true) + bool enabled = true + ) : base(id) { Check.NotNull(name, nameof(name)); - Id = id; Name = name; DisplayName = displayName ?? name; Description = description; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs index 25432e2d58..90c9b9b9e6 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using IdentityModel; using IdentityServer4.Models; @@ -38,7 +38,7 @@ namespace Volo.Abp.IdentityServer.Devices DeviceCode = deviceCode, UserCode = userCode, ClientId = data.ClientId, - SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject).Value, + SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject)?.Value, CreationTime = data.CreationTime, Expiration = data.CreationTime.AddSeconds(data.Lifetime), Data = Serialize(data) @@ -93,7 +93,7 @@ namespace Volo.Abp.IdentityServer.Devices throw new InvalidOperationException($"Could not update device code by the given userCode: {userCode}"); } - deviceCodes.SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject).Value; + deviceCodes.SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject)?.Value; deviceCodes.Data = Serialize(data); await DeviceFlowCodesRepository diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs index 1865ec748b..d9aa5e0c19 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs @@ -5,6 +5,14 @@ namespace Volo.Abp.IdentityServer.Grants { public class PersistedGrant : AggregateRoot { + protected PersistedGrant() + { + } + + public PersistedGrant(Guid id) : base(id) + { + } + public virtual string Key { get; set; } public virtual string Type { get; set; } @@ -24,15 +32,5 @@ namespace Volo.Abp.IdentityServer.Grants public virtual DateTime? ConsumedTime { get; set; } public virtual string Data { get; set; } - - protected PersistedGrant() - { - - } - - public PersistedGrant(Guid id) - { - Id = id; - } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs index b5812da7e2..fa46298842 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs @@ -39,11 +39,11 @@ namespace Volo.Abp.IdentityServer.IdentityResources bool enabled = true, bool required = false, bool emphasize = false, - bool showInDiscoveryDocument = true) + bool showInDiscoveryDocument = true + ) : base(id) { Check.NotNull(name, nameof(name)); - Id = id; Name = name; DisplayName = displayName; Description = description; @@ -56,9 +56,8 @@ namespace Volo.Abp.IdentityServer.IdentityResources Properties = new List(); } - public IdentityResource(Guid id, IdentityServer4.Models.IdentityResource resource) + public IdentityResource(Guid id, IdentityServer4.Models.IdentityResource resource) : base(id) { - Id = id; Name = resource.Name; DisplayName = resource.DisplayName; Description = resource.Description; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs index bac7fc4c71..077f5ef25f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs @@ -20,23 +20,20 @@ namespace Volo.Abp.IdentityServer.ApiResources public async Task FindByNameAsync(string apiResourceName, bool includeDetails = true, CancellationToken cancellationToken = default) { - var query = from apiResource in (await GetDbSetAsync()).IncludeDetails(includeDetails) - where apiResource.Name == apiResourceName - orderby apiResource.Id - select apiResource; - - return await query.FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .OrderBy(apiResource => apiResource.Id) + .FirstOrDefaultAsync(apiResource => apiResource.Name == apiResourceName, GetCancellationToken(cancellationToken)); } public async Task> FindByNameAsync(string[] apiResourceNames, bool includeDetails = true, CancellationToken cancellationToken = default) { - var query = from apiResource in (await GetDbSetAsync()).IncludeDetails(includeDetails) - where apiResourceNames.Contains(apiResource.Name) - orderby apiResource.Name - select apiResource; - - return await query.ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(apiResource => apiResourceNames.Contains(apiResource.Name)) + .OrderBy(apiResource => apiResource.Name) + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListByScopesAsync( @@ -44,11 +41,10 @@ namespace Volo.Abp.IdentityServer.ApiResources bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from api in (await GetDbSetAsync()).IncludeDetails(includeDetails) - where api.Scopes.Any(x => scopeNames.Contains(x.Scope)) - select api; - - return await query.ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(api => api.Scopes.Any(x => scopeNames.Contains(x.Scope))) + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync( diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs index 72375aa0a1..ccd59fc359 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; @@ -29,12 +29,11 @@ namespace Volo.Abp.IdentityServer.ApiScopes public async Task> GetListByNameAsync(string[] scopeNames, bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from scope in (await GetDbSetAsync()).IncludeDetails(includeDetails) - where scopeNames.Contains(scope.Name) - orderby scope.Id - select scope; - - return await query.ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(scope => scopeNames.Contains(scope.Name)) + .OrderBy(scope => scope.Id) + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter = null, bool includeDetails = false, CancellationToken cancellationToken = default) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs index 4587168ad0..a8d9abb76f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs @@ -58,7 +58,7 @@ namespace Volo.Abp.IdentityServer.Clients public virtual async Task CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, GetCancellationToken(cancellationToken)); } public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs index a6fd6e196b..e8c0a5e189 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -24,9 +24,8 @@ namespace Volo.Abp.IdentityServer.Devices CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) - .Where(d => d.UserCode == userCode) .OrderBy(d => d.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)); } public virtual async Task FindByDeviceCodeAsync( @@ -34,9 +33,8 @@ namespace Volo.Abp.IdentityServer.Devices CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) - .Where(d => d.DeviceCode == deviceCode) .OrderBy(d => d.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistentGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistentGrantRepository.cs index 2dbdfc1a3b..8c19d43181 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistentGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistentGrantRepository.cs @@ -30,9 +30,8 @@ namespace Volo.Abp.IdentityServer.Grants CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) - .Where(x => x.Key == key) .OrderBy(x => x.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListBySubjectIdAsync( diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs index 32faa09792..27000c48c4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs @@ -24,11 +24,10 @@ namespace Volo.Abp.IdentityServer.IdentityResources bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from identityResource in (await GetDbSetAsync()).IncludeDetails(includeDetails) - where scopeNames.Contains(identityResource.Name) - select identityResource; - - return await query.ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(identityResource => scopeNames.Contains(identityResource.Name)) + .ToListAsync(GetCancellationToken(cancellationToken)); } [Obsolete("Use WithDetailsAsync method.")] @@ -72,14 +71,13 @@ namespace Volo.Abp.IdentityServer.IdentityResources { return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) - .Where(x => x.Name == name) .OrderBy(x => x.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(x => x.Name == name, GetCancellationToken(cancellationToken)); } public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).AnyAsync(ir => ir.Id != expectedId && ir.Name == name, GetCancellationToken(cancellationToken)); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs index 60625a5a4a..56b58d674d 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -21,9 +21,8 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task FindByNameAsync(string apiResourceName, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) - .Where(ar => ar.Name == apiResourceName) .OrderBy(ar => ar.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(ar => ar.Name == apiResourceName, GetCancellationToken(cancellationToken)); } public async Task> FindByNameAsync(string[] apiResourceNames, bool includeDetails = true, diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs index 93a6a02b35..da78505c82 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -23,20 +23,17 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task FindByNameAsync(string scopeName, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) - .Where(x => x.Name == scopeName) .OrderBy(x => x.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(x => x.Name == scopeName, GetCancellationToken(cancellationToken)); } public async Task> GetListByNameAsync(string[] scopeNames, bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from scope in (await GetMongoQueryableAsync(cancellationToken)) - where scopeNames.Contains(scope.Name) - orderby scope.Id - select scope; - - return await query.ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)) + .Where(scope => scopeNames.Contains(scope.Name)) + .OrderBy(scope => scope.Id) + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter = null, bool includeDetails = false, diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs index 356a144692..694f5ace25 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -27,9 +27,8 @@ namespace Volo.Abp.IdentityServer.MongoDB CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) - .Where(x => x.ClientId == clientId) .OrderBy(x => x.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync( @@ -69,7 +68,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) - .AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); + .AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, GetCancellationToken(cancellationToken)); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs index e2e46a921b..e63ca82188 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs @@ -62,7 +62,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) - .AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); + .AnyAsync(ir => ir.Id != expectedId && ir.Name == name, GetCancellationToken(cancellationToken)); } } } From f6ef8e5ed221ccca2f3e6c53f44a316aeaa3fb3b Mon Sep 17 00:00:00 2001 From: PM Extra Date: Fri, 24 Sep 2021 19:58:49 +0800 Subject: [PATCH 3/4] feat(identity-server): improve property and claim of Client. --- .../Volo/Abp/IdentityServer/Clients/Client.cs | 26 +++++++++++++------ .../Abp/IdentityServer/Clients/ClientClaim.cs | 14 +++++----- .../AbpIdentityServerTestDataBuilder.cs | 4 +-- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs index 82ba75a5fb..ff9a0faf68 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs @@ -274,17 +274,17 @@ namespace Volo.Abp.IdentityServer.Clients Properties.Clear(); } - public virtual void RemoveProperty(string key, string value) + public virtual void RemoveProperty(string key) { - Properties.RemoveAll(c => c.Value == value && c.Key == key); + Properties.RemoveAll(c => c.Key == key); } - public virtual ClientProperty FindProperty(string key, string value) + public virtual ClientProperty FindProperty(string key) { - return Properties.FirstOrDefault(c => c.Key == key && c.Value == value); + return Properties.FirstOrDefault(c => c.Key == key); } - public virtual void AddClaim([NotNull] string value, string type) + public virtual void AddClaim([NotNull] string type, [NotNull] string value) { Claims.Add(new ClientClaim(Id, type, value)); } @@ -294,12 +294,22 @@ namespace Volo.Abp.IdentityServer.Clients Claims.Clear(); } - public virtual void RemoveClaim(string value, string type) + public virtual void RemoveClaim(string type) { - Claims.RemoveAll(c => c.Value == value && c.Type == type); + Claims.RemoveAll(c => c.Type == type); } - public virtual ClientClaim FindClaim(string value, string type) + public virtual void RemoveClaim(string type, string value) + { + Claims.RemoveAll(c => c.Type == type && c.Value == value); + } + + public virtual List FindClaims(string type) + { + return Claims.Where(c => c.Type == type).ToList(); + } + + public virtual ClientClaim FindClaim(string type, string value) { return Claims.FirstOrDefault(c => c.Type == type && c.Value == value); } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientClaim.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientClaim.cs index f0b35d772a..6faf585ee0 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientClaim.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientClaim.cs @@ -1,4 +1,4 @@ -using System; +using System; using JetBrains.Annotations; using Volo.Abp.Domain.Entities; @@ -17,11 +17,6 @@ namespace Volo.Abp.IdentityServer.Clients } - public virtual bool Equals(Guid clientId, string value, string type) - { - return ClientId == clientId && Type == type && Value == value; - } - protected internal ClientClaim(Guid clientId, [NotNull] string type, string value) { Check.NotNull(type, nameof(type)); @@ -31,9 +26,14 @@ namespace Volo.Abp.IdentityServer.Clients Value = value; } + public virtual bool Equals(Guid clientId, string type, string value) + { + return ClientId == clientId && Type == type && Value == value; + } + public override object[] GetKeys() { return new object[] { ClientId, Type, Value }; } } -} \ No newline at end of file +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index e2bd202ec1..38c32af64d 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; @@ -149,7 +149,7 @@ namespace Volo.Abp.IdentityServer client.AddCorsOrigin("https://client1-origin.com"); client.AddCorsOrigin("https://{0}.abp.io"); - client.AddClaim(nameof(ClientClaim.Value), nameof(ClientClaim.Type)); + client.AddClaim(nameof(ClientClaim.Type), nameof(ClientClaim.Value)); client.AddGrantType(nameof(ClientGrantType.GrantType)); client.AddIdentityProviderRestriction(nameof(ClientIdPRestriction.Provider)); client.AddPostLogoutRedirectUri(nameof(ClientPostLogoutRedirectUri.PostLogoutRedirectUri)); From 19968396c5baaded950155515678e892f8ee2c79 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 27 Sep 2021 15:02:56 +0800 Subject: [PATCH 4/4] Avoid adding duplicate keys to `Properties`. --- .../IdentityServer/ApiResources/ApiResource.cs | 13 +++++++++++-- .../Abp/IdentityServer/ApiScopes/ApiScope.cs | 10 +++++++++- .../Volo/Abp/IdentityServer/Clients/Client.cs | 10 +++++++++- .../Abp/IdentityServer/Grants/PersistedGrant.cs | 17 +++++++++-------- .../IdentityResources/IdentityResource.cs | 13 +++++++++++-- 5 files changed, 49 insertions(+), 14 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs index d6c7e031bc..0b682a632d 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs @@ -35,7 +35,8 @@ namespace Volo.Abp.IdentityServer.ApiResources } - public ApiResource(Guid id, [NotNull] string name, string displayName = null, string description = null) : base(id) + public ApiResource(Guid id, [NotNull] string name, string displayName = null, string description = null) + : base(id) { Check.NotNull(name, nameof(name)); @@ -122,7 +123,15 @@ namespace Volo.Abp.IdentityServer.ApiResources public virtual void AddProperty([NotNull] string key, string value) { - Properties.Add(new ApiResourceProperty(Id, key, value)); + var property = FindProperty(key); + if (property == null) + { + Properties.Add(new ApiResourceProperty(Id, key, value)); + } + else + { + property.Value = value; + } } public virtual void RemoveAllProperties() diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs index a0cf7ff372..60945195d9 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs @@ -79,7 +79,15 @@ namespace Volo.Abp.IdentityServer.ApiScopes public virtual void AddProperty([NotNull] string key, string value) { - Properties.Add(new ApiScopeProperty(Id, key, value)); + var property = FindProperty(key); + if (property == null) + { + Properties.Add(new ApiScopeProperty(Id, key, value)); + } + else + { + property.Value = value; + } } public virtual void RemoveAllProperties() diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs index ff9a0faf68..07f9eec153 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs @@ -266,7 +266,15 @@ namespace Volo.Abp.IdentityServer.Clients public virtual void AddProperty([NotNull] string key, [NotNull] string value) { - Properties.Add(new ClientProperty(Id, key,value)); + var property = FindProperty(key); + if (property == null) + { + Properties.Add(new ClientProperty(Id, key, value)); + } + else + { + property.Value = value; + } } public virtual void RemoveAllProperties() diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs index d9aa5e0c19..907e2cbff8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrant.cs @@ -5,14 +5,6 @@ namespace Volo.Abp.IdentityServer.Grants { public class PersistedGrant : AggregateRoot { - protected PersistedGrant() - { - } - - public PersistedGrant(Guid id) : base(id) - { - } - public virtual string Key { get; set; } public virtual string Type { get; set; } @@ -32,5 +24,14 @@ namespace Volo.Abp.IdentityServer.Grants public virtual DateTime? ConsumedTime { get; set; } public virtual string Data { get; set; } + + protected PersistedGrant() + { + } + + public PersistedGrant(Guid id) + : base(id) + { + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs index fa46298842..4b8782b455 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResource.cs @@ -56,7 +56,8 @@ namespace Volo.Abp.IdentityServer.IdentityResources Properties = new List(); } - public IdentityResource(Guid id, IdentityServer4.Models.IdentityResource resource) : base(id) + public IdentityResource(Guid id, IdentityServer4.Models.IdentityResource resource) + : base(id) { Name = resource.Name; DisplayName = resource.DisplayName; @@ -91,7 +92,15 @@ namespace Volo.Abp.IdentityServer.IdentityResources public virtual void AddProperty([NotNull] string key, string value) { - Properties.Add(new IdentityResourceProperty(Id, key, value)); + var property = FindProperty(key); + if (property == null) + { + Properties.Add(new IdentityResourceProperty(Id, key, value)); + } + else + { + property.Value = value; + } } public virtual void RemoveAllProperties()