Ich versuche, einen Benachrichtigungsmechanismus in meiner Backend-App (azure Mobile App) zu erstellen. Ich konnte das Autorize-Attribut überschreiben, um den Notification Hub nur für autorisierte Benutzer zugänglich zu machen.AppServiceAuthentication mit signalR verwenden
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;
}
}
}
In der startup.cs Datei:
var authorizer = new Hubs.QueryStringBearerAuthorizeAttribute();
var module = new AuthorizeModule(authorizer, authorizer);
GlobalHost.HubPipeline.AddModule(module);
app.MapSignalR();
Von einer Konsole app (C#) Ich bin in der Lage auf die Benachrichtigung Nabe zu verbinden, indem den X-ZUMO-AUTH-Header bereitstellt. In einer Webanwendung ist es jedoch nicht möglich, die Kopfzeile festzulegen.
Gibt es eine Möglichkeit, die Abfragezeichenfolge zu verwenden, um das Authentifizierungstoken anstelle des Headers zu überprüfen?
was meinen Sie mit Web-Anwendung verwenden kann? Eine Browser-Website? – DomeTune
ja meine ich eine Webseite – Kira
Haben Sie XHR oder [holen] (https://github.com/github/fetch) – DomeTune