Настраиваемое сообщение для просроченного токена обновления WebApi - PullRequest
0 голосов
/ 23 мая 2018

Вместо обычного ответа Status: 400 и основного сообщения «Error»: «invalid_client», когда токен истек, существуют ли какие-либо способы изменения кода состояния и тела для отображения чего-то еще?

В настоящее время мне удалось сделать что-то с заголовками следующим образом:

 public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
    {
        AuthenticationTicket ticket;

        if (_refreshTokens.TryRemove(context.Token, out ticket))
        {
            if (ticket.Properties.ExpiresUtc.HasValue && ticket.Properties.ExpiresUtc.Value.LocalDateTime < DateTime.Now)
            {
                context.Response.Headers.Add("Expired", new string[] { "Yes" });
            }

            context.SetTicket(ticket);

        }

    }

Кто-нибудь может помочь?

Спасибо.

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете реализовать пользовательский ASP.NET WebApi DelegatingHandler (если вы хотите, чтобы проверка выполнялась для всех запросов) или ActionFilter (если вы хотите, чтобы проверка выполнялась для определенныхзапросов / на конечную точку), чтобы проверить, является ли токен все еще действительным, и прервать запрос, чтобы вернуть более значимый ответ.Подробности смотрите в ссылках.

Я реализовал простую для вашей справки:

public class CustomTokenCheckMessageHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (HasMyTokenExpired())
        {
            return new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.Unauthorized,
                ReasonPhrase = "",
                Content = new StringContent("Test") // See HttpContent for more https://msdn.microsoft.com/en-us/library/system.net.http.httpcontent(v=vs.118).aspx
            };
        }

        return await base.SendAsync(request, cancellationToken);
    }

    public bool HasMyTokenExpired()
    {
        //Your custom logic here
        return true;
    }
}

Затем вам нужно зарегистрировать его в файле WebApiConfig, например:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        /*
            All other config goes here
        */

        //This line registers the handler
        config.MessageHandlers.Add(new CustomTokenCheckMessageHandler());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...