Я использую SignalR в. Net Framework (не ядро). Я пытаюсь настроить аутентификацию и авторизацию, как описано в руководстве Microsoft здесь: https://docs.microsoft.com/en-us/aspnet/signalr/overview/security/hub-authorization#custom. В настоящее время в моем приложении настроена аутентификация с проверкой имени пользователя и пароля, которая обновляет сеанс (в частности, встроенный в HttpContext.Current.Session). Этот HttpContext.Current.Session недоступен внутри класса концентратора. Хорошо, но пусто. Я хочу полагаться на атрибут авторизации клиента, как описано в связанной документации. Вот код, о котором я говорю:
public class AuthorizeClaimsAttribute : AuthorizeAttribute {
protected override bool UserAuthorized(System.Security.Principal.IPrincipal user)
{
if (user == null)
{
throw new ArgumentNullException("user");
}
var principal = user as ClaimsPrincipal;
if (principal != null)
{
Claim authenticated = principal.FindFirst(ClaimTypes.Authentication);
if (authenticated != null && authenticated.Value == "true")
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
Я не могу понять, где инициализировать пользовательский параметр IPrincipal, прежде чем он достигнет вызова метода атрибута. Внутри действия моего контроллера, которое аутентифицирует пользователя по имени пользователя и паролю, я попытался создать идентификатор и принципала и добавить его в текущий поток, как показано в следующем коде:
// Create generic identity.
GenericIdentity myIdentity = new GenericIdentity("MyIdentity");
myIdentity.Label = "testlabel";
// Create generic principal.
String[] myStringArray = { "Manager", "Teller" };
GenericPrincipal myPrincipal =
new GenericPrincipal(myIdentity, myStringArray);
// Attach the principal to the current thread.
Thread.CurrentPrincipal = myPrincipal;
Однако, пока он присоединяется в мою ветку правильно. Он не отображается в параметре настраиваемого атрибута. Куда мне нужно поместить основного пользователя, которого я создаю, чтобы он отображался там в классе хаба и в атрибуте customer?
Для записи, чтобы добавить некоторый контекст к проблеме, я единственный человек, ведущий журнал в и из этого приложения. Таким образом, не будет дублирующихся логинов, которые сбивают параметр с толку. (похоже, что значения по умолчанию для пользователя iprincipal отображаются внутри метода настраиваемого атрибута, если я не ошибаюсь). Я пытаюсь создать очень простое веб-приложение ASP. NET с функцией чата с помощью signalr.