Вот мой сценарий, может кто-нибудь, пожалуйста, помогите мне. У нас есть существующее приложение MVC5 Intr anet, размещенное в OnPrem DD C. Я пытаюсь реализовать Azure OpenIdAuthentication, которая аутентифицирует пользователей по Azure AD с учетными данными windows и извлекает заявки. И аутентификация, и авторизация работают нормально, но если вызов сделан с Ajax Jquery, я вижу случайные сбои, когда у меня есть более одного сервера за балансировщиком нагрузки F5. Если у меня есть только один сервер за F5 LB, он работает нормально все время, даже для вызовов Ajax, но когда я добавляю другой сервер, это не удается. Если я перефразирую sh, то страница работает нормально в течение некоторого времени, и снова случайно происходит сбой. Я добавил оповещения в Ajax Событие ошибки и в IE Я вижу ошибку «Недопустимый символ» и статус «ошибка разбора», но в chrome «NetworkError: Не удалось выполнить« send »для« XMLHttpRequest ». Тот же код работает нормально с 2 серверами, если я отключаю аутентификацию. Для ссылок на домашнюю страницу я удалил вызовы Ajax и использовал атрибуты уровня метода для авторизации, и я не вижу никаких ошибок. Это происходит только случайным образом, если я выполняю вызовы с Ajax Jquery.
Класс запуска
public void Configuration(IAppBuilder app)
{
string authority = aadInstance + "/" + tenantId;
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
SlidingExpiration = true,
CookieSecure = CookieSecureOption.Never,
ExpireTimeSpan = TimeSpan.FromDays(15)
});
app.Map(
"/web",
a => app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = redirectUri,
SignInAsAuthenticationType = "Cookies",
UseTokenLifetime = false,
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = async n =>
{
n.AuthenticationTicket.Properties.IsPersistent = true;
n.AuthenticationTicket.Properties.ExpiresUtc = DateTime.Today.AddDays(1);
},
RedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.DomainHint = domainHint;
return Task.FromResult(0);
},
AuthenticationFailed = (context) =>
{
context.HandleResponse();
context.OwinContext.Response.Redirect("/Home/Error");
return Task.FromResult(0);
}
}
}));
app.Use((context, next) =>
{
OnAuth(context); (In this method, if user is authenticated, I add claim groups to cache)
return next.Invoke();
});
}
Ajax вызов:
authorize = function (functionName) {
var url = "./HasAccess",
isAuthorized = null;
$.ajax({
url: url,
data: {
'function': functionName },
type: 'GET',
dataType: 'json',
async: false,
success: function (result) { do something}
У кого-нибудь были подобные проблемы?