Время от времени мой 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);
}
}
Я считаю, что это не связано с конфигурацией, потому что это поведение происходит внезапно без какой-либо причины и без изменений в реализации аутентификации. Любые идеи, как я могу отладить или найти что-то не так?
Я не могу найти какую-либо полезную информацию в журналах, и очень сложно смоделировать ошибку.