Эта «ошибка» дала мне много часов работы сверхурочных! Но я начинаю видеть его потенциальное использование (но мне хотелось бы, чтобы это было во время выполнения, все еще)
Я дам вам то, что я вижу в качестве полезного примера.
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
Каждый раз перед выполнением запроса API вызывайте конечную точку токена сервера авторизации.
Я создал фильтр 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;