Skip to content

Commit 9a12a03

Browse files
fix(#25): this commit updates method to include audiences parameter for improved token generation
1 parent de1be82 commit 9a12a03

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

Applications/Backend/Source/HttpsRichardy.Federation.Infrastructure/Security/JwtSecurityTokenService.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ IHostInformationProvider host
1212
private readonly TimeSpan _accessTokenDuration = TimeSpan.FromHours(2);
1313
private readonly TimeSpan _refreshTokenDuration = TimeSpan.FromDays(7);
1414

15-
public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(User user, CancellationToken cancellation = default)
15+
public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(User user, IEnumerable<Audience> audiences, CancellationToken cancellation = default)
1616
{
1717
var filters = GroupFilters.WithSpecifications()
1818
.WithRealmId(user.RealmId)
@@ -31,6 +31,12 @@ public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(User user, Can
3131
.ToList();
3232

3333
var tokenHandler = new JwtSecurityTokenHandler();
34+
var resolvedAudiences = audiences
35+
.Where(audience => !string.IsNullOrWhiteSpace(audience.Value))
36+
.Select(audience => audience.Value.Trim())
37+
.Distinct(StringComparer.Ordinal)
38+
.ToList();
39+
3440
var claims = new ClaimsBuilder()
3541
.WithSubject(user.Id.ToString())
3642
.WithUsername(user.Username)
@@ -43,10 +49,15 @@ public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(User user, Can
4349
claims.WithClaim(IdentityClaimNames.Realm, realm.Name);
4450
claims.WithClaim(IdentityClaimNames.RealmId, realm.Id);
4551

52+
if (resolvedAudiences.Count > 0)
53+
{
54+
claims.WithAudiences(resolvedAudiences);
55+
}
56+
4657
var claimsIdentity = new ClaimsIdentity(claims.Build());
4758
var tokenDescriptor = new SecurityTokenDescriptor
4859
{
49-
Audience = realm.Name,
60+
Audience = resolvedAudiences.Count > 0 ? null : realm.Name,
5061
Subject = claimsIdentity,
5162
Issuer = host.Address.ToString().TrimEnd('/'),
5263
SigningCredentials = credentials,
@@ -66,6 +77,9 @@ public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(User user, Can
6677
return Result<SecurityToken>.Success(securityToken);
6778
}
6879

80+
public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(User user, CancellationToken cancellation = default)
81+
=> await GenerateAccessTokenAsync(user, [], cancellation);
82+
6983
public async Task<Result<SecurityToken>> GenerateAccessTokenAsync(Client client, CancellationToken cancellation = default)
7084
{
7185
var tokenHandler = new JwtSecurityTokenHandler();

0 commit comments

Comments
 (0)