Browse Source

Merge pull request #388 from colinin/4.4.2

feat(identity): added custom identity resource seeder, default preset avatarUrl resource
pull/396/head
yx lin 4 years ago
committed by GitHub
parent
commit
5dfbc55685
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/AbpIdentityServerDomainModule.cs
  2. 73
      aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/IdentityResources/CustomIdentityResourceDataSeeder.cs
  3. 14
      aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/IdentityResources/CustomIdentityResourceDataSeederOptions.cs
  4. 9
      aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/IdentityResources/ICustomIdentityResourceDataSeeder.cs
  5. 13
      aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.Configure.cs
  6. 1
      aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs
  7. 7
      aspnet-core/services/account/AuthServer.Host/DataSeeder/IdentityServerDataSeedContributor.cs
  8. 19
      aspnet-core/services/account/AuthServer.Host/IdentityResources/CustomIdentityResources.cs
  9. 3
      aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.Configure.cs

18
aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/AbpIdentityServerDomainModule.cs

@ -1,9 +1,9 @@
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.IdentityServer
{
[DependsOn(typeof(Volo.Abp.IdentityServer.AbpIdentityServerDomainModule))]
public class AbpIdentityServerDomainModule : AbpModule
{
}
}
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.IdentityServer
{
[DependsOn(typeof(Volo.Abp.IdentityServer.AbpIdentityServerDomainModule))]
public class AbpIdentityServerDomainModule : AbpModule
{
}
}

73
aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/IdentityResources/CustomIdentityResourceDataSeeder.cs

@ -0,0 +1,73 @@
using Microsoft.Extensions.Options;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Identity;
using Volo.Abp.IdentityServer.IdentityResources;
namespace LINGYUN.Abp.IdentityServer.IdentityResources
{
public class CustomIdentityResourceDataSeeder : ICustomIdentityResourceDataSeeder, ITransientDependency
{
protected IIdentityClaimTypeRepository ClaimTypeRepository { get; }
protected IIdentityResourceRepository IdentityResourceRepository { get; }
protected IGuidGenerator GuidGenerator { get; }
protected CustomIdentityResourceDataSeederOptions Options { get; }
public CustomIdentityResourceDataSeeder(
IIdentityResourceRepository identityResourceRepository,
IGuidGenerator guidGenerator,
IIdentityClaimTypeRepository claimTypeRepository,
IOptions<CustomIdentityResourceDataSeederOptions> options)
{
IdentityResourceRepository = identityResourceRepository;
GuidGenerator = guidGenerator;
ClaimTypeRepository = claimTypeRepository;
Options = options.Value;
}
public virtual async Task CreateCustomResourcesAsync()
{
foreach (var resource in Options.Resources)
{
foreach (var claimType in resource.UserClaims)
{
await AddClaimTypeIfNotExistsAsync(claimType);
}
await AddIdentityResourceIfNotExistsAsync(resource);
}
}
protected virtual async Task AddIdentityResourceIfNotExistsAsync(IdentityServer4.Models.IdentityResource resource)
{
if (await IdentityResourceRepository.CheckNameExistAsync(resource.Name))
{
return;
}
await IdentityResourceRepository.InsertAsync(
new IdentityResource(
GuidGenerator.Create(),
resource
)
);
}
protected virtual async Task AddClaimTypeIfNotExistsAsync(string claimType)
{
if (await ClaimTypeRepository.AnyAsync(claimType))
{
return;
}
await ClaimTypeRepository.InsertAsync(
new IdentityClaimType(
GuidGenerator.Create(),
claimType,
isStatic: true
)
);
}
}
}

14
aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/IdentityResources/CustomIdentityResourceDataSeederOptions.cs

@ -0,0 +1,14 @@
using IdentityServer4.Models;
using System.Collections.Generic;
namespace LINGYUN.Abp.IdentityServer.IdentityResources
{
public class CustomIdentityResourceDataSeederOptions
{
public IList<IdentityResource> Resources { get; }
public CustomIdentityResourceDataSeederOptions()
{
Resources = new List<IdentityResource>();
}
}
}

9
aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.Domain/LINGYUN/Abp/IdentityServer/IdentityResources/ICustomIdentityResourceDataSeeder.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.IdentityServer.IdentityResources
{
public interface ICustomIdentityResourceDataSeeder
{
Task CreateCustomResourcesAsync();
}
}

13
aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.Configure.cs

@ -1,4 +1,6 @@
using DotNetCore.CAP;
using AuthServer.IdentityResources;
using DotNetCore.CAP;
using LINGYUN.Abp.IdentityServer.IdentityResources;
using LINGYUN.Abp.Serilog.Enrichers.Application;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.DataProtection;
@ -85,6 +87,15 @@ namespace AuthServer.Host
options.UseMySQL();
});
}
private void ConfigureDataSeeder()
{
Configure<CustomIdentityResourceDataSeederOptions>(options =>
{
options.Resources.Add(new CustomIdentityResources.AvatarUrl());
});
}
private void ConfigureJsonSerializer()
{
// 中文序列化的编码问题

1
aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs

@ -88,6 +88,7 @@ namespace AuthServer.Host
ConfigureVirtualFileSystem();
ConfigureLocalization();
ConfigureAuditing();
ConfigureDataSeeder();
ConfigureUrls(configuration);
ConfigureMultiTenancy(configuration);
ConfigureCors(context.Services, configuration);

7
aspnet-core/services/account/AuthServer.Host/DataSeeder/IdentityServerDataSeedContributor.cs

@ -1,4 +1,5 @@
using LINGYUN.Abp.IdentityServer;
using LINGYUN.Abp.IdentityServer.IdentityResources;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
@ -24,6 +25,7 @@ namespace AuthServer.DataSeeder
private readonly IApiResourceRepository _apiResourceRepository;
private readonly IApiScopeRepository _apiScopeRepository;
private readonly IClientRepository _clientRepository;
private readonly ICustomIdentityResourceDataSeeder _customIdentityResourceDataSeeder;
private readonly IIdentityResourceDataSeeder _identityResourceDataSeeder;
private readonly IWeChatResourceDataSeeder _weChatResourceDataSeeder;
private readonly IGuidGenerator _guidGenerator;
@ -38,6 +40,7 @@ namespace AuthServer.DataSeeder
IApiResourceRepository apiResourceRepository,
IWeChatResourceDataSeeder weChatResourceDataSeeder,
IIdentityResourceDataSeeder identityResourceDataSeeder,
ICustomIdentityResourceDataSeeder customIdentityResourceDataSeeder,
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant)
{
@ -48,8 +51,9 @@ namespace AuthServer.DataSeeder
_apiResourceRepository = apiResourceRepository;
_weChatResourceDataSeeder = weChatResourceDataSeeder;
_identityResourceDataSeeder = identityResourceDataSeeder;
_customIdentityResourceDataSeeder = customIdentityResourceDataSeeder;
_guidGenerator = guidGenerator;
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development";
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.{env}.json", optional: false, reloadOnChange: true)
@ -64,6 +68,7 @@ namespace AuthServer.DataSeeder
using (_currentTenant.Change(context?.TenantId))
{
await _identityResourceDataSeeder.CreateStandardResourcesAsync();
await _customIdentityResourceDataSeeder.CreateCustomResourcesAsync();
await CreateWeChatClaimTypeAsync();
await CreateApiResourcesAsync();
await CreateApiScopesAsync();

19
aspnet-core/services/account/AuthServer.Host/IdentityResources/CustomIdentityResources.cs

@ -0,0 +1,19 @@
using IdentityServer4.Models;
namespace AuthServer.IdentityResources
{
public class CustomIdentityResources
{
public class AvatarUrl : IdentityResource
{
public static string ClaimType { get; set; } = "avatarUrl";
public AvatarUrl()
{
Name = ClaimType;
DisplayName = "Your avatar url";
Emphasize = true;
UserClaims = new string[] { ClaimType };
}
}
}
}

3
aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.Configure.cs

@ -11,11 +11,8 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Auditing;
using Volo.Abp.Authorization.Permissions;

Loading…
Cancel
Save