Browse Source

✨ fix: 修改IdentityServer缓存不一致问题

pull/10/head 4.4.0.10
王军 5 years ago
parent
commit
819b38d35c
  1. 3
      aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/appsettings.Development.json
  2. 167
      aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/ProjectNameIdentityServerModule.cs
  3. 27
      aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/appsettings.Development.json
  4. 11
      aspnet-core/services/src/CompanyName.ProjectName.Domain/IdentityServer/IdenityServerApiResourceManager.cs
  5. 1
      aspnet-core/services/src/CompanyName.ProjectName.Domain/IdentityServer/IdenityServerClientManager.cs

3
aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/appsettings.Development.json

@ -24,9 +24,6 @@
"DatabaseId": 0 "DatabaseId": 0
} }
}, },
"StringEncryption": {
"DefaultPassPhrase": "YFLtqf75HkDnKR0n"
},
"Jwt": { "Jwt": {
"Audience": "CompanyNameProjectName", "Audience": "CompanyNameProjectName",
//客户端标识 //客户端标识

167
aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/ProjectNameIdentityServerModule.cs

@ -14,6 +14,7 @@ using CompanyName.ProjectName.MultiTenancy;
using IdentityServer4.Configuration; using IdentityServer4.Configuration;
using IdentityServer4.Extensions; using IdentityServer4.Extensions;
using IdentityServer4.Models; using IdentityServer4.Models;
using Microsoft.Extensions.Configuration;
using StackExchange.Redis; using StackExchange.Redis;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Account; using Volo.Abp.Account;
@ -56,48 +57,53 @@ namespace CompanyName.ProjectName
var hostingEnvironment = context.Services.GetHostingEnvironment(); var hostingEnvironment = context.Services.GetHostingEnvironment();
var configuration = context.Services.GetConfiguration(); var configuration = context.Services.GetConfiguration();
context.Services.AddSameSiteCookiePolicy(); context.Services.AddSameSiteCookiePolicy();
Configure<AbpLocalizationOptions>(options => ConfigureLocalization();
{ ConfigureVirtualFileSystem(context);
options.Resources ConfigureCache(context);
.Get<ProjectNameResource>() ConfigureCors(context, configuration);
.AddBaseTypes( ConfigureOther(configuration);
typeof(AbpUiResource) }
);
options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
options.Languages.Add(new LanguageInfo("en", "en", "English"));
options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de"));
options.Languages.Add(new LanguageInfo("es", "es", "Español", "es"));
});
Configure<AbpBundlingOptions>(options => public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{ {
options.StyleBundles.Configure( app.UseDeveloperExceptionPage();
BasicThemeBundles.Styles.Global, }
bundle => { bundle.AddFiles("/global-styles.css"); }
);
});
Configure<AbpAuditingOptions>(options => app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{ {
//options.IsEnabledForGetRequests = true; app.UseErrorPage();
options.ApplicationName = "AuthServer"; }
});
if (hostingEnvironment.IsDevelopment()) app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseCookiePolicy();
app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled)
{ {
Configure<AbpVirtualFileSystemOptions>(options => { options.FileSets.AddEmbedded<ProjectNameIdentityServerModule>(); }); app.UseMultiTenancy();
} }
app.UseUnitOfWork();
app.UseIdentityServer();
app.UseAuthorization();
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseConfiguredEndpoints();
}
private void ConfigureOther(IConfiguration configuration)
{
Configure<AppUrlOptions>(options => Configure<AppUrlOptions>(options =>
{ {
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"]; options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
@ -106,19 +112,16 @@ namespace CompanyName.ProjectName
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"]; options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"];
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password"; options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
}); });
Configure<AbpBackgroundJobOptions>(options => { options.IsJobExecutionEnabled = false; }); Configure<AbpBackgroundJobOptions>(options => { options.IsJobExecutionEnabled = false; });
Configure<AbpAuditingOptions>(options =>
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "ProjectName:"; });
if (!hostingEnvironment.IsDevelopment())
{ {
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); //options.IsEnabledForGetRequests = true;
context.Services options.ApplicationName = "AuthServer";
.AddDataProtection() });
.PersistKeysToStackExchangeRedis(redis, "ProjectName-Protection-Keys"); }
}
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddCors(options => context.Services.AddCors(options =>
{ {
options.AddPolicy(DefaultCorsPolicyName, builder => options.AddPolicy(DefaultCorsPolicyName, builder =>
@ -139,42 +142,60 @@ namespace CompanyName.ProjectName
}); });
} }
public override void OnApplicationInitialization(ApplicationInitializationContext context) private void ConfigureLocalization()
{ {
var app = context.GetApplicationBuilder(); Configure<AbpLocalizationOptions>(options =>
var env = context.GetEnvironment();
if (env.IsDevelopment())
{ {
app.UseDeveloperExceptionPage(); options.Resources
} .Get<ProjectNameResource>()
.AddBaseTypes(
typeof(AbpUiResource)
);
app.UseAbpRequestLocalization(); options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
options.Languages.Add(new LanguageInfo("en", "en", "English"));
options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de"));
options.Languages.Add(new LanguageInfo("es", "es", "Español", "es"));
});
}
if (!env.IsDevelopment()) /// <summary>
{ /// Redis缓存
app.UseErrorPage(); /// </summary>
} private void ConfigureCache(ServiceConfigurationContext context)
{
var redisConnectionString =
context.Services.GetConfiguration().GetValue<string>("Cache:Redis:ConnectionString");
var redisDatabaseId = context.Services.GetConfiguration().GetValue<int>("Cache:Redis:DatabaseId");
var password = context.Services.GetConfiguration().GetValue<string>("Cache:Redis:Password");
var connectString = $"{redisConnectionString},password={password},defaultdatabase={redisDatabaseId}";
var redis = ConnectionMultiplexer.Connect(connectString);
context.Services.AddStackExchangeRedisCache(options => { options.Configuration = connectString; });
context.Services
.AddDataProtection()
.PersistKeysToStackExchangeRedis(redis, "ProjectName-Protection-Keys");
}
app.UseCorrelationId(); private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
app.UseStaticFiles(); {
app.UseRouting(); Configure<AbpVirtualFileSystemOptions>(options => { options.FileSets.AddEmbedded<ProjectNameIdentityServerModule>(); });
app.UseCors(DefaultCorsPolicyName);
app.UseCookiePolicy();
app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled) Configure<AbpBundlingOptions>(options =>
{ {
app.UseMultiTenancy(); options.StyleBundles.Configure(
} BasicThemeBundles.Styles.Global,
bundle => { bundle.AddFiles("/global-styles.css"); }
app.UseUnitOfWork(); );
app.UseIdentityServer(); });
app.UseAuthorization();
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseConfiguredEndpoints();
} }
} }
} }

27
aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/appsettings.Development.json

@ -1,18 +1,19 @@
{ {
"App": { "App": {
"SelfUrl": "https://localhost:44354", "SelfUrl": "https://localhost:44354",
"ClientUrl": "http://localhost:4200", "ClientUrl": "http://localhost:4200",
"CorsOrigins": "https://*.ProjectName.com,http://localhost:4200,https://localhost:44307,https://localhost:44315", "CorsOrigins": "https://*.ProjectName.com,http://localhost:4200,https://localhost:44307,https://localhost:44315",
"RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307" "RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307"
}, },
"ConnectionStrings": { "ConnectionStrings": {
"Default": "Data Source=localhost;Database=CompanyNameProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" "Default": "Data Source=localhost;Database=CompanyNameProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true"
}, },
"Cache": {
"Redis": { "Redis": {
"Configuration": "localhost,password=mypassword" "ConnectionString": "localhost",
}, "Password": "mypassword",
"StringEncryption": { "DatabaseId": 0
"DefaultPassPhrase": "YFLtqf75HkDnKR0n"
} }
} }
}

11
aspnet-core/services/src/CompanyName.ProjectName.Domain/IdentityServer/IdenityServerApiResourceManager.cs

@ -119,18 +119,19 @@ namespace CompanyName.ProjectName.IdentityServer
apiResource.ShowInDiscoveryDocument = showInDiscoveryDocument; apiResource.ShowInDiscoveryDocument = showInDiscoveryDocument;
if (secret.IsNotNullOrWhiteSpace()) if (secret.IsNotNullOrWhiteSpace())
{ {
// 判读密钥是否一样
if (apiResource.Secrets.Count > 0) if (apiResource.Secrets.Count > 0)
{ {
apiResource.AddSecret(secret.ToSha256()); if (apiResource.Secrets.First().Value != secret)
}
else
{
if (apiResource.Secrets.Any(e => e.Value != secret))
{ {
apiResource.Secrets.Clear(); apiResource.Secrets.Clear();
apiResource.AddSecret(secret.ToSha256()); apiResource.AddSecret(secret.ToSha256());
} }
} }
else
{
apiResource.AddSecret(secret.ToSha256());
}
} }

1
aspnet-core/services/src/CompanyName.ProjectName.Domain/IdentityServer/IdenityServerClientManager.cs

@ -151,7 +151,6 @@ namespace CompanyName.ProjectName.IdentityServer
{ {
if (client.ClientSecrets.Count == 0) if (client.ClientSecrets.Count == 0)
{ {
client.AddSecret(secret.ToSha256(), null, secretType, String.Empty); client.AddSecret(secret.ToSha256(), null, secretType, String.Empty);
} }
else else

Loading…
Cancel
Save