Я создал мини-кластер в своей домашней лаборатории, где развернул 2 сервера Ubuntu 22.04 для Интернета ( с использованием NGINX) и балансировку нагрузки/отказоустойчивость, а также один для сервера SQL. В эмулируемой среде код запускается, и приложение работает нормально.
Я использую облачный сервис Kamatera (опять же из-за затрат), где у меня есть 4 виртуальные машины с Ubuntu 22.04, 2 для web, 1 для SQL и 1 для HaProxy.
После развертывания приложения система переходит к экрану входа в систему, пользователь вводит учетные данные, и по какой-то причине я получаю ошибку 401. в консоли браузера.
В приведенном ниже фрагменте кода находится проблема.
Код: Выделить всё
try
{
bl.UserID = User.Claims.FirstOrDefault(x => x.Type == System.Security.Claims.ClaimTypes.NameIdentifier).Value;
//other code here....
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return StatusCode(500, ex.Message);
}
Код: Выделить всё
private processRequestWithToken(token: string, req: HttpRequest, next: HttpHandler) {
if (!!token && this.isSameOriginUrl(req)) {
req = req.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
}
return next.handle(req).pipe(
tap(() => {
},
error => {
if (error instanceof HttpErrorResponse) {
if (error.status !== 401) {
return;
}
setTimeout(() =>
notify('Unauthorized or user logged out. Please login again.', 'warning', 4000),
3000);
this.router.navigate(['/authentication/login']);
}
})
);
}
private isSameOriginUrl(req: any) {
// It's an absolute url with the same origin.
if (req.url.startsWith(`${window.location.origin}/`)) {
return true;
}
// It's a protocol relative url with the same origin.
// For example: //www.example.com/api/Products
if (req.url.startsWith(`//${window.location.host}/`)) {
return true;
}
// It's a relative url like /api/Products
if (/^\/[^\/].*/.test(req.url)) {
return true;
}
// It's an absolute or protocol relative url that
// doesn't have the same origin.
return false;
}
Приложение (без изменений в коде) отлично работает в Windows с IIS и в локальной домашней лаборатории Linux. Виртуальные машины Kamatera Cloud оснащены Ubuntu Linux 22.04 и всеми доступными обновлениями.
Заранее спасибо
Я пытался принудительно пройти проверку перехватчика пробовал разные методы настройки IndetityServer в файле Startup.cs, даже сохраняя ключ в DbContext, но безуспешно. Я ожидал, что пользователь пройдет аутентификацию, но безуспешно
Подробнее здесь: https://stackoverflow.com/questions/787 ... returns-er
Мобильная версия