public async Task <string> Execute(IEnumerable <string> audiences, IEnumerable <AddPermissionParameter> addPermissionParameters) { if (audiences == null) { throw new ArgumentNullException(nameof(audiences)); } if (addPermissionParameters == null) { throw new ArgumentNullException(nameof(addPermissionParameters)); } var json = addPermissionParameters == null ? string.Empty : JsonConvert.SerializeObject(addPermissionParameters); _umaServerEventSource.StartAddPermission(json); await CheckAddPermissionParameter(addPermissionParameters); var ticketLifetimeInSeconds = await _configurationService.GetTicketLifeTime(); var ticket = new Ticket { Id = Guid.NewGuid().ToString(), Audiences = audiences, CreateDateTime = DateTime.UtcNow, ExpiresIn = ticketLifetimeInSeconds, ExpirationDateTime = DateTime.UtcNow.AddSeconds(ticketLifetimeInSeconds) }; var ticketLines = new List <TicketLine>(); foreach (var addPermissionParameter in addPermissionParameters) { ticketLines.Add(new TicketLine { Id = Guid.NewGuid().ToString(), Scopes = addPermissionParameter.Scopes, ResourceSetId = addPermissionParameter.ResourceSetId }); } ticket.Lines = ticketLines; if (!await _ticketStore.AddAsync(ticket)) { throw new BaseUmaException(ErrorCodes.InternalError, ErrorDescriptions.TheTicketCannotBeInserted); } _umaServerEventSource.FinishAddPermission(json); return(ticket.Id); }