Пользователь в веб-приложении ASP.NET MVC вошел в систему как другой пользователь.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Пользователь в веб-приложении ASP.NET MVC вошел в систему как другой пользователь.

Сообщение Anonymous »

Я разрабатываю веб-приложение с использованием ASP.NET MVC Framework 4.7.2 и IIS Express для запуска приложения на своем локальном компьютере. Я использую веб-сервер IIS 10. Я аутентифицирую вход пользователя с помощью Keycloak через Docker. Изображение Docker: quay.io/keycloak/keycloak:18.0.1-legacy
Я использую https://github.com/mattmorg55/Owin.Security.Keycloak в качестве промежуточного программного обеспечения для аутентификации. компонент.
Проблема, с которой я столкнулся, возникает после входа в систему. Я заметил, что в некоторых случаях пользователь входит в систему как другой пользователь, хотя он предоставил правильные учетные данные для входа. Проблема возникает не так часто, поэтому я не могу предоставить воспроизводимый пример.
Все действия в контроллере имеют тег [Authorize], который после истечения времени ожидания сеанса заставляет пользователя войти на страницу входа. . Я использовал ClaimsPrincipal для декодирования токена доступа, предоставленного Keycloak, и получения необходимой информации.

Код: Выделить всё

using TestDashboard.DatabaseConnection;
using TestDashboard.IServices;
using TestDashboard.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Web;
using System.Web.Mvc;

namespace TestDashboard.Controllers.Special
{
public class MainController : Controller
{
//Called before the action method is called. Used for logging, caching, authorization
[Authorize]
protected override void OnActionExecuting(ActionExecutingContext ctx)
{
try
{
var userPrinciple = User as ClaimsPrincipal;

if (Session["userDetails"] == null)
{
//decode access token and set the required properties and store it to a 'userDetails' session
UserDetailsModel userDetailsModel = new UserDetailsModel().DecodeAccessToken(userPrinciple);

if (userDetailsModel.exceptionMessageModel.statusCode == System.Net.HttpStatusCode.Forbidden)
{
ThrowErrorPage("/Error/Forbidden");
}
else if (userDetailsModel.exceptionMessageModel.statusCode == System.Net.HttpStatusCode.InternalServerError)
{
ThrowErrorPage("/Error/InternalError");
}
else if (userDetailsModel.exceptionMessageModel.statusCode == System.Net.HttpStatusCode.BadRequest)
{
ThrowErrorPage("/Error/BadRequest");
}
else if (userDetailsModel.exceptionMessageModel.statusCode == System.Net.HttpStatusCode.NotFound)
{
ThrowErrorPage("/Error/Pagenotfound");
}

Session["userDetails"] = userDetailsModel;
}
}
catch (Exception e)
{
//log execption to elasticsearch
new ElasticsearchConnection().IndexExceptionDocument(e, GetType().Name, System.Reflection.MethodBase.GetCurrentMethod().Name);
System.Diagnostics.Debug.WriteLine(" Exception in Class Name-> " + GetType().Name + ", Method Name-> " + System.Reflection.MethodBase.GetCurrentMethod().Name + ", Error-> " + e.Message);

ThrowErrorPage("/Error/InternalError");
}
}
public ActionResult ThrowErrorPage(string pathToError)
{
return Redirect(pathToError);
}
}
}
Кто-нибудь сталкивался с такой же проблемой или чем-то подобным?


Подробнее здесь: https://stackoverflow.com/questions/792 ... erent-user
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»