使用IdentityServer承载的SignalR将不会从集线器接收任何JWTBearerEvent

时间:2019-04-30 17:07:36

标签: .net-core jwt signalr identityserver4

我们有一个api(.net核心2.2),它对所有工作正常的控制器都使用null

我们现在决定为会议服务添加SignalR Hub。 仅当我们删除授权属性IdentityServerAuthenticationDefaults.AuthenticationScheme

时,集线器才能正常工作

我们确实尝试使用以下两种方法(TokenRetriever或JwrBearerEvents)处理查询中的令牌:

[Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme)]

出于某种原因,这些问题仅在我们调用控制器时触发,而忽略从客户端调用的所有方法。

请注意,我们有一个提供令牌和API的AuthServer。 我们在客户端使用的是带有aspnet / signalr模块的angular 7。

1 个答案:

答案 0 :(得分:0)

我发现了问题...

    在配置中添加了
  1. app.UseAuthentication()
  2. 为身份验证添加默认方案,并删除onmessagereceive->

            services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
        })
        .AddIdentityServerAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme, options =>
        {
            options.Authority = AuthURL;
            options.SupportedTokens = SupportedTokens.Jwt;
            options.RequireHttpsMetadata = HttpsSetting;
            options.ApiName = APIs.API_Commerce;
            options.TokenRetriever = new Func<HttpRequest, string>(req =>
            {
                var fromHeader = TokenRetrieval.FromAuthorizationHeader();
                var fromQuery = TokenRetrieval.FromQueryString();
                return fromHeader(req) ?? fromQuery(req);
            });
        });
    

.net core 2.2仅需提及,您必须指定一个原点( withOrigins ),并且不能使用Any ..