powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SignalR Core Jwt аутентификация
4 сообщений из 4, страница 1 из 1
SignalR Core Jwt аутентификация
    #39699165
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,никак не получается сделать рабочую аутентификацию на JWT для Signal R в ASP net Core 2.1 проекте.

Код Asp Net сервера
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
public void ConfigureServices(IServiceCollection services)
        {


 services.AddAuthentication() .AddJwtBearer(o =>
    {
        o.Events = new JwtBearerEvents()
        {
            OnMessageReceived = context =>
            {
                if (context.Request.Path.ToString().StartsWith("/broadcaster/"))
                    context.Token = context.Request.Query["access_token"];
                return Task.CompletedTask;
            },
        };
    });


            services.AddSignalR(g=>
            {
                g.EnableDetailedErrors = true;
            } );


            services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();


            services.Configure<IdentityOptions>(options =>
            {
                options.Password.RequireDigit = false;
                options.Password.RequiredLength = 5;
                options.Password.RequireLowercase = true;
                options.Password.RequireUppercase = false;
                options.Password.RequireNonAlphanumeric = false;
            });


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddTransient<IDataProvider, DataProvider>();

        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseDeveloperExceptionPage();


            app.UseSignalR(routes =>
            {
                routes.MapHub<Broadcaster>("/broadcaster");              
            });

            app.UseAuthentication();
            app.UseMvc();
        }



Код метода в контроллере, который выдает токен:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
        [Route("getJwt")]
        public async Task<IActionResult> jwtToken()
        {

            var claims = new[]
          {
                new Claim(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString("N")),
                new Claim(JwtRegisteredClaimNames.NameId,"User"),
                new Claim("UserId","user")
            };


            var credentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes("veryverySecretKey12345678923")),
            SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken
                (
                issuer: "issuer",
                audience: "audience",
                claims: claims,
                expires: DateTime.Now.AddHours(20),
                signingCredentials: credentials
                );

            return Ok(
                 new
                 {
                     token = new JwtSecurityTokenHandler().WriteToken(token)
                 }
                  );

        }



Код клиента, который подключается к хабу
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   private async Task<string> GetJwtToken(string userId)
        {
            var httpResponse = await new HttpClient().GetAsync("http://172.16.1.235:5000/api/token/getJwt");
            httpResponse.EnsureSuccessStatusCode();
            return await httpResponse.Content.ReadAsStringAsync();
        }

 private async  Task loadingInitialAsync()
     {
            var userId1 = "1234";

            Task<string> v =  GetJwtToken(userId1);

            hubconnection = new HubConnectionBuilder()
                  .WithUrl("http://172.16.1.235:5000/broadcaster",options=>
                  {
                      options.AccessTokenProvider = () => v;
                  }
                  )
                  .Build();
   await hubconnection.StartAsync();
}



Хаб "Broadcaster : Hub" декорирован атрибутом [Authorize], соответственно при попытке подключения из клиента получаю 401 ошибку авторизации. Как можно правильно настроить авторизацию? Спасибо
...
Рейтинг: 0 / 0
SignalR Core Jwt аутентификация
    #39699196
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Справка по либе от MS?
...
Рейтинг: 0 / 0
SignalR Core Jwt аутентификация
    #39699332
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
на гитхабе только рабочий код клиента.
...
Рейтинг: 0 / 0
SignalR Core Jwt аутентификация
    #39699356
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Не понял.
Я к тому что в MS справке видел раздел по либе SignalR и подраздел аутентификация.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SignalR Core Jwt аутентификация
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]