У меня сейчас странная проблема. Мы размещаем приложение ASP.CORE 2.1, которое использует Identity Server 4 в качестве шлюза объединения.
При первом переходе на сайт с использованием Chrome он пуст - в консоли остается лишь небольшой намек на то, что CORB что-то заблокировал.
Глядя в fiddler, кажется, что он блокирует «скрытую» форму, которая отправляет обратно приложениям / signin-oidc middleware.
Но странно то, что при обновлении все работает, и CORB больше не является проблемой. Глядя на соответствующий «хороший» ответ в fiddler, одинаковые заголовки идентичны.
Я могу убедиться, что form_post с Identity Server не достигает приложения в fiddler, отлаживая события OpenID и каждый запрос, и я получаю nada.
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
// look to see if bearer is present instead of cookies
string auth = context.Request.Headers["Authorization"];
if (string.IsNullOrEmpty(auth) || !auth.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
{
// request needs to be authenticated
await context.ChallengeAsync();
}
else
{
await next();
}
}
else
{
// all is good, continue
await next();
}
});
Почему CORB блокирует начальный запрос? Может ли это быть поведение в браузере по сравнению с обновлением?
Вот конфигурация клиента с отлаживаемыми событиями:
services.AddAuthentication(opts =>
{
opts.DefaultChallengeScheme = "oidce";
opts.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(opts =>
{
opts.SessionStore = new MemoryCacheTicketRepository();
opts.ExpireTimeSpan = TimeSpan.FromHours(2);
})
.AddIdentityServerAuthentication("Bearer", opts =>
{
...
})
.AddOpenIdConnect("oidce", opts =>
{
...
opts.Events = new Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectEvents()
{
OnAuthenticationFailed = async p =>
{
var test = p;
},
OnAuthorizationCodeReceived = async p =>
{
var test = p;
},
OnMessageReceived = async p =>
{
var test = p;
},
OnRemoteFailure = async p =>
{
var test = p;
},
OnTicketReceived = async p =>
{
var test = p;
},
OnTokenResponseReceived = async p =>
{
var test = p;
},
OnTokenValidated = async p =>
{
var test = p;
}
};
});
Поскольку в хорошем или плохом ответе нет разницы в заголовках, я думаю, 'Access-Control-Allow-Headers'
с 'Content-Type'
не проблема. Что бы это могло быть?