C# 使用授权标头信号器进行未授权访问

C# 使用授权标头信号器进行未授权访问,c#,authorization,signalr,C#,Authorization,Signalr,我正在使用signalR,并试图使[Authorize]属性正常工作。通过下面的设置,我得到了401未经授权的 在启动集线器之前,我设置了如下授权: $.signalR.ajaxDefaults.headers = { Authorization: 'Bearer ' + settingsService.getItem('authData').token } var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);

我正在使用signalR,并试图使
[Authorize]
属性正常工作。通过下面的设置,我得到了401未经授权的

在启动集线器之前,我设置了如下授权:

$.signalR.ajaxDefaults.headers = { Authorization: 'Bearer ' + settingsService.getItem('authData').token }
var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);
        identity.AddClaim(new Claim("Username", "myname"));

        var properties = new AuthenticationProperties() {
            IssuedUtc = DateTime.UtcNow,
            ExpiresUtc = DateTime.UtcNow.Add(Startup.OAuthOptions.AccessTokenExpireTimeSpan)
        };

        var ticket = new AuthenticationTicket(identity, properties);
        var accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);

        var response = new JObject(new JProperty("access_token", accessToken), new JProperty("expires_in", Startup.OAuthOptions.AccessTokenExpireTimeSpan.TotalMinutes));

        return Ok(new { token = response });
我可以看到在请求中发送了标题,如下所示:

public class Startup {
    public void Configuration(IAppBuilder app) {
        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
        GlobalHost.Configuration.DefaultMessageBufferSize = 100;
        ConfigureOAuth(app);
        app.MapSignalR();
    }

    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

    public void ConfigureOAuth(IAppBuilder app) {
        OAuthOptions = new OAuthAuthorizationServerOptions {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(7)
        };

        app.UseOAuthAuthorizationServer(OAuthOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}
授权:持票人F0wGNa7cAwUjOFI27TDR\u w7N4Ncmz66PGpsU1AH2AWt0Gdt39e2o4DGwPsBXTAlIwHrAF-YHE9I1KGLxfabE0QxpcY5mLn1gxGWStOSX\u W5NaUQlRlpRu5k-s6YLH-VJJLAKQAP\YXBZPELZJOJWCZ7EA5VHCCUFQ5DYKYK0VJXDIQMWQQZYVTNV1YLJ7IYLJ7IOZAMD-41GKWKWKWKWKWKW5W0FIJJJ8F8F8F8F8F8FW8F8FW8W

我的中心:

[Authorize]
[HubName("myHub")]
public class DataHub : Hub {
    private static bool _isInitated;

    public DataHub() {
         //Do stuff
        }
    }
}
令牌的创建方式如下:

$.signalR.ajaxDefaults.headers = { Authorization: 'Bearer ' + settingsService.getItem('authData').token }
var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);
        identity.AddClaim(new Claim("Username", "myname"));

        var properties = new AuthenticationProperties() {
            IssuedUtc = DateTime.UtcNow,
            ExpiresUtc = DateTime.UtcNow.Add(Startup.OAuthOptions.AccessTokenExpireTimeSpan)
        };

        var ticket = new AuthenticationTicket(identity, properties);
        var accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);

        var response = new JObject(new JProperty("access_token", accessToken), new JProperty("expires_in", Startup.OAuthOptions.AccessTokenExpireTimeSpan.TotalMinutes));

        return Ok(new { token = response });

我是不是错过了什么特别的东西?真的不明白。

如果这是别人的问题,我在这里得到了答案。在startup.cs中,我不得不移动
app.mapsigner()配置方法中的最后一个。如下图所示:

public class Startup {
    public void Configuration(IAppBuilder app) {
        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
        GlobalHost.Configuration.DefaultMessageBufferSize = 100;
        ConfigureOAuth(app);
        app.MapSignalR();
    }

    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

    public void ConfigureOAuth(IAppBuilder app) {
        OAuthOptions = new OAuthAuthorizationServerOptions {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(7)
        };

        app.UseOAuthAuthorizationServer(OAuthOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}

在我配置OAuth(应用程序)之前最后。。然后就没用了

谢谢!我花了几个小时试图解决这个问题。这正是我所需要的。