Содержание
- Сбой токена на предъявителя — сбой корреляции — файл cookie не найден
- .Net Core Identity 2 Provider login Отмена приводит к необработанному исключению
- Невозможно использовать конечную точку для конкретного клиента при аутентификации личных учетных записей MS с помощью Azure AD.
- An error was encountered while handling the remote login. #1610
- Comments
- Footer
- Основное приложение содержит дочерние приложения, но токен не передан
Сбой токена на предъявителя — сбой корреляции — файл cookie не найден
Я пытаюсь реализовать Microsoft MSAL с интерфейсом Angular и Core MVC API.
Мне удалось успешно пройти аутентификацию в приложении Angular и вызвать конечные точки Graph API. Приложение Angular использует следующий код:
app.module.ts
Я могу успешно вызвать Graph API, используя HttpClient с настроенным MsalInterceptor.
Затем я пытаюсь вызвать свой собственный API с аналогичным кодом
Однако этот запрос не выполняется из-за следующей ошибки:
Я предполагаю, что проблема где-то в моем API. Я настроил аутентификацию в моем API MVC .Net 5.0 следующим образом:
Startup.cs
appsettings.json
AuthController.cs
Не похоже, что приложение когда-либо достигает контроллера. Ни одна из точек останова никогда не срабатывает, и когда я исследую события, возникают два исключения:
Часть, которая меня заинтересовала, — это исключение «cookie не найден». Я отправляю не файл cookie, а токен на предъявителя.
Я предполагаю, что в конфигурации моего API не хватает чего-то, что могло бы указать промежуточному программному обеспечению искать токен-носитель, а не файл cookie. Однако, когда я попытался настроить промежуточное ПО для использования AddJwtBearer(. ) , я обнаружил целый ряд новых ошибок. Итак, вопрос в том, что мне не хватает, чтобы получить токен аутентификации MSAL, который у меня есть из внешнего интерфейса Angular, для работы с сервером API?
Источник
.Net Core Identity 2 Provider login Отмена приводит к необработанному исключению
Я добавил LinkedIn в качестве провайдера. Я без проблем ввел логин и зарегистрировался в LinkedIn. В случае использования, когда пользователь CANCELS изнутри страниц провайдера (либо при входе в систему, либо отменяет авторизацию приложения), промежуточное ПО для идентификации, по-видимому, генерирует необработанное исключение:
An unhandled exception occurred while processing the request.
Exception: user_cancelled_login;Description=The user cancelled LinkedIn login
Unknown location
Exception: An error was encountered while handling the remote login.
System.Exception: user_cancelled_login;Description=The user cancelled LinkedIn login
Exception: An error was encountered while handling the remote login.
Настройка провайдера при запуске определяет обратный вызов:
И, как я уже сказал, промежуточное ПО, похоже, обрабатывает ВСЕ другие случаи, кроме случаев, когда пользователь отменяет на страницах LinkedIn. URL-адрес возврата из LinkedIn выглядит правильно:
Но никогда не попадает в мой метод контроллера ExternalCallback, где обрабатываются другие случаи, такие как успешный вход в систему / авторизация ??
Мне интересно, работает ли это для кого-нибудь еще с поставщиками сторонних поставщиков?
Есть Проблема с Github, который более подробно объясняет, что здесь происходит, с небольшой информацией о том, что происходит Зачем, и даже с указанием того, что это не будет «исправлено»:
Handling the RemoteFailure event is the right thing to do. We should update our docs/samples to show how to handle that event and at least show a more appropriate message to the user. The error page sample could include a link to enabled the user to try logging in again.
Unfortunately it’s difficult to implement this event in a very generic way that’s also super useful because each remote auth provider has its own behavior for different types of failures.
Обходной путь для этого (как указано выше) — обработать событие RemoteFailure:
ctx — это экземпляр RemoteFailureContext, который включает свойство Exception , описывающее, что пошло не так. ctx также содержит свойство HttpContext , позволяющее выполнять перенаправления и т. д. В ответ на такие исключения.
Я обнаружил, что для меня хорошо работает следующее, основанное на это и подобное ответу Кирка Ларкина. Часть, которая потребовала небольшого выяснения, заключалась в том, куда перенаправить, не создавая проблем для последующих попыток входа в систему.
Источник
Невозможно использовать конечную точку для конкретного клиента при аутентификации личных учетных записей MS с помощью Azure AD.
Мы хотели бы, чтобы наши клиенты могли аутентифицироваться, используя либо личные, либо рабочие учетные записи. Мы создали отдельный AD в Azure, куда приглашаются клиенты, которые должны предоставить им доступ к нашему приложению.
В приложении ASP.NET Core https://login.microsoftonline.com//v2.0 используется в качестве конечной точки аутентификации. Идентификатор клиента и секрет от приложения, зарегистрированного в предварительной регистрации приложения через портал, предоставляются вместе с запросом. Аутентификация наших рабочих учетных записей работает без сбоев, но при попытке аутентификации большинства личных учетных записей возвращается сообщение об ошибке: An error was encountered while handling the remote login. AADSTS50020: MSA guest token redemption attempt on v2 common endpoint.
Должна ли быть невозможна аутентификация MSA с использованием конечной точки, специфичной для арендатора (только /common )?
Кроме того, этот комментарий указывает на то, что аутентификация MSA в мультитенантных приложениях не будет работать, однако наши должны быть однотенантными: https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims/issues/10#issuecomment-145125080
какой вариант вы выбрали в предварительном просмотре, учетные записи в любом организационном каталоге и личные учетные записи Microsoft?
Источник
An error was encountered while handling the remote login. #1610
Vs direct run is possible, deployed in Docker to report this error
The text was updated successfully, but these errors were encountered:
@jacklmjie It’ll be really hard to help you if we don’t know what code you are running, or what the steps are for you to get this error. From the screenshot there is not even clear that you are executing any Google code.
Also, the error message you are getting is pretty clear: Bad Request. ‘error_uri is null’. Maybe see where that’s comming from and set a value for it? But that’s just a guess, we can’t help you unless we know what you are doing.
Thank you for your reply.This is the code used to obtain authorization information while debugging locally, not online
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie().
AddGoogleOpenIdConnect(options =>
<
IConfigurationSection googleAuthSection = Configuration.GetSection(“ Googele:web”);
options.ClientId = googleAuthSection [“ client_id”];
options.ClientSecret = googleAuthSection [ “ client_secret”];
>);
[GoogleScopedAuthorize(SheetsService.ScopeConstants.SpreadsheetsReadonly)]
public void login()
<
// todo
>
Sorry, I didn’t understand, I use the source code of this project. Google Apis. The Auth. AspNetCore3. IntegrationTests, as an example, the local is normal, but not online using this case, I find the information on https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35, but they are not
OK, thanks for the extra info. I’ll take a look early next week.
Hello, I have a new progress, this I found online without https://accounts.google.com cookies
Hello, I have a new progress, this I found online without https://accounts.google.com cookies
@jacklmjie I’m really sorry but I don’t understand what you mean by this. What did you find? Do you mean that you cleaned the cookies and it worked?
Hello, my question is that the size limit of header by Nginx proxy_buffer_size is 4k by default, but it is changed to 8K, which is normal. Thank you, I will close this problem
© 2023 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Основное приложение содержит дочерние приложения, но токен не передан
У меня есть 2 дочерних приложения, которые, когда я запускаю каждое приложение по отдельности, настроены на использование сервера идентификации v4, а поток аутентификации (неявный) работает, как и ожидалось. Каждое приложение перенаправляется на страницу входа на сервер идентификации.
Теперь у меня есть контейнерное приложение со ссылками на другие приложения, как показано здесь:
Теперь это приложение-контейнер также настроено на сервер идентификации с использованием неявного типа предоставления.
Когда я вхожу в систему с сервера идентификации, а затем нажимаю, чтобы загрузить одно из дочерних приложений, я получаю сообщение об ошибке на сервере идентификации как:
URL-адрес перенаправления из дочернего приложения выглядит правильно.
В chrome следующий URL-адрес не удалось:
Хотя ошибки CORS отображаются, CORS установлен в приложении.
Если я попытаюсь запустить указанный выше URL-адрес напрямую, я увижу следующую ошибку:
An unhandled exception occurred while processing the request. Exception: Correlation failed. Unknown location
Exception: An error was encountered while handling the remote login. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()
Я попытался настроить все приложения для использования гибридного типа гранта, но вижу те же ошибки.
Так что мне нужно сделать больше, чем убедиться, что каждое приложение работает с сервером идентификации, чтобы заставить работать приложение-контейнер?
У меня сложилось впечатление, что идентификатор токена после входа в основное приложение-контейнер будет передан дочернему приложению, а новый токен доступа будет отправлен обратно в дочернее приложение.
«У меня есть 2 дочерних приложения, и когда я запускаю каждое приложение по отдельности, они настроены на использование сервера идентификации v4 и потока аутентификации (неявного) работает как положено». Почему ссылка выше не работает? Разве это не должно быть таким же, как запрос, который работал из клиентского приложения?
Ссылка не та (нонс отличается). Может ли это быть связано с защитой данных? у меня ничего не настроено.
Источник
While implementing external social login in ASP.NET Core2.2 MVC web application without ASP.NET Core Identity. I am getting below error while redirecting back to the application after successful sign in with Google, Facebook, Twitter, LinkedIn and Microsoft.
An unhandled exception occurred while processing the request.
Exception: Invalid state cookie. Unknown locationException: An error was encountered while handling the remote login.
Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()
Following are the settings in Startup.cs file
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services
.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.Cookie.IsEssential = true;
})
.AddGoogle(options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
options.CallbackPath = "/externallogincallback";
})
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
facebookOptions.CallbackPath = "/externallogincallback";
})
.AddLinkedIn(linkedinOptions =>
{
linkedinOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
linkedinOptions.ClientId = Configuration["Authentication:LinkedIn:ClientId"];
linkedinOptions.ClientSecret = Configuration["Authentication:LinkedIn:ClientSecret"];
linkedinOptions.CallbackPath = "/externallogincallback";
})
.AddTwitter(twitterOptions =>
{
twitterOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerKey"];
twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
twitterOptions.CallbackPath = "/Home/externallogincallback";
}).AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
microsoftOptions.CallbackPath = "/externallogincallback";
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Following are the details of HomeController.cs (As I am not using Identity so I need to define redirect url specifically.)
//Action to issue a challange to google login
public IActionResult LogInMicrosoft(string provider)
{
//provider = Microsot or Google or LinkedIn or Twitter or Facebook
provider = "Microsoft";
//Issue a challenge to external login middleware to trigger sign in process
//return new ChallengeResult(provider);
var authenticationProperties = new AuthenticationProperties
{
RedirectUri = Url.Action("externallogincallback")
};
return Challenge(authenticationProperties, provider);
//return new ChallengeResult(provider);
}
//Callback action to retrive signin user details
//public IActionResult externallogincallback(string returnUrl = null, string remoteError = null)
public IActionResult externallogincallback()
{
//Here we can retrieve the claims
// read external identity from the temporary cookie
//var authenticateResult = HttpContext.GetOwinContext().Authentication.AuthenticateAsync("ExternalCookie");
var result = HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
if (result.Result?.Succeeded != true)
{
throw new Exception("External authentication error");
}
// retrieve claims of the external user
var externalUser = result.Result.Principal;
if (externalUser == null)
{
throw new Exception("External authentication error");
}
// retrieve claims of the external user
var claims = externalUser.Claims.ToList();
// try to determine the unique id of the external user - the most common claim type for that are the sub claim and the NameIdentifier
// depending on the external provider, some other claim type might be used
//var userIdClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Subject);
var userIdClaim = claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);
if (userIdClaim == null)
{
throw new Exception("Unknown userid");
}
var externalUserId = userIdClaim.Value;
var externalProvider = userIdClaim.Issuer;
// use externalProvider and externalUserId to find your user, or provision a new user
return RedirectToAction("Privacy", "Home");
}
An error occurred while processing your request, что делать?
Ряд пользователей браузеров при переходе на какой-либо сайт (наиболее часто данная проблема встречается на сайте Steam) могут столкнуться с ошибкой и соответствующим сообщением «An error occurred while processing your request». Обновление страницы проблемного сайта обычно ничего не даёт, пользователь сталкивается с упомянутой проблемой вновь и вновь. В этом материале я расскажу, что это за сообщение, при каких условиях появляется данная проблема, и как исправить её на вашем ПК.
Что такое An error occurred while processing your request
В переводе с английского языка текст данной ошибки звучит как «Произошла ошибка во время обработки вашего запроса». Как уже упоминалось выше, наиболее часто на возникновение данной ошибки жалуются пользователи Steam, которые при переходе на данный сайт встречают описанную дисфункцию.
При этом данная ошибка может встречаться и на других ресурсах, и в абсолютном большинстве случаев имеет браузерную основу (пользователи различных онлайн-программ практически с ней не сталкиваются).
Причины данной ошибки следующие:
- Сбой или перегрузка сервера, обрабатывающего ваш запрос;
- Случайный сбой вашего ПК;
- Кэш вашего браузера повреждён;
- Ошибка SSL-сертификата вашего браузера;
- Проблемы с HTTPS-протоколом у ряда сайтов;
- Проблема с HTTPS-расширениями вашего браузера (например, с «HTTPS Everywhere»).
После определения причин дисфункции перейдём к описанию того, как избавиться от ошибки Sorry, an error occurred while processing your request.
Как исправить ошибку An error occurred
Итак, вы встретились с упомянутой проблемой и думаете, как её устранить. Рекомендую выполнить следующий ряд действий:
- Попробуйте просто перезагрузить свой компьютер. Это помогает чаще, чем может показаться;
- Немного подождите. Во многих случаях (особенно это касается пользователей Steam) сервера бывают перегружены или «упали», потому необходимо некоторое время для решения проблемы администрацией сервера. В подобных случаях нужно немного подождать (часто хватает и суток) чтобы проблема была решена;
- Очистите кэш и куки вашего браузера. К примеру, в браузере Мозилла это делается переходом в «Настройки», затем в закладку «Приватность», и кликом на «Удалить вашу недавнюю историю». В открывшимся окне «Удаление истории» в «Подробности» поставьте галочку на «Кэш» и удалите последний;
Заключение
В данном материале мной была рассмотрена тема «An error occurred while processing your request, что делать», обозначены причины данной проблемы и намечены пути её решения. В большинстве случаев данная ошибка возникает из-за перегрузки или «падения» серверов, и от пользователя требуется немного подождать, дабы всё пришло в норму. В иных же случаях попробуйте выполнить очистку кэша вашего браузера, так как именно этот совет оказался весьма эффективным в решении данной проблемы на пользовательских ПК.
Источник
Что означает ошибка сервера 503 и как ее исправить
Как и любая проблема с доступом к интернет-ресурсам, ошибка 503 Service Unavailable («Сервис недоступен») может быть вызвана сбоями как на стороне пользователя, так и на стороне сервера, на котором находится сайт. Поэтому первое, что нужно сделать, если вы столкнулись с таким сообщением при посещении веб-ресурса, попробовать устранить сбой своими силами. Это намного проще и быстрее, чем пытаться донести информацию о возникших сложностях до владельца сайта.
Процедура устранения проблемы со стороны администратора веб-ресурса более сложная, но в большинстве случаев именно неправильные настройки на уровне хостинга или настроек сайта в панели управления CMS приводят к появлению ошибки сервера с кодом 503.
Мощный хостинг в подарок при заказе лицензии 1С-Битрикс
Выбирайте надежную CMS с регулярными обновлениями системы и профессиональной поддержкой. А мы подарим вам год мощного хостинга – специально для сайтов на 1С-Битрикс.
Устранение ошибки 503 пользователем
Возникает резонный вопрос: почему бы просто не покинуть проблемный сайт, пусть сами разбираются со своими багами? Это решение очевидное, но не совсем верное. Во-первых, вам может быть очень необходимо посетить именно этот веб-ресурс. Во-вторых, появление сигнала об ошибке доступа может говорить о том, что с вашим браузером, программным обеспечением, компьютером или другими устройствами что-то не в порядке. И тогда это уже ваша проблема, которая может повторяться систематически и при посещении других сайтов. Рассмотрим, что можно сделать самому, чтобы исправить ошибку 503, двигаясь от простого к сложному.
- Обновите вкладку браузера. Это покажется странным, но зачастую такое простое действие приводит к положительному результату. Нажмите клавишу F5 или воспользуйтесь специальной кнопкой в меню браузера.
- Закройте и откройте браузер. Таким образом вы произведете сброс текущей сессии соединения и обновите его. При новом подключении скрипт браузера может не обнаружить ошибку 503, если она была воспринята им ошибочно.
- Стоит убедиться, что сбой не связан именно с вашим компьютером. Это особенно актуально, если ошибки соединения с веб-ресурсами повторяются регулярно и возникают с разными кодировками на других сайтах. Для этого необходимо посетить проблемную страницу с другого устройства и желательно через новое интернет-соединение.
- Зайдите на страницу, выдавшую ошибку 503, используя другой браузер. Вполне вероятно, что дефект возникает из-за некорректных настроек текущего. Если это подтвердится, стоит в них покопаться и найти источник возникновения проблемы. Самое простое, это восстановить настройки по умолчанию.
- Перезагрузка компьютера. Как и любой программный сбой на уровне операционной системы или другого программного обеспечения, он может быть исправлен автоматически при новой загрузке системы.
- Очистка кэша и удаление файлов cookies. В зависимости от настроек конкретного браузера в них может сохраняться много «лишней» информации при обмене web-данными. Операция довольно несложная, но стоит предварительно посмотреть help по данному вопросу, т.к. в каждом браузере она проводится по-разному.
- Перезагрузка сетевого оборудования. Часто сложности при соединении с интернет-ресурсами возникают из-за некорректного поведения ПО на внешних устройствах, через которые вы получаете трафик. Это может быть роутер, раздающий интернет как по кабелю, так и через Wi-Fi. Необходимо отключить соответствующую железку по питанию, т.е. полностью обесточить ее примерно на одну минуту. Если провайдер выдает вам динамический ip-адрес, то произойдет его смена, что тоже может привести к устранению появления ошибки 503.
- Смена DNS-адреса на сервере. Это решение является наиболее сложным для обычного пользователя. В большинстве интернет-соединений используется общедоступный DNS-адрес Google. Изменить его можно через «Панель управления компьютера» в «Центре управления сетями и общим доступом». Данные манипуляции довольно критичны для устойчивой работы интернета на вашем компьютере. Поэтому производить их стоит только тогда, когда вы абсолютно уверены в своей IT-подготовке.
Если ни один из вышеприведенных способов не помог, а достучаться до сайта ну очень нужно, пишите о проблеме в техподдержку данного ресурса, приложив скриншот страницы с кодом и описанием ошибки.
Ошибка 503 может отображаться в разных форматах с дополнительными информативными сообщениями. Появление страницы «503 Service Temporary Unavailable – Сервис временно недоступен» говорит о том, что проблема носит временный характер. В этом случае пользователю рекомендуется не предпринимать никаких действий и просто дождаться, когда доступ восстановится автоматически.
Решение проблем с ошибкой 503 администратором веб-ресурса
При возникновении ошибки 503 Service Unavailable в любом ее проявлении администратор web-ресурса в первую очередь должен разобраться в причине ее появления. Игнорирование данной процедуры по принципу «само пройдет» может привести к тому, что сайт понесет глобальные потери в объеме пользовательского трафика и, как следствие, конверсии. Посетители, регулярно сталкивающиеся с проблемами доступа к определенному ресурсу, очень быстро занесут его в «игнор».
В зависимости от конкретного тарифного плана хостинга каждый сайт имеет ограничения по одновременной обработке запросов, поступающих на сервер от конечных пользователей. Более простые запросы браузеров обрабатываются практически мгновенно, сложные ожидают очереди в порядке их поступления. Количество отложенных запросов лимитировано, при превышении нормы каждый следующий отклоняется. В этом случае посетитель сайта видит на экране сообщение с кодировкой error 503.
Наиболее частые причины возникновения ошибки 503 на стороне сервера
- При получении запроса от пользователя конкретная страница сайта не может установить соединение с базой данных MySQL.
- Некорректная работа плагинов и расширений из-за внутренних ошибок или конфликта между собой.
- Использование недорого хостинга и маломощного сервера приводит к тому, что оборудование не справляется с обработкой входящего трафика.
- Ресурсоемкие скрипты создают дополнительную нагрузку на сервер.
- Задействован почтовый сервис, выполняющий автоматическую рассылку сообщений в большом объеме.
- Соединение с удаленным сервером может привести к замедлению обработки запросов.
- Передача файлов большого объема при помощи PHP-скрипта.
- Значительное количество нерабочих модулей конкретной CMS.
Как видим, решение практически всех проблем, приводящих к появлению ошибки 503, достигается использованием более мощных серверов и высокоскоростного качественного хостинга. Отрицательная сторона этого способа в его затратности. Распределение пользовательского трафика неравномерно по времени, и банальный апгрейд железа не поможет полностью исключить сбои в моменты пиковых нагрузок.
Как избежать появления ошибок 503
Для начала рекомендуется провести статистический анализ через административную панель (снять логи), чтобы понять, какие процессы создают максимальную нагрузку на сервер, и произвести определенные изменения в настройках.
Уменьшение нагрузки на базу данных можно добиться следующими способами:
- Регулярное обновление CMS, которое позволяет оптимизировать работу движка, уменьшить количество багов.
- Установка защиты от ботов и парсеров, которые часто запускаются вашими конкурентами, чтобы создать дополнительную нагрузку на ресурс и тем самым вывести его частично или полностью из строя.
- Уменьшение размера и, если это возможно, количества графических файлов на сайте, а также «тяжелых» таблиц.
- Ввод ограничений на количество одновременных участников в чате.
Оптимизация работы скриптов
- Отключите все лишние плагины и дополнения, кроме тех, которые реально необходимы для бесперебойной работы сайта (кэширование, оптимизация базы данных, создание бэкапов, сжатие изображений).
- Осуществляйте передачу файлов большого объема через FTP, т.к. использование других способов передачи данных приводит к созданию отдельного процесса.
- Осуществляйте массовую почтовую рассылку в моменты отсутствия пиковой нагрузки на сайт, например, ночью или ранним утром.
- При использовании удаленного сервера минимизируйте время ответа и оптимизируйте канал соединения.
- Проверьте наличие проблемных запросов к базе MySQL в файле mysql-slow.log.
Дополнительную нагрузку на сервер, приводящую к появлению ошибки 503, могут создать DDoS-атаки. Защита от них с помощью фильтрации относится к отдельной теме обсуждения.
Следует отметить, что ошибка 503, вызванная перегрузкой серверных мощностей, может пройти сама собой, без внешнего вмешательства. Чтобы понять, произошло ли исправление ситуации, достаточно периодически перезагружать сайт.
Заключение
Ошибка 503 Service Unavailable может возникнуть на любом сайте, управляемом одной из наиболее популярных CMS – WordPress (Вордпресс), Joomla (Джумла), DLE (ДЛЕ) и любой другой, использующей базы данных MySQL. Способов ее решения много, начиная от самых простых на уровне пользователя и заканчивая довольно сложными процедурами, которые должен выполнить администратор сайта.
Буду благодарен, если вы нашли нестандартный подход к устранению сбоя с кодировкой 503 и готовы поделиться своим опытом в комментариях!
Источник
.Net Core Identity 2 Provider login Отмена приводит к необработанному исключению
Я добавил LinkedIn в качестве провайдера. Я без проблем ввел логин и зарегистрировался в LinkedIn. В случае использования, когда пользователь CANCELS изнутри страниц провайдера (либо при входе в систему, либо отменяет авторизацию приложения), промежуточное ПО для идентификации, по-видимому, генерирует необработанное исключение:
An unhandled exception occurred while processing the request.
Exception: user_cancelled_login;Description=The user cancelled LinkedIn login
Unknown location
Exception: An error was encountered while handling the remote login.
System.Exception: user_cancelled_login;Description=The user cancelled LinkedIn login
Exception: An error was encountered while handling the remote login.
Настройка провайдера при запуске определяет обратный вызов:
И, как я уже сказал, промежуточное ПО, похоже, обрабатывает ВСЕ другие случаи, кроме случаев, когда пользователь отменяет на страницах LinkedIn. URL-адрес возврата из LinkedIn выглядит правильно:
Но никогда не попадает в мой метод контроллера ExternalCallback, где обрабатываются другие случаи, такие как успешный вход в систему / авторизация ??
Мне интересно, работает ли это для кого-нибудь еще с поставщиками сторонних поставщиков?
Есть Проблема с Github, который более подробно объясняет, что здесь происходит, с небольшой информацией о том, что происходит Зачем, и даже с указанием того, что это не будет «исправлено»:
Handling the RemoteFailure event is the right thing to do. We should update our docs/samples to show how to handle that event and at least show a more appropriate message to the user. The error page sample could include a link to enabled the user to try logging in again.
Unfortunately it’s difficult to implement this event in a very generic way that’s also super useful because each remote auth provider has its own behavior for different types of failures.
Обходной путь для этого (как указано выше) — обработать событие RemoteFailure:
ctx — это экземпляр RemoteFailureContext, который включает свойство Exception , описывающее, что пошло не так. ctx также содержит свойство HttpContext , позволяющее выполнять перенаправления и т. д. В ответ на такие исключения.
Я обнаружил, что для меня хорошо работает следующее, основанное на это и подобное ответу Кирка Ларкина. Часть, которая потребовала небольшого выяснения, заключалась в том, куда перенаправить, не создавая проблем для последующих попыток входа в систему.
Источник
Comments
huangyingting
added a commit
to huangyingting/eShopOnContainers
that referenced
this issue
Nov 10, 2020
Fix samesite issue when running eShop from docker-compose locally as by default http protocol is being used Refer to dotnet-architecture#1391
sughosneo
pushed a commit
that referenced
this issue
Dec 8, 2020
Fix samesite issue when running eShop from docker-compose locally as by default http protocol is being used Refer to #1391
nishanil
added a commit
that referenced
this issue
Jan 20, 2021
* Fix functional tests of Marketing * remove mvc routing spa * move background task * restore background config * background * Add health check in Ordering.BackgroundTask project * add package version to dependencies.props * ordering.api error integrationevents * remove not needed code * Fix authentication in Ordering.SignalR * Create ReadMe.md * partial checkin trying to fix checkout process * add grpc basket * first approach * restore options and grpc calling from console app it's working * Partial checkin * fix grpc call from mobile bff to basket.api and add ordering, in ordering controller * migrate web bff to 3.0 and apply grcp in order controller * Add proto to catalog * Moved some files to ./src/ * Moved .env to src * partial checkin * web bff endpoint /api/v1/Basket working in grpc * refactoring the grpc client * refactored the grpc client * Update Dockerfiles for use /src as build context root * refactor mobile bff * Deleted unneeded Dockerfile * update dockerfiles * Fix mvc calls to grpc * temporal fix to get the order in local dbset of orders for UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler.cs * add using * fix checkout process of mvc app * Migrate packages in preview7 to preview8 * fix identity server * standarize the productId type * format * Add missing key in appsettings * fix version problems with identity server * Add layers in docker for npm install * fix problems with spa adding items to basket * add polly for grpc calls * Fix identity server * fix tests of basket * fix unit test of basket * fix ordering tests * updated compose and 1st envoy config * updated config files * update to helm charts for grpc config * fixed ending 0 in values.yaml for catalog * Final charts tunning and allowing Linkerd Mesh to be used * update to net3 rc1 * Configuration of envoy routes and minor code fixes * missing word in comment :p * updated charts for local k8s deployment * Fixing some generic issues * Added web shoping agg to mesh * ApiGW added to mesh. Ingress updated for Linkerd * Final adjustments to make envoy work with ingress and remove Polly from http calls * Removing unneeded files. Making compatible FailingMiddleware & Healthchecks * Changes in compose config for docker-compose up running ok. Added volumes for data * Update dockerfile.develop to net3 * Readme updated to net3 * fixed path in azure devops build * Sort package references * Aling basket-data-test entry with base .yml * Remove unnecessary commands from dockerfiles * Add back logging traces referenced in the wiki * Remove string interpolation from logging * Change obsolete .ForSqlServerUseSequenceHiLo for .UseHiLo * Remove obsolete warning configuration * Replace obsolete IHostingEnvironment for IWebHostEnvironment * Remove obsolete references * Sort dependencies.props * Removed obsolete folders * Fix webstatus configuration for docker-compose * Update README.md * MVC working with SignalR without Envoy * Remove SignalR transport parameter on clients * Remove unsupported ServiceFabric folder * Remove obsolete folders * Reorganize project folders * Improve docker build cache usage * Add IdentityUrlExternal config in appsettings * Fix tests compilation errors * Run unit and integration tests from VS * Add required configuration * Fix to close issue #1162 * Add configuration value for running in Mac * Relocate/remove folders * Remove old test docs already in wiki * Move more obsolete files * Move auxiliary solution files to "to-fix" folder * Remove obsolete files/folders * Relocate mobile solutions, remove obsolete ones. * Rename script to create aks resource * Add comment to Create-DockerfileSolutionRestore.ps1 script * Remove deleted folder from .gitignore * Remove obsolete files * Make installation work in local kubernetes * Update README * Move/remove obsolete folders * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Streamline README, add links to Wiki * Minor README updates * Bold release notes * Fix SignalR + MVC through Envoy * Change dockerhub microsoft images to mcr * Fix services test containers * Fix SignalR + SPA through Envoy * Fix paths for moved folders * Comment out windows jobs * Fix healthchecks configuration values * Configure Envoy to forward SignalR notifications * Unify dashboard setup yaml * Simplify ingress setup files * Explore adding CSP * Update to 3.1 - Fix test to work on Catalog.API controller, using in-memory database * Don't force LongPolling for SignalR * Update base images to 3.1 * Upgrade Locations to 3.1 * Relocate network-related scripts * tls support * Update packages * Add missing await * Update to IHost - Return IHost from CreateHostBuilder - Register AutoFac with UseServiceProviderFactory() in CreateHostBuilder * Add back looging to Seq and Logstash * Fix services names in azure-pipelines * Update README.md * fixed #1181 * Fix npm & docker build warnings #1224 Update Angular 7 to 8 to fix warnings and vulnerabilities * Diferentiate displayNames * Add project-directory param for compose * Add -f parameter * Add cache use comment to Dockerfiles to force PR validation * minor change to requeue DevOps validation * User internal docker dns names * Update README.md * Error fixed, applied the cookie policy to lax mode * disable windows containers in buildimages and multiarch yaml (#1287) * disable windows containers in buildimages and multiarch yaml * fix space * disabled delopy in windows and prefixes * Change extension method to load the configuration * fix authorization in webhooks api * Remove obsolete middleware UseApplicationInsights * Fix/include pipeline yml in trigger (#1290) * add trigger to include pipelines * Update build/azure-devops/webhooks-client/azure-pipelines.yml Co-Authored-By: Miguel Veloso <mvelosop@gmail.com> Co-authored-by: Miguel Veloso <mvelosop@gmail.com> * Executed npm audit fix and npm update * Executed npm audit fix * correct call order of "app.UseCors" * Updated readme with new book cover icon * Bump npm-registry-fetch from 4.0.2 to 4.0.5 in /src/Web/WebSPA (#1361) Bumps [npm-registry-fetch](https://github.com/npm/registry-fetch) from 4.0.2 to 4.0.5. - [Release notes](https://github.com/npm/registry-fetch/releases) - [Changelog](https://github.com/npm/npm-registry-fetch/blob/latest/CHANGELOG.md) - [Commits](https://github.com/npm/registry-fetch/commits) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump lodash from 4.17.15 to 4.17.19 in /src/Web/WebSPA (#1365) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.15...4.17.19) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump jquery from 3.4.1 to 3.5.0 in /src/Web/WebSPA (#1313) Bumps [jquery](https://github.com/jquery/jquery) from 3.4.1 to 3.5.0. - [Release notes](https://github.com/jquery/jquery/releases) - [Commits](jquery/jquery@3.4.1...3.5.0) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump websocket-extensions from 0.1.3 to 0.1.4 in /src/Web/WebSPA (#1336) Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. - [Release notes](https://github.com/faye/websocket-extensions-node/releases) - [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md) - [Commits](faye/websocket-extensions-node@0.1.3...0.1.4) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Updated readme.md with mslearn link * Moved mslearn section on top * Fixed typo in README (#1375) * Shifting MS learn section on top. * Fix/1370 - Updated script related changes for helm 3.x and k8s 1.16.x (#1378) * Fix for helm 3 and k8s 1.16 * Inclusion of archived directory under k8s * separate deploy-all powershell script for local Mac OS deployment. * Bump elliptic from 6.4.1 to 6.5.3 in /src/Web/WebSPA (#1381) Bumps [elliptic](https://github.com/indutny/elliptic) from 6.4.1 to 6.5.3. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](indutny/elliptic@v6.4.1...v6.5.3) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Swamy/remove unused using and refactoring entity classes (#1371) * Removed Unused Usings * Code Refactoring for readbility. Added spaces and moved the classes to separate file * Removed unused usings from ModelDTOs (#1373) * Updated dot-prop version to 5.1.1 (#1382) * Update README.md * Update README.md * Updated Readme. * Fixed firewall rules check and improved the script the check shall be like ~ Get-NetFirewallRule -DisplayName eShopOnContainers-* -ErrorAction Stop * Updated serialize-javascript version to 3.1.0 (#1396) * Update "minimist" version to 1.2.5 (#1398) * #1397: Replaced deprecated docker.for.win.localhost by host.docker.internal in src/.env (#1400) * Updated Readme (#1402) Fixed sentence structure in Readme. Changed "and a several" to "with several." * CatalogService: Fix issue with Status set when items list is empty (#1304) * Fix issue with Status set when items list is empty * Change method Count() call to Count property Co-authored-by: Dmytro Hridin <v-dmytro.hridin@lionbridge.com> * refactored Equals() method on ValueObject (#1316) * Fix/1403and1404 removed duplicate Key SubscriptionClientName and added app.UseAuthorization() call (#1406) * #1403 removed duplicate Key SubscriptionClientName Removed duplicate key SubscriptionClientName from Tests/Services/Application.FunctionalTests/Services/Marketing/appsettings.json and sorted its content in asc order. * #1404 Added app.UseAuthorization() call Added app.UseAuthorization() call to BasketTestsStartup, LocationsTestsStartup, and MarketingTestsStartup to fix failed unit tests IntegrationEventsScenarios.Post_update_product_price_and_catalog_and_basket_list_modified and MarketingScenarios.Set_new_user_location_and_get_location_campaign_by_user_id (see #1404) * Fix for Campaigns exception and SignalR 401 Unauthorized (#1374) * update API Gateway - /locations-api/ @ webmarketing/envoy.yaml * updated signalr services - envoy: webmarketingapigw - latest client: webmvc - service hub: ordering-signalrhub Co-authored-by: hfz-r <hafiz.roslan@hartalega.com.my> * Mis-Spelled 'client' (#1411) * fix parameter error in multiarch job (#1413) * Private readonly string changed to private const string (#1288) * fix disposing of direct instantiated objects in calalog service #1392 (#1395) * Updated version of different packages. (#1420) * for issue #1423: changed literal string "OpenIdConnect" to constant string (#1424) Co-authored-by: Jeremiah Flaga <j.flaga@arcanys.com> * Updated node-fetch package version. (#1426) * Updated node-fetch package version. * Updated node-forge version. * Fixes #1474: webspa container does not build when running docker-compose up.Updated sha hashes in packages-lock.json (#1475) * Change ReadAllBytes to ReadAllBytesAsync in PicController (#1425) * Fixed parameter bug create resource script (#1494) * Fixed invalid number format in webspa (#1496) * Updated package version of webpack-subresource-integrity (#1497) * Fixed #1495 bug : UseLoadTest missing claimsType (#1508) * Update ByPassAuthMiddleware.cs * Update ByPassAuthMiddleware.cs * remove WebMVC/ByPassAuthMiddleware duplicate cliam * remove Ordering.API/ByPassAuthMid duplicate cliam * remove Location.API/ByPassAuthMid duplicate cliam * remove Market.API/ByPassAuthMid duplicate cliam * change webmvc bypassauth: claimType of sub * change ordering bypassauth: claimType of sub * change location bypassauth: claimType of sub * change market bypassauth: claimType of sub * Update solution items (#1515) Co-authored-by: Manuel Cañete <mcanete@protonmail.com> * Updated solution file. (#1514) * Fixed #1518 bug (#1520) * Update CatalogContextModelSnapshot.cs * Update CatalogContextSeed.cs * Modify CSV data * Give PictureFileName assignment * Fix PurchaseUrl port in WebSPA appsettings.json (#1525) * Updated highlight version to latest. (#1531) * Finished sentence and fixed spelling mistake. (#1536) * Updated credit card default exipiration value. (#1535) * Fix login issue Exception: Correlation failed (#1516) Fix samesite issue when running eShop from docker-compose locally as by default http protocol is being used Refer to #1391 * Updated getting started section in readme file. (#1538) * Updated get started section in readme file. * Updated docker-compose specific link * Updated instructions in the readme file. * Updated packages to latest version. (#1539) * Update README.md * fix(#1261): remove helm chart indent for config map glob (#1533) * Updated ini package in package-lock.json file. (#1541) * Removed unnecessary await (#1546) * 1. remove unused using, 2. Reorganized the using, 3. Moved the class into separate file and 4. Added line and spacing formats (#1532) * Removed Unused Using and Reorganized the Using * Removed unused using, Reorganized using, moved the class to separate file, removed commented code in Catalog.API * Revert "Removed unused using, Reorganized using, moved the class to separate file, removed commented code in Catalog.API" This reverts commit 34241c4. * Removed unused using and reorganized the using inside "Services" folder * Removed Unused using and reoganized the using * Refactor Webhooks.API * Removed unused using and reorganized using inside Catalog.API * Swamy/remove unused using and refactor the code (#1552) * Removed Unused Using and Reorganized the Using * Removed unused using, Reorganized using, moved the class to separate file, removed commented code in Catalog.API * Revert "Removed unused using, Reorganized using, moved the class to separate file, removed commented code in Catalog.API" This reverts commit 34241c4. * Removed unused using and reorganized the using inside "Services" folder * Removed Unused using and reoganized the using * Refactor Webhooks.API * Removed unused using and reorganized using inside Catalog.API * Refactoring * Removed unsed using * Added line break just to differentiate between the messages * Swamy/remove unused using and refactor the code (#1555) * Removed Unused Using and Reorganized the Using * Removed unused using, Reorganized using, moved the class to separate file, removed commented code in Catalog.API * Revert "Removed unused using, Reorganized using, moved the class to separate file, removed commented code in Catalog.API" This reverts commit 34241c4. * Removed unused using and reorganized the using inside "Services" folder * Removed Unused using and reoganized the using * Refactor Webhooks.API * Removed unused using and reorganized using inside Catalog.API * Refactoring * Removed unsed using * Added line break just to differentiate between the messages * Removed unused usings * Simple Refactoring * Fixed Issue #1410 (#1560) Added IdentityUrlExternal to srcServicesOrderingOrdering.FunctionalTestsappsettings.json; sorted the properties * Small Refactoring (#1558) * Small-Formatting-Refactoring (#1564) * Swamy/01jan2021-small-refactoring (#1570) * Update Startup.cs * Removed commented code * Update UrlsConfig.cs * Small Refactoring * Removed Commented Code * Small Refactoring * Removes dotnet.myget.org NuGetPackage feed references (#1576) * Removed Nuget package feed * Removed unused System.ValueTuple package * Downloadgraded Microsoft.AspNetCore.Hosting.Abstractions package * Removed unused package * Downgraded System.IO.Compression.ZipFile package * Used Microsoft.AspNetCore.DataProtection.StackExchangeRedis package * Swamy/04 jan2021-small-refactoring (#1571) * Small Refactoring inside IntegrationEventLogEF * Small Refactoring inside BuildingBlocks folder * Fixes #1581: Fixed total decimal place issue and User hover menu display/usability issue. (#1582) * Swamy/15jan2021 small refactoring (#1580) * Small Refactoring inside Basket Service folder * Small Refactoring * Incorrect ContentPage.ToolbarItems in a TabbedPage (#1348) Incorrect ContentPage.ToolbarItems in a TabbedPage Co-authored-by: Erik Pique <epique@plainconcepts.com> Co-authored-by: ericuss <etorre@gmail.com> Co-authored-by: eiximenis <etomas@gmail.com> Co-authored-by: Miguel Veloso <mvelosop@gmail.com> Co-authored-by: Miguel Veloso <mveloso@plainconcepts.com> Co-authored-by: ericuss <etorreg@gmail.com> Co-authored-by: Christian Morgenthaler <c.morgenthaler@outlook.de> Co-authored-by: Sumit Ghosh <13281246+sughosneo@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sander Holvoet <holvoetsander@hotmail.com> Co-authored-by: Sumit Ghosh <sumit.ghosh@neudesic.com> Co-authored-by: Viswanatha Swamy <vishipayyallore@yahoo.com> Co-authored-by: Mark Harwood <47503138+markharwood101@users.noreply.github.com> Co-authored-by: edmondshtogu <edmondshtogu@gmail.com> Co-authored-by: InstanceFactory <InstanceFactory@users.noreply.github.com> Co-authored-by: Yosef Herskovitz <34112131+H3RSKO@users.noreply.github.com> Co-authored-by: Dmytro Hridin <dmytro.hridin@gmail.com> Co-authored-by: Dmytro Hridin <v-dmytro.hridin@lionbridge.com> Co-authored-by: André Silva <andrefilipegsilva@outlook.com> Co-authored-by: hfz-r <39443205+hfz-r@users.noreply.github.com> Co-authored-by: hfz-r <hafiz.roslan@hartalega.com.my> Co-authored-by: Majid Ali Khan Quaid <contactmakq@gmail.com> Co-authored-by: Javier Vela <fjvela@gmail.com> Co-authored-by: Facundo La Rocca <facundo_larocca@yahoo.com.ar> Co-authored-by: Nabil Sedoud <nsedoud@gmail.com> Co-authored-by: jeremiahflaga <flaga.jeremiah@gmail.com> Co-authored-by: Jeremiah Flaga <j.flaga@arcanys.com> Co-authored-by: Wojciech Rak <wojciechrak@users.noreply.github.com> Co-authored-by: Zakaria <23211915+zakaria-c@users.noreply.github.com> Co-authored-by: ansonzhang <3143422472@qq.com> Co-authored-by: m-knet <10815022+m-knet@users.noreply.github.com> Co-authored-by: Manuel Cañete <mcanete@protonmail.com> Co-authored-by: n-stefan <38526229+n-stefan@users.noreply.github.com> Co-authored-by: Gerard Gunnewijk <gerard.gunnewijk@live.nl> Co-authored-by: Yingting Huang <huangyingting@outlook.com> Co-authored-by: Mads Rosenberg <Rosenberg96@users.noreply.github.com> Co-authored-by: Gur Galler <35164039+GurGaller@users.noreply.github.com> Co-authored-by: Hetal Kapadia <31979831+hetal-kapadia@users.noreply.github.com> Co-authored-by: william-keller <kellerwilliam2011@gmail.com>
Я пытаюсь реализовать Microsoft MSAL с интерфейсом Angular и Core MVC API.
Мне удалось успешно пройти аутентификацию в приложении Angular и вызвать конечные точки Graph API. Приложение Angular использует следующий код:
app.module.ts
@NgModule({
declarations: [...],
imports: [
...
MsalModule.forRoot(
new PublicClientApplication({
auth: {
clientId: '47...',
authority: 'https://login.microsoftonline.com/6d...',
redirectUri: 'https://localhost:4200',
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false
},
}),
{
interactionType: InteractionType.Redirect,
authRequest: { scopes: ['user.read'] },
},
{
interactionType: InteractionType.Redirect,
protectedResourceMap: new Map([
['https://graph.microsoft.com/v1.0/me', ['user.read']],
['https://localhost:44333/Auth/Index', ['user.read']]
]),
},
),
RouterModule,
],
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true,
}],
bootstrap: [AppComponent, MsalRedirectComponent],
})
export class AppModule {}
Я могу успешно вызвать Graph API, используя HttpClient с настроенным MsalInterceptor.
this.http.get('https://graph.microsoft.com/v1.0/me')
.subscribe(profile => { this.profile = profile; });
Затем я пытаюсь вызвать свой собственный API с аналогичным кодом
this.http.get('https://localhost:44333/Auth/Index')
.subscribe(token => { this.token = token; });
Однако этот запрос не выполняется из-за следующей ошибки:
An unhandled exception occurred while processing the request. Exception: Correlation failed. Unknown location Exception: An error was encountered while handling the remote login. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()
Я предполагаю, что проблема где-то в моем API. Я настроил аутентификацию в моем API MVC .Net 5.0 следующим образом:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddOptions();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(new[] { "user.read" })
.AddInMemoryTokenCaches();
}
appsettings.json
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"TenantId": "6d...",
"ClientId": "47...",
"ClientSecret": "..."
},
}
AuthController.cs
namespace Auth.Services
{
[Route("{controller}/{action}")]
[Authorize]
public class AuthController : Controller
{
private readonly ITokenAcquisition tokenAcquisition;
public AuthController(ITokenAcquisition tokenAcquisition) => this.tokenAcquisition = tokenAcquisition;
[HttpGet]
public async Task<IActionResult> Index()
{
var scopes = new string[] { "user.read" };
var accessToken = await tokenAcquisition.GetAccessTokenForUserAsync(scopes);
//...
return Ok(...);
}
}
}
Не похоже, что приложение когда-либо достигает контроллера. Ни одна из точек останова никогда не срабатывает, и когда я исследую события, возникают два исключения:
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler: Warning: '.AspNetCore.Correlation.XXX' cookie not found.
System.Exception: An error was encountered while handling the remote login. ---> System.Exception: Correlation failed. --- End of inner exception stack trace --- at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync() at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
Часть, которая меня заинтересовала, — это исключение «cookie не найден». Я отправляю не файл cookie, а токен на предъявителя.
Я предполагаю, что в конфигурации моего API не хватает чего-то, что могло бы указать промежуточному программному обеспечению искать токен-носитель, а не файл cookie. Однако, когда я попытался настроить промежуточное ПО для использования AddJwtBearer(...)
, я обнаружил целый ряд новых ошибок. Итак, вопрос в том, что мне не хватает, чтобы получить токен аутентификации MSAL, который у меня есть из внешнего интерфейса Angular, для работы с сервером API?
Комментарий @weichch указал мне правильный путь, однако в примере используется устаревший код. Все, что мне нужно было сделать, это изменить мой файл Startup.cs, чтобы он выглядел следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddOptions();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
// Note: the middleware is Api not App... I accidentally called App, and it took
// me a minute to realize my mistake.
services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
services.AddControllers();
}
У меня также была ошибка в моем приложении Angular, которую нужно было исправить. Область действия моего API должна быть изменена на мой зарегистрированный API на портале Azure 'api://47.../access_as_user'
Перед изменением области я получал ошибку «Bearer error =» invalid_token «, error_description =» Подпись недействительна «». Итак, app.module.ts стал напоминать следующее:
@NgModule({
declarations: [...],
imports: [
...
MsalModule.forRoot(
new PublicClientApplication({
auth: {
clientId: '47...',
authority: 'https://login.microsoftonline.com/6d...',
redirectUri: 'https://localhost:4200',
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false
},
}),
{
interactionType: InteractionType.Redirect,
// !!! Changed Here !!!
authRequest: { scopes: ['user.read', 'api://47.../access_as_user'] },
},
{
interactionType: InteractionType.Redirect,
protectedResourceMap: new Map([
['https://graph.microsoft.com/v1.0/me', ['user.read']],
// !!! Changed Here !!!
['https://localhost:44333/Auth/Index', ['api://47.../access_as_user']]
]),
},
),
RouterModule,
],
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true,
}],
bootstrap: [AppComponent, MsalRedirectComponent],
})
export class AppModule {}
0
Chris Stillwell
2 Ноя 2021 в 17:42
Я перенес свое приложение на aspnetcore, и теперь у меня есть случайная проблема с токенами проверки.
1. Проблема в том, что случайным образом пользователи получают
An error was encountered while handling the remote login. Correlation
failed.
Проблема в том, что если я пойду и проверю это сам, это сработает.
Вторая проблема заключается в том, что когда пользователь получает токен подтверждения по электронной почте и щелкает ссылку из электронной почты, он получит
invalid token
Поэтому они не могут подтвердить электронную почту.
Сначала я подумал, что проблема связана с UseCookiePolicy, но я отключил его.
Startup.cs
namespace Flymark.Online.Web
{
public class Startup
{
private readonly IHostingEnvironment _env;
public Startup(IHostingEnvironment env)
{
_env = env;
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Configure SnapshotCollector from application settings
services.Configure<SnapshotCollectorConfiguration>(
Configuration.GetSection(nameof(SnapshotCollectorConfiguration)));
// Add SnapshotCollector telemetry processor.
services.AddSingleton<ITelemetryProcessorFactory>(sp => new SnapshotCollectorTelemetryProcessorFactory(sp));
services.AddApplicationInsightsTelemetryProcessor<TelemetryFilter>();
services.AddSingleton<ITelemetryInitializer, AppInsightsInitializer>();
services.AddCors();
var decompressionOptions = new RequestDecompressionOptions();
decompressionOptions.UseDefaults();
services.AddRequestDecompression(decompressionOptions);
FlymarkAppSettings.Init(Configuration, _env.EnvironmentName);
var storageUri = new Uri(Configuration.GetValue<string>("Flymark:DataProtectionStorageUrl"));
//Get a reference to a container to use for the sample code, and create it if it does not exist.
var container = new CloudBlobClient(storageUri).GetContainerReference("data-protection");
services.AddDataProtection()
.SetApplicationName("Flymark.Online")
.PersistKeysToAzureBlobStorage(container, "data-protection.xml");
services.AddDetection();
services.AddAutoMapper();
services.AddWebMarkupMin(
options =>
{
options.AllowMinificationInDevelopmentEnvironment = true;
options.AllowCompressionInDevelopmentEnvironment = true;
})
.AddHtmlMinification(o =>
{
o.ExcludedPages = new List<IUrlMatcher>
{
new WildcardUrlMatcher("/scripts/*")
};
o.MinificationSettings.AttributeQuotesRemovalMode = HtmlAttributeQuotesRemovalMode.KeepQuotes;
o.MinificationSettings.EmptyTagRenderMode = HtmlEmptyTagRenderMode.NoSlash;
o.MinificationSettings.RemoveOptionalEndTags = false;
})
.AddXmlMinification()
.AddHttpCompression();
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.Lax;
});
services
.AddScoped<UserStore<ApplicationUser, IdentityRole<int>, FlymarkContext, int, IdentityUserClaim<int>,
IdentityUserRole<int>, IdentityUserLogin<int>, IdentityUserToken<int>, IdentityRoleClaim<int>>,
ApplicationUserStore>();
services.AddScoped<UserManager<ApplicationUser>, FlymarkUserManager>();
services.AddScoped<RoleManager<IdentityRole<int>>, ApplicationRoleManager>();
services.AddScoped<SignInManager<ApplicationUser>, ApplicationSignInManager>();
services
.AddScoped<RoleStore<IdentityRole<int>, FlymarkContext, int, IdentityUserRole<int>,
IdentityRoleClaim<int>>, ApplicationRoleStore>();
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddIdentity<ApplicationUser, IdentityRole<int>>(
o =>
{
o.User.RequireUniqueEmail = true;
})
.AddUserStore<ApplicationUserStore>()
.AddUserManager<FlymarkUserManager>()
.AddRoleStore<ApplicationRoleStore>()
.AddRoleManager<ApplicationRoleManager>()
.AddSignInManager<ApplicationSignInManager>()
.AddClaimsPrincipalFactory<FlymarkClaimsPrincipalFactory>()
.AddDefaultTokenProviders();
services.AddSingleton<ILoggerFactory, LoggerFactory>(sp =>
new LoggerFactory(
sp.GetRequiredService<IEnumerable<ILoggerProvider>>(),
sp.GetRequiredService<IOptionsMonitor<LoggerFilterOptions>>()
)
);
services.Configure<ApiBehaviorOptions>(options => { options.SuppressModelStateInvalidFilter = true; });
services.AddMemoryCache();
services.AddSingleton<IEmailSender, FlymarkEmailSender>();
services.AddMvc(o =>
{
o.Conventions.Add(new FlymarkAsyncConvention());
o.AllowValidatingTopLevelNodes = false;
o.AllowEmptyInputInBodyModelBinding = true;
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddJsonOptions(opt =>
{
opt.SerializerSettings.DateFormatString = "dd/MM/yyyy";
opt.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
var resolver = opt.SerializerSettings.ContractResolver;
if (resolver == null) return;
if (resolver is DefaultContractResolver res) res.NamingStrategy = null;
});
services.Configure<IdentityOptions>(options =>
{
// Default Password settings.
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
options.Lockout.MaxFailedAccessAttempts = 20;
});
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(OAuthValidationDefaults.AuthenticationScheme,
IdentityConstants.ApplicationScheme)
.RequireAuthenticatedUser()
.Build();
});
services.AddAuthentication()
.AddExternalAuthProviders(Configuration)
.AddFlymarkOpenIdConnectServer()
.AddOAuthValidation(OAuthValidationDefaults.AuthenticationScheme);
services.Configure<SecurityStampValidatorOptions>(options =>
{
// This is the key to control how often validation takes place
options.ValidationInterval = TimeSpan.FromMinutes(15);
});
services.ConfigureApplicationCookie(config =>
{
config.LoginPath = "/Identity/Account/LogIn";
config.AccessDeniedPath = "/Identity/Account/LogIn";
config.SlidingExpiration = true;
config.Events.OnRedirectToLogin = OnRedirectToLoginAsync;
});
}
private Task OnRedirectToLoginAsync(RedirectContext<CookieAuthenticationOptions> context)
{
if (context.HttpContext.Request.Path.Value.Contains("/api"))
context.Response.StatusCode = 401;
else
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
}
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
//builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterModule(new FlymarkDalDiModule
{
Configuration = Configuration
});
builder.RegisterModule(new DbDiModule(FlymarkAppSettings.Instance.DbContextConnection,
FlymarkAppSettings.Instance.StorageConnectionString));
builder.RegisterModule<FlymarkWebDiModule>();
}
private CultureInfo CreateCulture(string key)
{
return new CultureInfo(key)
{
NumberFormat = {NumberDecimalSeparator = "."},
DateTimeFormat = {ShortDatePattern = "dd/MM/yyyy"}
};
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory, IMapper mapper)
{
#if DEBUG
mapper.ConfigurationProvider.AssertConfigurationIsValid();
#endif
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
context.Context.Response.Headers.Add("Cache-Control", "no-cache, no-store");
context.Context.Response.Headers.Add("Expires", "-1");
}
});
}
else
{
app.UseExceptionHandler("/Error/Error500");
app.UseStaticFiles();
}
app.UseCors(builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowCredentials()
.SetPreflightMaxAge(TimeSpan.FromMinutes(5))
.AllowAnyHeader();
});
app.UseRequestDecompression();
app.UseLegacyTokenContentTypeFixMiddleware();
var supportedCultures = new[]
{
CreateCulture("en"),
CreateCulture("ru"),
CreateCulture("uk")
};
app.UseFlymarkExceptionMiddleware();
app.UseCookiePolicy();
app
.UseAuthentication()
.UseDomainMiddleware()
.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
})
.UseWebMarkupMin();
app.Use(async (ctx, next) =>
{
await next();
if (ctx.Response.StatusCode == 404 && !ctx.Response.HasStarted)
{
//Re-execute the request so the user gets the error page
var originalPath = ctx.Request.Path.Value;
ctx.Items["originalPath"] = originalPath;
ctx.Request.Path = "/error/error404";
await next();
}
});
app
.UseMvc(routes =>
{
routes.MapRoute(
"areaRoute",
"{area:exists}/{controller=Dashboard}/{action=Index}/{id?}");
routes.MapRoute(
"default",
"{controller=Home}/{action=Index}/{id?}");
});
}
}
}
Я создаю URL-адрес для подтверждения по электронной почте следующим образом:
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Page("/Account/ConfirmEmail",
null,
new {userId = user.Id, code = code.ToBase64String()},
returnDomainUrl.Scheme,
returnDomainUrl.Host);
Я также подумал, что это может быть angularjs (он все еще есть на моей странице), но он не загружается в /signin-facebook, так как он обрабатывается промежуточным программным обеспечением.
Я думаю, что проблема связана с защитой данных, так как я получаю их в электронном письме для входа и подтверждения.
Я также пытался использовать токен электронной почты 64, но это не поможет, кроме того, я думаю, что URL-адрес автоматически кодируется Page.Url