@@ -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