Skip to content

Commit cc2345b

Browse files
authored
Merge pull request #1280 from colinin/multi-audience
feat: Increase multi audience support
2 parents 8cb3125 + 3b95157 commit cc2345b

11 files changed

Lines changed: 116 additions & 31 deletions

File tree

aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
484484
options.TokenValidationParameters.ValidIssuers = validIssuers;
485485
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
486486
}
487+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
488+
if (validAudiences?.Count > 0)
489+
{
490+
options.TokenValidationParameters.ValidAudiences = validAudiences;
491+
}
487492
});
488493

489494
if (!isDevelopment)

aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeedContributor.cs

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using LINGYUN.Abp.Identity;
2-
using LINGYUN.Abp.OpenIddict.LinkUser;
3-
using LINGYUN.Abp.OpenIddict.Sms;
4-
using LINGYUN.Abp.OpenIddict.WeChat;
5-
using Microsoft.Extensions.Configuration;
1+
using Microsoft.Extensions.Configuration;
62
using OpenIddict.Abstractions;
73
using System;
84
using System.Collections.Generic;
@@ -11,8 +7,6 @@
117
using Volo.Abp.Authorization.Permissions;
128
using Volo.Abp.Data;
139
using Volo.Abp.DependencyInjection;
14-
using Volo.Abp.Guids;
15-
using Volo.Abp.Identity;
1610
using Volo.Abp.MultiTenancy;
1711
using Volo.Abp.OpenIddict.Applications;
1812
using Volo.Abp.OpenIddict.Scopes;
@@ -22,6 +16,30 @@ namespace LY.MicroService.AuthServer.DataSeeder;
2216

2317
public class ServerDataSeedContributor : IDataSeedContributor, ITransientDependency
2418
{
19+
public static HashSet<string> InitializeScopes = new HashSet<string>
20+
{
21+
// obsolete! microservice should be allocated separately
22+
"lingyun-abp-application",
23+
// admin service
24+
"ams",
25+
// identity service
26+
"ids",
27+
// localization service
28+
"lts",
29+
// platform service
30+
"pts",
31+
// message service
32+
"mgs",
33+
// task service
34+
"tks",
35+
// webhook service
36+
"wks",
37+
// workflow service
38+
"wfs",
39+
// wechat service
40+
"was"
41+
};
42+
2543
private readonly IConfiguration _configuration;
2644
private readonly ICurrentTenant _currentTenant;
2745
private readonly IOpenIddictApplicationManager _applicationManager;
@@ -54,33 +72,37 @@ public async Task SeedAsync(DataSeedContext context)
5472
{
5573
using (_currentTenant.Change(context.TenantId))
5674
{
57-
await CreateScopeAsync("lingyun-abp-application");
58-
await CreateApplicationAsync("lingyun-abp-application");
75+
await CreateScopeAsync(InitializeScopes);
76+
77+
await CreateApplicationAsync(InitializeScopes);
5978
}
6079
}
6180

62-
private async Task CreateScopeAsync(string scope)
81+
private async Task CreateScopeAsync(IEnumerable<string> scopes)
6382
{
64-
if (await _scopeRepository.FindByNameAsync(scope) == null)
83+
foreach (var scope in scopes)
6584
{
66-
await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor()
85+
if (await _scopeRepository.FindByNameAsync(scope) == null)
6786
{
68-
Name = scope,
69-
DisplayName = scope + " access",
70-
DisplayNames =
71-
{
72-
[CultureInfo.GetCultureInfo("zh-Hans")] = "Abp API 应用程序访问",
73-
[CultureInfo.GetCultureInfo("en")] = "Abp API Application Access"
74-
},
75-
Resources =
87+
await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor()
7688
{
77-
scope
78-
}
79-
});
89+
Name = scope,
90+
DisplayName = scope + " access",
91+
DisplayNames =
92+
{
93+
[CultureInfo.GetCultureInfo("zh-Hans")] = "Abp API 应用程序访问",
94+
[CultureInfo.GetCultureInfo("en")] = "Abp API Application Access"
95+
},
96+
Resources =
97+
{
98+
scope
99+
}
100+
});
101+
}
80102
}
81103
}
82104

83-
private async Task CreateApplicationAsync(string scope)
105+
private async Task CreateApplicationAsync(IEnumerable<string> scopes)
84106
{
85107
var configurationSection = _configuration.GetSection("OpenIddict:Applications");
86108

@@ -91,7 +113,7 @@ private async Task CreateApplicationAsync(string scope)
91113

92114
if (await _applicationRepository.FindByClientIdAsync(vueClientId) == null)
93115
{
94-
await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
116+
var application = new OpenIddictApplicationDescriptor
95117
{
96118
ClientId = vueClientId,
97119
ClientSecret = configurationSection["VueAdmin:ClientSecret"],
@@ -138,9 +160,14 @@ await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
138160
OpenIddictConstants.Permissions.Scopes.Email,
139161
OpenIddictConstants.Permissions.Scopes.Address,
140162
OpenIddictConstants.Permissions.Scopes.Phone,
141-
OpenIddictConstants.Permissions.Prefixes.Scope + scope
142163
}
143-
});
164+
};
165+
foreach (var scope in scopes)
166+
{
167+
application.Permissions.AddIfNotContains(OpenIddictConstants.Permissions.Prefixes.Scope + scope);
168+
}
169+
170+
await _applicationManager.CreateAsync(application);
144171

145172
var vueClientPermissions = new string[1]
146173
{
@@ -155,7 +182,7 @@ await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
155182
{
156183
if (await _applicationRepository.FindByClientIdAsync(internalServiceClientId) == null)
157184
{
158-
await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
185+
var application = new OpenIddictApplicationDescriptor
159186
{
160187
ClientId = internalServiceClientId,
161188
ClientSecret = configurationSection["InternalService:ClientSecret"],
@@ -193,9 +220,14 @@ await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
193220
OpenIddictConstants.Permissions.Scopes.Email,
194221
OpenIddictConstants.Permissions.Scopes.Address,
195222
OpenIddictConstants.Permissions.Scopes.Phone,
196-
OpenIddictConstants.Permissions.Prefixes.Scope + scope
197223
}
198-
});
224+
};
225+
foreach (var scope in scopes)
226+
{
227+
application.Permissions.AddIfNotContains(OpenIddictConstants.Permissions.Prefixes.Scope + scope);
228+
}
229+
230+
await _applicationManager.CreateAsync(application);
199231

200232
var internalServicePermissions = new string[2]
201233
{
@@ -247,9 +279,12 @@ await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
247279
OpenIddictConstants.Permissions.Scopes.Email,
248280
OpenIddictConstants.Permissions.Scopes.Address,
249281
OpenIddictConstants.Permissions.Scopes.Phone,
250-
OpenIddictConstants.Permissions.Prefixes.Scope + scope
251282
}
252283
};
284+
foreach (var scope in scopes)
285+
{
286+
application.Permissions.AddIfNotContains(OpenIddictConstants.Permissions.Prefixes.Scope + scope);
287+
}
253288

254289
oauthClientRootUrls.ForEach(url =>
255290
{

aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
449449
options.TokenValidationParameters.ValidIssuers = validIssuers;
450450
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
451451
}
452+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
453+
if (validAudiences?.Count > 0)
454+
{
455+
options.TokenValidationParameters.ValidAudiences = validAudiences;
456+
}
452457
});
453458

454459
if (!isDevelopment)

aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
470470
options.TokenValidationParameters.ValidIssuers = validIssuers;
471471
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
472472
}
473+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
474+
if (validAudiences?.Count > 0)
475+
{
476+
options.TokenValidationParameters.ValidAudiences = validAudiences;
477+
}
473478
});
474479

475480
if (!isDevelopment)

aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
355355
options.TokenValidationParameters.ValidIssuers = validIssuers;
356356
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
357357
}
358+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
359+
if (validAudiences?.Count > 0)
360+
{
361+
options.TokenValidationParameters.ValidAudiences = validAudiences;
362+
}
358363
});
359364

360365
if (isDevelopment)

aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
432432
options.TokenValidationParameters.ValidIssuers = validIssuers;
433433
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
434434
}
435+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
436+
if (validAudiences?.Count > 0)
437+
{
438+
options.TokenValidationParameters.ValidAudiences = validAudiences;
439+
}
435440

436441
options.Events = new JwtBearerEvents
437442
{

aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
458458
options.TokenValidationParameters.ValidIssuers = validIssuers;
459459
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
460460
}
461+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
462+
if (validAudiences?.Count > 0)
463+
{
464+
options.TokenValidationParameters.ValidAudiences = validAudiences;
465+
}
461466

462467
options.Events = new JwtBearerEvents
463468
{

aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
409409
options.TokenValidationParameters.ValidIssuers = validIssuers;
410410
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
411411
}
412+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
413+
if (validAudiences?.Count > 0)
414+
{
415+
options.TokenValidationParameters.ValidAudiences = validAudiences;
416+
}
412417
});
413418

414419
if (!isDevelopment)

aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
465465
options.TokenValidationParameters.ValidIssuers = validIssuers;
466466
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
467467
}
468+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
469+
if (validAudiences?.Count > 0)
470+
{
471+
options.TokenValidationParameters.ValidAudiences = validAudiences;
472+
}
468473
});
469474

470475
if (!isDevelopment)

aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.Configure.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,11 @@ private void ConfigureSecurity(IServiceCollection services, IConfiguration confi
401401
options.TokenValidationParameters.ValidIssuers = validIssuers;
402402
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
403403
}
404+
var validAudiences = configuration.GetSection("AuthServer:ValidAudiences").Get<List<string>>();
405+
if (validAudiences?.Count > 0)
406+
{
407+
options.TokenValidationParameters.ValidAudiences = validAudiences;
408+
}
404409
});
405410

406411
if (!isDevelopment)

0 commit comments

Comments
 (0)