#asp.net-web-api #jwt
#asp.net-web-api #jwt
Вопрос:
Я хочу регенерировать свой токен-носитель при каждом запросе, отправляемом на сервер.
Я не хочу использовать токен обновления для этой цели.
Может кто-нибудь, пожалуйста, посоветовать, как я могу регенерировать новый токен с новым штампом истечения срока действия из ранее сгенерированного токена, который передается через заголовок авторизации?
Комментарии:
1. С какой целью, если можно спросить?
Ответ №1:
Вызывайте конечную точку токена сервера авторизации каждый раз, прежде чем отправлять запрос API.
Комментарии:
1. Я не хочу делать дополнительный запрос. Я пытаюсь генерировать токен при каждом вызове веб-сервера, и новый токен будет отправляться в ответном промежуточном сообщении. Я ищу токен скользящего истечения срока действия
2. хорошо, используемые вами слова предполагают OAuth 2.0, отсюда и мой ответ; кажется, вы хотите сделать что-то другое, кроме стандартного
3. Я сделал что-то идентичное тому, что вы предлагаете, но вместо того, чтобы вызывать endpoint каждый раз, когда я делал общий ответ при каждом вызове API, который будет иметь новый токен с расширенным сроком действия
Ответ №2:
Я создал фильтр 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;