base.IsAuthorized (actionContext) возвращает 401 несколько раз в пользовательском фильтре - PullRequest
0 голосов
/ 04 апреля 2019

у нас есть веб-API mvc, где мы реализовали защиту на основе токенов для потребителей API, и токен генерируется с использованием Microsoft.Owin.Security.AuthenticationTicket, а затем у нас есть собственный атрибут, унаследованный от AuthorizeAttribute.Токен всегда проверяется с помощью base.IsAuthorized (actionContext), когда мы вызываем его внутри метода OnAuthorization, но эта проверка выполняется только в наших локальных средах и средах разработки.Обратите внимание, что мы поставляем токен в заголовке авторизации запроса с однонаправленным каналом. В тестовой среде авторизация завершается неудачно при двух последовательных вызовах всегда со вновь сгенерированным токеном, но успешно выполняется в третий раз, и этот шаблон продолжается следующим образом.

Настраиваемый атрибут проверки токена.

public class UserAuthenticationFilter : AuthorizeAttribute
{        
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (!base.IsAuthorized(actionContext))
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        else
        {
             // Token valid. Do some work
        }
    }
}

Код генерации токена

    public string GenerateToken(string consumerId)
    {
        var tokenExpiration = TimeSpan.FromMinutes(60);

        var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);

        identity.AddClaim(new Claim("ConsumerId", consumerId));

        var props = new AuthenticationProperties()
        {
            IssuedUtc = DateTime.UtcNow,
            ExpiresUtc = DateTime.UtcNow.Add(tokenExpiration),
        };

        var ticket = new AuthenticationTicket(identity, props);

        return Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);
    }

Эта вещь отлично работает как в локальной среде, так и в среде разработки.Но когда мы развернули в тестовой среде, он дает 401-несанкционированному два раза, а в третий раз он работает нормально.

...