2017-01-06 4 views
4

Я пытаюсь создать механизм уведомления в моем backend приложении (azure mobile app). Мне удалось переопределить атрибут Authorize, чтобы сделать центр уведомлений доступным только для авторизованных пользователей.Использование AppServiceAuthentication с signalR

public class QueryStringBearerAuthorizeAttribute : Microsoft.AspNet.SignalR.AuthorizeAttribute 
{ 
    public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request) 
    { 

     try 
     { 
      var user = (request.Environment["server.User"] as ClaimsPrincipal).FindFirst(ClaimTypes.NameIdentifier).Value; 
      if (user == null) 
       return false; 
      return true; 

     } 
     catch(Exception ex) 
     { 
      return false; 
     } 
    } 

    public override bool AuthorizeHubMethodInvocation(IHubIncomingInvokerContext hubIncomingInvokerContext, bool appliesToMethod) 
    { 
     var connectionId = hubIncomingInvokerContext.Hub.Context.ConnectionId; 
     // check the authenticated user principal from environment 
     var environment = hubIncomingInvokerContext.Hub.Context.Request.Environment; 
     var principal = environment["server.User"] as ClaimsPrincipal; 
     if (principal != null && principal.Identity != null && principal.Identity.IsAuthenticated) 
     { 
      // create a new HubCallerContext instance with the principal generated from token 
      // and replace the current context so that in hubs we can retrieve current user identity 
      hubIncomingInvokerContext.Hub.Context = new HubCallerContext(new ServerRequest(environment), connectionId); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

В файле startup.cs:

var authorizer = new Hubs.QueryStringBearerAuthorizeAttribute(); 

var module = new AuthorizeModule(authorizer, authorizer); 
GlobalHost.HubPipeline.AddModule(module); 
app.MapSignalR(); 

из консольного приложения (C#) Я могу подключиться к хабу уведомления путем предоставления заголовка X-ZUMO-AUTH. Однако из веб-приложения невозможно установить заголовок.

Есть ли способ использовать строку запроса для проверки токена аутентификации вместо заголовка?

+0

, что вы имеете в виду веб-приложения? Веб-сайт браузера? – DomeTune

+0

да я имею в виду сайт – Kira

+0

использовать XHR ли или [получать] (https://github.com/github/fetch) – DomeTune

ответ

-1

Чтобы добавить заголовок XHR можно использовать

var url = "www.example-mobile-azure-app.com"; 
var xhr = new XMLHttpRequest(); 
xhr.setRequestHeader('X-ZUMO-APPLICATION', 'Application-Key'); 
xhr.open('get', url, true); 
xhr.responseType = 'json'; 
xhr.onload = function() { 
    var status = xhr.status; 
    if (status == 200) { 
     // do what you need to do 
    } else { 
     // oh no an error occurred -.- 
    } 
}; 
xhr.send(); 
+0

это не работает, поскольку я не делаю обычный HTTP-запрос, я просто вызываю функцию подключения структуры signalR, которая по умолчанию не позволяет устанавливать заголовки запросов, спасибо вам в любом случае. – Kira

 Смежные вопросы

  • Нет связанных вопросов^_^