Регенерировать токен-носитель JWT при каждом запросе API

Эта «ошибка» дала мне много часов работы сверхурочных! Но я начинаю видеть его потенциальное использование (но мне хотелось бы, чтобы это было во время выполнения, все еще)

Я дам вам то, что я вижу в качестве полезного примера.

def example(errors=[]):
    # statements
    # Something went wrong
    mistake = True
    if mistake:
        tryToFixIt(errors)
        # Didn't work.. let's try again
        tryToFixItAnotherway(errors)
        # This time it worked
    return errors

def tryToFixIt(err):
    err.append('Attempt to fix it')

def tryToFixItAnotherway(err):
    err.append('Attempt to fix it by another way')

def main():
    for item in range(2):
        errors = example()
    print '\n'.join(errors)

main()

печатает следующие

Attempt to fix it
Attempt to fix it by another way
Attempt to fix it
Attempt to fix it by another way
1
задан Paresh Varde 26 March 2019 в 15:18
поделиться

2 ответа

Каждый раз перед выполнением запроса API вызывайте конечную точку токена сервера авторизации.

0
ответ дан Hans Z. 26 March 2019 в 15:18
поделиться

Я создал фильтр 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;
0
ответ дан Paresh Varde 26 March 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: