Я думаю, что здесь что-то не хватает, потому что это не должно быть так сложно.Nancy и SignalR Аутентификация
У меня есть приложение, поддерживающее nancy IIS, которое использует аутентификацию, которая работает (устанавливает файл cookie _nca). Затем у меня есть концентратор signalR, который должен получить имя пользователя для входа в систему, чтобы я мог вытащить «Группу», к которой принадлежит пользователь.
Я думал, что просто возьму имя пользователя из Context.User.Identity.Name, но это пусто, и, как кажется, концентратор считает, что я не авторизовался. Я предполагаю, что есть что-то еще, что мне нужно сделать, чтобы сообщить signalR, как аутентифицироваться.
Я думал, что, возможно, установка HttpContext.Current.User поможет, но это, по-видимому, тоже ничего не делало.
Я сделал это следующим
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.AfterRequest.AddItemToStartOfPipeline(SetUpContext);
//pipelines.AfterRequest.AddItemToEndOfPipeline(SetUpContext);
CookieBasedSessions.Enable(pipelines);
RouteTable.Routes.MapHubs();
}
private void SetUpContext(NancyContext ctx)
{
if (ctx.CurrentUser == null)
return;
string[] Roles = { "Recipient" };
var userIdent = new UserIdent();
userIdent.IsAuthenticated = true;
userIdent.Name = ctx.CurrentUser.UserName;
GenericPrincipal principal = new GenericPrincipal(userIdent, Roles);
IPrincipal Identity = (IPrincipal)principal;
HttpContext.Current.User = Identity;
}
Я также попытался pipelines.BeforeRequest.AddItemToEndOfPipeline. Все еще не повезло.
Как SignalR 2,0 основана на Owin ваша установка будет значительно упрощен, если вы использовали Owin Нэнси, а также. Вы все еще можете использовать IIS, и это позволит вам делать такие важные вещи, как модули аутентификации share. –
Да, я пришел к такому выводу и начал переписывать свое приложение. Надеемся, что копирование, вставляющее большую часть моей работы, по-прежнему будет работать. – Josh