我们如何使用跨域调用来认证signalR?

时间:2018-07-25 20:34:34

标签: api signalr jwt

我在asp.net apis项目中工作,我正在使用signalR,并且我想使用authorize属性进行身份验证。为此,我发送jwt令牌并添加此令牌 进入signalR管道。首先我呼叫Apis以获得令牌。然后我发送此令牌以获取signalR连接,但是signalR返回未经授权的响应。

The below is my code,


app.Map("/signalr", map =>
                {
                    // Setup the CORS middleware to run before SignalR.
                    // By default this will allow all origins. You can 
                    // configure the set of origins and/or http verbs by
                    // providing a cors options with a different policy.
                    map.UseCors(CorsOptions.AllowAll);

                    // SignalR Auth0 custom configuration.
                    map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
                    {
                        Provider = new OAuthBearerAuthenticationProvider()
                        {
                            OnRequestToken = context =>
                            {
                                if (context.Request.Path.Value.StartsWith("/signalr"))
                                {
                                    string bearerToken = context.Request.Query.Get("access_token");
                                    if (bearerToken != null)
                                    {
                                        string[] authorization = new string[] { "bearer " + bearerToken };
                                        context.Request.Headers.Add("Authorization", authorization);
                                    }
                                }

                                return null;
                            }
                        }
                    });


                    var hubConfiguration = new HubConfiguration
                    {
                        // You can enable JSONP by uncommenting line below.
                        // JSONP requests are insecure but some older browsers (and some
                        // versions of IE) require JSONP to work cross domain
                        // EnableJSONP = true
                    };
                    // Run the SignalR pipeline. We're not using MapSignalR
                    // since this branch already runs under the "/signalr"
                    // path.
                    map.RunSignalR(hubConfiguration);
                });
                app.UseWebApi(config);
                GlobalHost.DependencyResolver.Register(
            typeof(SignalRHUB),
            () => new SignalRHUB(new UnitOfWork(new DbFactory())));
                //GlobalHost.HubPipeline.RequireAuthentication();
                //app.MapSignalR();

0 个答案:

没有答案