From 0a8423d0b07cd7d7a325423e7eb143d6c7a5c82a Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Tue, 7 Jul 2020 11:23:54 +0800 Subject: [PATCH] Identity Server is done. --- .../ApiResources/ApiResourceConsts.cs | 12 +- .../ApiResources/ApiResourceEto.cs | 4 +- .../ApiResources/ApiResourcePropertyConsts.cs | 9 ++ .../ApiResources/ApiResourceScopeConsts.cs | 4 +- .../ApiResources/ApiResourceSecretConsts.cs | 6 +- .../ApiScopes/ApiResourceConsts.cs | 8 +- .../ApiScopes/ApiScopeClaimConsts.cs | 7 -- .../ApiScopes/ApiScopePropertyConsts.cs | 6 +- .../Clients/ClientClaimConsts.cs | 7 +- .../IdentityServer/Clients/ClientConsts.cs | 24 ++-- .../Clients/ClientCorsOriginConsts.cs | 4 +- .../Clients/ClientGrantTypeConsts.cs | 4 +- .../Devices/DeviceFlowCodesConsts.cs | 19 ++- .../Grants/PersistedGrantConsts.cs | 22 +++- .../IdentityResourceConsts.cs | 8 +- .../IdentityResourcePropertyConsts.cs | 6 +- ...ntityServerModuleExtensionConfiguration.cs | 9 ++ .../IdentityServerModuleExtensionConsts.cs | 4 +- .../AbpIdentityServerDomainModule.cs | 1 + .../ApiResources/ApiResource.cs | 25 +++- .../ApiResources/ApiResourceProperty.cs | 39 ++++++ .../ApiResources/IApiResourceRepository.cs | 5 - .../Abp/IdentityServer/ApiScopes/ApiScope.cs | 4 +- .../IdentityServer/ApiScopes/ApiScopeClaim.cs | 14 +-- .../IdentityResourceProperty.cs | 4 +- .../IdentityServerAutoMapperProfile.cs | 117 +++++++++++------- ...IdentityServerEfCoreQueryableExtensions.cs | 3 +- .../ApiResources/ApiResourceRepository.cs | 9 -- ...IdentityServerEntityFrameworkCoreModule.cs | 1 + .../IIdentityServerDbContext.cs | 1 - .../IdentityServerDbContext.cs | 1 - ...yServerDbContextModelCreatingExtensions.cs | 111 ++++++++++------- .../IdentityServerDataSeedContributor.cs | 2 +- 33 files changed, 313 insertions(+), 187 deletions(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourcePropertyConsts.cs delete mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResourceProperty.cs diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceConsts.cs index b20b743b50..9a023c435b 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceConsts.cs @@ -1,9 +1,11 @@ -namespace Volo.Abp.IdentityServer.ApiScopes +namespace Volo.Abp.IdentityServer.ApiResources { public class ApiResourceConsts { - public const int NameMaxLength = 200; - public const int DisplayNameMaxLength = 200; - public const int DescriptionMaxLength = 1000; + public static int NameMaxLength { get; set; } = 200; + + public static int DisplayNameMaxLength { get; set; } = 200; + + public static int DescriptionMaxLength { get; set; } = 1000; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceEto.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceEto.cs index 1aeb83727f..333201d284 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceEto.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceEto.cs @@ -1,7 +1,7 @@ using System; using JetBrains.Annotations; -namespace Volo.Abp.IdentityServer.ApiScopes +namespace Volo.Abp.IdentityServer.ApiResources { [Serializable] public class ApiResourceEto @@ -17,4 +17,4 @@ namespace Volo.Abp.IdentityServer.ApiScopes public bool Enabled { get; set; } } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourcePropertyConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourcePropertyConsts.cs new file mode 100644 index 0000000000..2bcf8643d1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourcePropertyConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.IdentityServer.ApiResources +{ + public class ApiResourcePropertyConsts + { + public static int KeyMaxLength { get; set; } = 250; + + public static int ValueMaxLength { get; set; } = 2000; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs index c9b874b12c..f64c8d79cf 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs @@ -1,7 +1,7 @@ -namespace Volo.Abp.IdentityServer.ApiScopes +namespace Volo.Abp.IdentityServer.ApiResources { public class ApiResourceScopeConsts { - public const int ScopeMaxLength = 200; + public static int ScopeMaxLength { get; set; } = 200; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs index dce950d30c..f2692d1653 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.IdentityServer.ApiScopes +namespace Volo.Abp.IdentityServer.ApiResources { public class ApiResourceSecretConsts { @@ -15,8 +15,8 @@ public static int ValueMaxLengthValue { get; set; } = ValueMaxLength; /// - /// Default value: 2000 + /// Default value: 1000 /// - public static int DescriptionMaxLength { get; set; } = 2000; + public static int DescriptionMaxLength { get; set; } = 1000; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs index ab268690be..78f59a1eff 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs @@ -2,8 +2,10 @@ { public class ApiScopeConsts { - public const int NameMaxLength = 200; - public const int DisplayNameMaxLength = 200; - public const int DescriptionMaxLength = 1000; + public static int NameMaxLength { get; set; } = 200; + + public static int DisplayNameMaxLength { get; set; } = 200; + + public static int DescriptionMaxLength { get; set; } = 1000; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs deleted file mode 100644 index f3175e8774..0000000000 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Volo.Abp.IdentityServer.ApiScopes -{ - public class ApiScopeClaimConsts - { - public const int NameMaxLength = 200; - } -} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs index 5450e67030..ef4f83af07 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs @@ -2,8 +2,8 @@ { public class ApiScopePropertyConsts { - public const int KeyMaxLength = 250; - public const int ValueMaxLength = 2000; - public static int ValueMaxLengthValue { get; set; } = ValueMaxLength; + public static int KeyMaxLength { get; set; } = 250; + + public static int ValueMaxLength { get; set; } = 2000; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientClaimConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientClaimConsts.cs index 3a5d1fe907..e6a8cc5c5f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientClaimConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientClaimConsts.cs @@ -2,7 +2,8 @@ { public class ClientClaimConsts { - public const int TypeMaxLength = 250; - public const int ValueMaxLength = 250; + public static int TypeMaxLength { get; set; } = 250; + + public static int ValueMaxLength { get; set; } = 250; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientConsts.cs index ca69c51eef..4331ab7064 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientConsts.cs @@ -2,26 +2,26 @@ { public class ClientConsts { - public const int ClientIdMaxLength = 200; + public static int ClientIdMaxLength { get; set; } = 200; - public const int ProtocolTypeMaxLength = 200; + public static int ProtocolTypeMaxLength { get; set; } = 200; - public const int ClientNameMaxLength = 200; + public static int ClientNameMaxLength { get; set; } = 200; - public const int ClientUriMaxLength = 2000; + public static int ClientUriMaxLength { get; set; } = 2000; - public const int LogoUriMaxLength = 2000; + public static int LogoUriMaxLength { get; set; } = 2000; - public const int DescriptionMaxLength = 1000; + public static int DescriptionMaxLength { get; set; } = 1000; - public const int FrontChannelLogoutUriMaxLength = 2000; + public static int FrontChannelLogoutUriMaxLength { get; set; } = 2000; - public const int BackChannelLogoutUriMaxLength = 2000; + public static int BackChannelLogoutUriMaxLength { get; set; } = 2000; - public const int ClientClaimsPrefixMaxLength = 200; + public static int ClientClaimsPrefixMaxLength { get; set; } = 200; - public const int PairWiseSubjectSaltMaxLength = 200; + public static int PairWiseSubjectSaltMaxLength { get; set; } = 200; - public const int UserCodeTypeMaxLength = 100; + public static int UserCodeTypeMaxLength { get; set; } = 100; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientCorsOriginConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientCorsOriginConsts.cs index 07ba598d6c..2ec28df4a2 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientCorsOriginConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientCorsOriginConsts.cs @@ -2,6 +2,6 @@ { public class ClientCorsOriginConsts { - public const int OriginMaxLength = 150; + public static int OriginMaxLength { get; set; } = 150; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientGrantTypeConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientGrantTypeConsts.cs index 5f94c51f97..2407f83cc0 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientGrantTypeConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/ClientGrantTypeConsts.cs @@ -2,6 +2,6 @@ { public class ClientGrantTypeConsts { - public const int GrantTypeMaxLength = 250; + public static int GrantTypeMaxLength { get; set; } = 250; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs index b0c87fe89d..80d82bbfa8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs @@ -2,11 +2,18 @@ { public class DeviceFlowCodesConsts { - public const int DeviceCodeMaxLength = 200; - public const int UserCodeMaxLength = 200; - public const int SubjectIdMaxLength = 200; - public const int ClientIdMaxLength = 200; - public const int DataMaxLength = 50000; - public static int DataMaxLengthValue { get; set; } = DataMaxLength; + public static int DeviceCodeMaxLength { get; set; } = 200; + + public static int UserCodeMaxLength { get; set; } = 200; + + public static int SubjectIdMaxLength { get; set; } = 200; + + public static int SessionIdMaxLength { get; set; } = 100; + + public static int DescriptionMaxLength { get; set; } = 200; + + public static int ClientIdMaxLength { get; set; } = 200; + + public static int DataMaxLength { get; set; } = 50000; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Grants/PersistedGrantConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Grants/PersistedGrantConsts.cs index b1dd21d6f8..e0e753637a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Grants/PersistedGrantConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Grants/PersistedGrantConsts.cs @@ -6,30 +6,40 @@ /// Default value: 200 /// public static int KeyMaxLength { get; set; } = 200; - + /// /// Default value: 50 /// public static int TypeMaxLength { get; set; } = 50; - + /// /// Default value: 200 /// public static int SubjectIdMaxLength { get; set; } = 200; - + + /// + /// Default value: 100 + /// + public static int SessionIdMaxLength { get; set; } = 100; + /// /// Default value: 200 /// public static int ClientIdMaxLength { get; set; } = 200; - + + /// + /// Default value: 200 + /// + public static int DescriptionMaxLength { get; set; } = 200; + /// /// Default value: 50000 /// public static int DataMaxLength { get; set; } = 50000; - + /// /// Default value: 50000 /// public static int DataMaxLengthValue { get; set; } = 50000; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceConsts.cs index a7c713e161..66f8120b6a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceConsts.cs @@ -6,15 +6,15 @@ /// Default value: 200 /// public static int NameMaxLength { get; set; } = 200; - + /// /// Default value: 200 /// public static int DisplayNameMaxLength { get; set; } = 200; - + /// - /// Default value: 200 + /// Default value: 1000 /// public static int DescriptionMaxLength { get; set; } = 1000; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs index 2c9ccbb0c4..98a5a93941 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs @@ -2,8 +2,8 @@ { public class IdentityResourcePropertyConsts { - public const int KeyMaxLength = 250; - public const int ValueMaxLength = 2000; - public static int ValueMaxLengthValue { get; set; } = ValueMaxLength; + public static int KeyMaxLength { get; set; } = 250; + + public static int ValueMaxLength { get; set; } = 2000; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConfiguration.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConfiguration.cs index 78a26900c9..fe89b7400a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConfiguration.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConfiguration.cs @@ -23,6 +23,15 @@ namespace Volo.Abp.ObjectExtending ); } + public IdentityServerModuleExtensionConfiguration ConfigureApiScope( + Action configureAction) + { + return this.ConfigureEntity( + IdentityServerModuleExtensionConsts.EntityNames.ApiScope, + configureAction + ); + } + public IdentityServerModuleExtensionConfiguration ConfigureIdentityResource( Action configureAction) { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConsts.cs index 8623b8830a..a9396ff95a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/ObjectExtending/IdentityServerModuleExtensionConsts.cs @@ -11,6 +11,8 @@ public const string IdentityResource = "IdentityResource"; public const string ApiResource = "ApiResource"; + + public const string ApiScope = "ApiScope"; } } -} \ 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 bd03a3f34e..d07132e094 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 @@ -8,6 +8,7 @@ using Volo.Abp.BackgroundWorkers; using Volo.Abp.Caching; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.Identity; +using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; 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 9d81b95def..e6fe3b9318 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 @@ -4,6 +4,7 @@ using System.Linq; using IdentityServer4; using JetBrains.Annotations; using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.IdentityServer.ApiResources; namespace Volo.Abp.IdentityServer.ApiScopes { @@ -28,7 +29,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public virtual List UserClaims { get; protected set; } - public virtual Dictionary Properties { get; protected set; } + public virtual List Properties { get; protected set; } protected ApiResource() { @@ -51,7 +52,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes Secrets = new List(); Scopes = new List(); UserClaims = new List(); - Properties = new Dictionary(); + Properties = new List(); Scopes.Add(new ApiResourceScope(id, name)); } @@ -121,5 +122,25 @@ namespace Volo.Abp.IdentityServer.ApiScopes { return Scopes.FirstOrDefault(r => r.Scope == scope); } + + public virtual void AddProperty([NotNull] string key, string value) + { + Properties.Add(new ApiResourceProperty(Id, key, value)); + } + + public virtual void RemoveAllProperties() + { + Properties.Clear(); + } + + public virtual void RemoveProperty(string key) + { + Properties.RemoveAll(r => r.Key == key); + } + + public virtual ApiResourceProperty FindProperty(string key) + { + return Properties.FirstOrDefault(r => r.Key == key); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResourceProperty.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResourceProperty.cs new file mode 100644 index 0000000000..7b6257c771 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResourceProperty.cs @@ -0,0 +1,39 @@ +using System; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.IdentityServer.ApiResources +{ + public class ApiResourceProperty : Entity + { + public virtual Guid ApiResourceId { get; protected set; } + + public virtual string Key { get; set; } + + public virtual string Value { get; set; } + + protected ApiResourceProperty() + { + + } + + public virtual bool Equals(Guid aiResourceId, [NotNull] string key, string value) + { + return ApiResourceId == aiResourceId && Key == key && Value == value; + } + + protected internal ApiResourceProperty(Guid aiResourceId, [NotNull] string key, [NotNull] string value) + { + Check.NotNull(key, nameof(key)); + + ApiResourceId = aiResourceId; + Key = key; + Value = value; + } + + public override object[] GetKeys() + { + return new object[] { ApiResourceId, Key }; + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs index 4f2abd3aed..f2feff8917 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs @@ -35,11 +35,6 @@ namespace Volo.Abp.IdentityServer.ApiScopes CancellationToken cancellationToken = default ); - Task> GetListAsync( - bool includeDetails = false, - CancellationToken cancellationToken = default - ); - Task CheckNameExistAsync( string name, Guid? expectedId = null, 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 2f183b8b7e..27f8ad1d58 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 @@ -59,7 +59,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public virtual void AddUserClaim([NotNull] string type) { - UserClaims.Add(new ApiScopeClaim(Id, Name, type)); + UserClaims.Add(new ApiScopeClaim(Id, type)); } public virtual void RemoveAllUserClaims() @@ -74,7 +74,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public virtual ApiScopeClaim FindClaim(string type) { - return UserClaims.FirstOrDefault(r => r.Name == Name && r.Type == type); + return UserClaims.FirstOrDefault(r => r.Type == type); } public virtual void AddProperty([NotNull] string key, string value) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs index 0bb6704a22..95519195e7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs @@ -7,31 +7,25 @@ namespace Volo.Abp.IdentityServer.ApiScopes { public Guid ApiScopeId { get; protected set; } - [NotNull] - public string Name { get; protected set; } - protected ApiScopeClaim() { } - public virtual bool Equals(Guid apiScopeId, [NotNull] string name, [NotNull] string type) + public virtual bool Equals(Guid apiScopeId, [NotNull] string type) { - return ApiScopeId == apiScopeId && Name == name && Type == type; + return ApiScopeId == apiScopeId && Type == type; } - protected internal ApiScopeClaim(Guid apiScopeId, [NotNull] string name, [NotNull] string type) + protected internal ApiScopeClaim(Guid apiScopeId, [NotNull] string type) : base(type) { - Check.NotNull(name, nameof(name)); - ApiScopeId = apiScopeId; - Name = name; } public override object[] GetKeys() { - return new object[] { ApiScopeId, Name, Type }; + return new object[] { ApiScopeId, Type }; } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceProperty.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceProperty.cs index d351addfc2..4480fdab5a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceProperty.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceProperty.cs @@ -17,9 +17,9 @@ namespace Volo.Abp.IdentityServer.IdentityResources } - public virtual bool Equals(Guid identityResourceId, [NotNull] string key) + public virtual bool Equals(Guid identityResourceId, [NotNull] string key, string value) { - return IdentityResourceId == identityResourceId && Key == key; + return IdentityResourceId == identityResourceId && Key == key && Value == value; } protected internal IdentityResourceProperty(Guid identityResourceId, [NotNull] string key, [NotNull] string value) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs index 34a831ca38..af155190f3 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Security.Claims; using AutoMapper; +using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; @@ -11,58 +12,32 @@ namespace Volo.Abp.IdentityServer { public class IdentityServerAutoMapperProfile : Profile { + /// + /// TODO: Reverse maps will not used probably. Remove those will not used + /// public IdentityServerAutoMapperProfile() { - //TODO: Reverse maps will not used probably. Remove those will not used - - CreateMap() - .ConstructUsing(src => src.Origin) - .ReverseMap() - .ForMember(dest => dest.Origin, opt => opt.MapFrom(src => src)); - - CreateMap() - .ForMember(dest => dest.ApiSecrets, opt => opt.MapFrom(src => src.Secrets)); - - CreateMap(); - - - //TODO: Why PersistedGrant mapping is in this profile? - CreateMap().ReverseMap(); - - CreateMap() - .ConstructUsing(src => new IdentityServer4.Models.IdentityResource()); - - CreateMap() - .ConstructUsing(x => x.Type) - .ReverseMap() - .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src)); - - CreateMap>() - .ReverseMap(); - CreateMap() .ConstructUsing(src => src.Type) .ReverseMap() .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src)); - CreateMap() - .ConstructUsing(x => x.Scope) - .ReverseMap() - .ForMember(dest => dest.Scope, opt => opt.MapFrom(src => src)); - - CreateMap>() - .ReverseMap(); + CreateClientMap(); + CreateApiResourceMap(); + CreateApiScopeMap(); + CreateIdentityResourceMap(); + CreatePersistedGrantMap(); + CreateDeviceFlowCodesMap(); + } - CreateMap() - .ConstructUsing(x => x.Type) + private void CreateClientMap() + { + CreateMap() + .ConstructUsing(src => src.Origin) .ReverseMap() - .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src)); - - CreateMap(MemberList.Destination) - .ConstructUsing(src => new IdentityServer4.Models.ApiScope()) - .ReverseMap(); + .ForMember(dest => dest.Origin, opt => opt.MapFrom(src => src)); - CreateMap>() + CreateMap>() .ReverseMap(); CreateMap() @@ -115,10 +90,64 @@ namespace Volo.Abp.IdentityServer CreateMap(); CreateMap(); - CreateMap(); - CreateMap(); + } + + private void CreateApiResourceMap() + { + CreateMap() + .ForMember(dest => dest.ApiSecrets, opt => opt.MapFrom(src => src.Secrets)); + + CreateMap(); + + CreateMap() + .ConstructUsing(x => x.Scope) + .ReverseMap() + .ForMember(dest => dest.Scope, opt => opt.MapFrom(src => src)); + + CreateMap(); + } + + private void CreateApiScopeMap() + { + CreateMap>() + .ReverseMap(); + + CreateMap() + .ConstructUsing(x => x.Type) + .ReverseMap() + .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src)); + + CreateMap(MemberList.Destination) + .ConstructUsing(src => new IdentityServer4.Models.ApiScope()) + .ReverseMap(); + } + + private void CreateIdentityResourceMap() + { + CreateMap() + .ConstructUsing(src => new IdentityServer4.Models.IdentityResource()); + + CreateMap() + .ConstructUsing(x => x.Type) + .ReverseMap() + .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src)); + + CreateMap>() + .ReverseMap(); + CreateMap(); + } + + private void CreatePersistedGrantMap() + { + //TODO: Why PersistedGrant mapping is in this profile? + CreateMap().ReverseMap(); + CreateMap(); + } + private void CreateDeviceFlowCodesMap() + { + CreateMap(); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/AbpIdentityServerEfCoreQueryableExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/AbpIdentityServerEfCoreQueryableExtensions.cs index 347b3c4d22..d830da07e0 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/AbpIdentityServerEfCoreQueryableExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/AbpIdentityServerEfCoreQueryableExtensions.cs @@ -18,7 +18,8 @@ namespace Volo.Abp.IdentityServer return queryable .Include(x => x.Secrets) .Include(x => x.UserClaims) - .Include(x => x.Scopes); + .Include(x => x.Scopes) + .Include(x => x.Properties); } public static IQueryable IncludeDetails(this IQueryable queryable, bool include = true) 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 bf8a8c2df2..53644a1e1c 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 @@ -67,15 +67,6 @@ namespace Volo.Abp.IdentityServer.ApiScopes .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> GetListAsync( - bool includeDetails = false, - CancellationToken cancellationToken = default) - { - return await DbSet - .IncludeDetails(includeDetails) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken); diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs index 4d89745874..fd22e97fe4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs @@ -33,6 +33,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore options.AddRepository(); options.AddRepository(); + options.AddRepository(); options.AddRepository(); options.AddRepository(); options.AddRepository(); diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs index db1017b9ab..3178fa02f2 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs @@ -34,7 +34,6 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore #endregion - #region IdentityResource DbSet IdentityResources { get; set; } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs index f7ccb1d309..c8dc32b183 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs @@ -34,7 +34,6 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore #endregion - #region IdentityResource public DbSet IdentityResources { get; set; } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index 8d96f2c442..b2dba48e15 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; -using Volo.Abp.EntityFrameworkCore.ValueComparers; -using Volo.Abp.EntityFrameworkCore.ValueConverters; +using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; @@ -188,31 +186,6 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.Value).HasMaxLength(ClientPropertyConsts.ValueMaxLength).IsRequired(); }); - builder.Entity(b => - { - b.ToTable(options.TablePrefix + "PersistedGrants", options.Schema); - - b.ConfigureByConvention(); - - b.Property(x => x.Key).HasMaxLength(PersistedGrantConsts.KeyMaxLength).ValueGeneratedNever(); - b.Property(x => x.Type).HasMaxLength(PersistedGrantConsts.TypeMaxLength).IsRequired(); - b.Property(x => x.SubjectId).HasMaxLength(PersistedGrantConsts.SubjectIdMaxLength); - b.Property(x => x.ClientId).HasMaxLength(PersistedGrantConsts.ClientIdMaxLength).IsRequired(); - b.Property(x => x.CreationTime).IsRequired(); - - if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) - { - PersistedGrantConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0. - } - - b.Property(x => x.Data).HasMaxLength(PersistedGrantConsts.DataMaxLengthValue).IsRequired(); - - b.HasKey(x => x.Key); //TODO: What about Id!!! - - b.HasIndex(x => new {x.SubjectId, x.ClientId, x.Type}); - b.HasIndex(x => x.Expiration); - }); - #endregion #region IdentityResource @@ -255,9 +228,9 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.Key).HasMaxLength(IdentityResourcePropertyConsts.KeyMaxLength).IsRequired(); if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) { - IdentityResourcePropertyConsts.ValueMaxLengthValue = 300; + IdentityResourcePropertyConsts.ValueMaxLength = 300; } - b.Property(x => x.Value).HasMaxLength(IdentityResourcePropertyConsts.ValueMaxLengthValue).IsRequired(); + b.Property(x => x.Value).HasMaxLength(IdentityResourcePropertyConsts.ValueMaxLength).IsRequired(); }); #endregion @@ -270,16 +243,16 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.ConfigureByConvention(); + b.HasIndex(x => x.Name).IsUnique(); + b.Property(x => x.Name).HasMaxLength(ApiResourceConsts.NameMaxLength).IsRequired(); b.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); b.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); - b.Property(x => x.Properties) - .HasConversion(new AbpJsonValueConverter>()) - .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); b.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); b.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); }); builder.Entity(b => @@ -291,14 +264,14 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiResourceId, x.Type, x.Value}); b.Property(x => x.Type).HasMaxLength(ApiResourceSecretConsts.TypeMaxLength).IsRequired(); - b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) { ApiResourceSecretConsts.ValueMaxLengthValue = 300; } - b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLengthValue).IsRequired(); + + b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); }); builder.Entity(b => @@ -323,6 +296,22 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.Scope).HasMaxLength(ApiResourceScopeConsts.ScopeMaxLength).IsRequired(); }); + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "ApiResourceProperties", options.Schema); + + b.ConfigureByConvention(); + + b.HasKey(x => new {x.ApiResourceId, x.Key}); + + b.Property(x => x.Key).HasMaxLength(ApiResourcePropertyConsts.KeyMaxLength).IsRequired(); + if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) + { + ApiResourcePropertyConsts.ValueMaxLength = 300; + } + b.Property(x => x.Value).HasMaxLength(ApiResourcePropertyConsts.ValueMaxLength).IsRequired(); + }); + #endregion #region ApiScope @@ -340,9 +329,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasIndex(x => x.Name).IsUnique(); b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); - - //TODO: Identity Server does not configure the relationship of Properties - //b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); + b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); }); builder.Entity(b => @@ -351,10 +338,9 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.ConfigureByConvention(); - b.HasKey(x => new {x.ApiScopeId, x.Name, x.Type}); + b.HasKey(x => new {x.ApiScopeId, x.Type}); b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); - b.Property(x => x.Name).HasMaxLength(ApiScopeClaimConsts.NameMaxLength).IsRequired(); }); builder.Entity(b => @@ -368,9 +354,41 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.Key).HasMaxLength(ApiScopePropertyConsts.KeyMaxLength).IsRequired(); if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) { - ApiScopePropertyConsts.ValueMaxLengthValue = 300; + ApiScopePropertyConsts.ValueMaxLength = 300; } - b.Property(x => x.Value).HasMaxLength(ApiScopePropertyConsts.ValueMaxLengthValue).IsRequired(); + b.Property(x => x.Value).HasMaxLength(ApiScopePropertyConsts.ValueMaxLength).IsRequired(); + }); + + #endregion + + #region PersistedGrant + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "PersistedGrants", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.Key).HasMaxLength(PersistedGrantConsts.KeyMaxLength).ValueGeneratedNever(); + b.Property(x => x.Type).HasMaxLength(PersistedGrantConsts.TypeMaxLength).IsRequired(); + b.Property(x => x.SubjectId).HasMaxLength(PersistedGrantConsts.SubjectIdMaxLength); + b.Property(x => x.SessionId).HasMaxLength(PersistedGrantConsts.SessionIdMaxLength); + b.Property(x => x.ClientId).HasMaxLength(PersistedGrantConsts.ClientIdMaxLength).IsRequired(); + b.Property(x => x.Description).HasMaxLength(PersistedGrantConsts.DescriptionMaxLength); + b.Property(x => x.CreationTime).IsRequired(); + + if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) + { + PersistedGrantConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0. + } + + b.Property(x => x.Data).HasMaxLength(PersistedGrantConsts.DataMaxLengthValue).IsRequired(); + + b.HasKey(x => x.Key); //TODO: What about Id!!! + + b.HasIndex(x => new {x.SubjectId, x.ClientId, x.Type}); + b.HasIndex(x => new {x.SubjectId, x.SessionId, x.Type}); + b.HasIndex(x => x.Expiration); }); #endregion @@ -386,16 +404,19 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.DeviceCode).HasMaxLength(DeviceFlowCodesConsts.DeviceCodeMaxLength).IsRequired(); b.Property(x => x.UserCode).HasMaxLength(DeviceFlowCodesConsts.UserCodeMaxLength).IsRequired(); b.Property(x => x.SubjectId).HasMaxLength(DeviceFlowCodesConsts.SubjectIdMaxLength); + b.Property(x => x.SessionId).HasMaxLength(DeviceFlowCodesConsts.SessionIdMaxLength); b.Property(x => x.ClientId).HasMaxLength(DeviceFlowCodesConsts.ClientIdMaxLength).IsRequired(); + b.Property(x => x.Description).HasMaxLength(DeviceFlowCodesConsts.DescriptionMaxLength); + b.Property(x => x.CreationTime).IsRequired(); b.Property(x => x.Expiration).IsRequired(); if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) { - DeviceFlowCodesConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0. + DeviceFlowCodesConsts.DataMaxLength = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0. } - b.Property(x => x.Data).HasMaxLength(DeviceFlowCodesConsts.DataMaxLengthValue).IsRequired(); + b.Property(x => x.Data).HasMaxLength(DeviceFlowCodesConsts.DataMaxLength).IsRequired(); - b.HasIndex(x => new {x.UserCode}).IsUnique(); + b.HasIndex(x => new {x.UserCode}); b.HasIndex(x => x.DeviceCode).IsUnique(); b.HasIndex(x => x.Expiration); }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs index 0662482b65..5190687342 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs @@ -182,7 +182,7 @@ namespace MyCompanyName.MyProjectName.IdentityServer AccessTokenLifetime = 31536000, //365 days AuthorizationCodeLifetime = 300, IdentityTokenLifetime = 300, - RequireConsent = false, + RequireConsent = true, RequirePkce = false, FrontChannelLogoutUri = frontChannelLogoutUri },