Я создал фильтр MessageHandler, унаследованный от класса DelegatingHandler, и переписал метод SendAsync.
Я могу получить доступ к своему исходному токену на предъявителя, полученному из запроса, который я могу декодировать и сгенерировать новый. После генерации нового я помещаю его в ответ, чтобы он выполнялся при каждом запросе, и нам не нужно управлять отдельным API
string audienceId = Properties.Settings.Default.AudienceId;
var issuer = Properties.Settings.Default.AngularHostURL;
string symmetricKeyAsBase64 = Properties.Settings.Default.AudienceSecret;
DateTime IssuedUtc = DateTime.UtcNow;
DateTime ExpiresUtc =
IssuedUtc.AddMinutes(Properties.Settings.Default.TokenLifetimeInMinutes);
var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);
var signingKey = new HmacSigningCredentials(keyByteArray);
var identity = new ClaimsIdentity("JWT");
foreach (var claim in claims)
identity.AddClaim(claim);
var tokennew = new JwtSecurityToken(issuer, audienceId, identity.Claims,
IssuedUtc, ExpiresUtc, signingKey);
var handler = new JwtSecurityTokenHandler();
var jwt = handler.WriteToken(tokennew);
return jwt;