В этом запросе отказано в авторизации - время от времени - PullRequest
0 голосов
/ 15 марта 2019

Время от времени мой asp.net API 2 возвращает ошибку: авторизация отклонена для этого запроса. Странно то, что API работает нормально в большинстве случаев, но эта ошибка возникает при случайном времени и случайном сценарии, а также при случайных конечных точках.

Мое приложение переднего плана делает 2 запроса одновременно, первый в порядке, а второй - ошибка 401, поэтому я могу предположить, что токен не просрочен?

Моя конфигурация выглядит так:

  // Configure the db context and user manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

        // Configure the application for OAuth based flow
        PublicClientId = "self";
        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId, null, null),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(Convert.ToDouble(ConfigurationManager.AppSettings["AccessTokenExpireMinutes"])),

            // In production mode set AllowInsecureHttp = false
            AllowInsecureHttp = true,
            RefreshTokenProvider = new ApplicationRefreshTokenProvider(),
        };

        // Enable the application to use bearer tokens to authenticate users
        app.UseOAuthBearerTokens(OAuthOptions);

Мой АутентификацияTokenProvider:

    public class ApplicationRefreshTokenProvider : AuthenticationTokenProvider
{
    /// <summary>
    /// The create.
    /// </summary>
    /// <param name="context">
    /// The context.
    /// </param>
    public override void Create(AuthenticationTokenCreateContext context)
    {
        // Expiration time in seconds
        int expire = Convert.ToInt32(ConfigurationManager.AppSettings["RefreshAccessTokenExpireMinutes"]);
        context.Ticket.Properties.ExpiresUtc = new DateTimeOffset(DateTime.Now.AddMinutes(expire));
        context.SetToken(context.SerializeTicket());
    }

    /// <summary>
    /// The receive.
    /// </summary>
    /// <param name="context">
    /// The context.
    /// </param>
    public override void Receive(AuthenticationTokenReceiveContext context)
    {
        context.DeserializeTicket(context.Token);
    }
}

Я считаю, что это не связано с конфигурацией, потому что это поведение происходит внезапно без какой-либо причины и без изменений в реализации аутентификации. Любые идеи, как я могу отладить или найти что-то не так?

Я не могу найти какую-либо полезную информацию в журналах, и очень сложно смоделировать ошибку.

...