Добавление SignalR в существующую авторизацию IdentityServer4 - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть приложение Asp.Net core 2.2 IdentityServer4 с работающей системой, поддерживающей утверждения и т. Д. Я добавляю в нее SignalR и хочу использовать заголовок [Authenitcation] и иметь доступ к тем же утверждениям, которые есть у моих контроллеров.

Я нашел пару статей об интеграции SignalR с IdentityServer4, но я не могу сказать, что совпадает с тем, что я уже делаю, и что необходимо для добавления поддержки SignalR.Нужно ли мне просто сообщить IdentityServer о конкретном маршруте SignalR для авторизации?

Вот подробная статья с обширным примером на GitHub: https://mikebridge.github.io/articles/identityserver4-signalr/ https://github.com/mikebridge/IdentityServer4SignalR

1 Ответ

0 голосов
/ 26 декабря 2018

Я закончил работу над использованием IdentityServer4 для создания токена jwtbearer и использования HybridAndClientCredentials, а утверждения пользователя были обнаружены в моем событии запуска сеанса сигнализатора.

Добавление гибридного клиента в IdentityServer4:

        new Client
        {
            ClientId = "mvc",
            ClientName = "MVC Client",
            AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

            ClientSecrets = 
            {
                new Secret("secret".Sha256())
            },

            RedirectUris = { "http://localhost:5002/signin-oidc" },
            PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

            AllowedScopes = 
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                "api1"
            },
            AllowOfflineAccess = true
        }

и затем при запуске на клиенте mvc:

 ServiceCollection.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies")
            .AddOpenIdConnect("oidc", options =>
            {
                options.SignInScheme = "Cookies";

                options.Authority = "https://localhost:5001";
                options.RequireHttpsMetadata = false;
                options.ClientSecret = "secret";
                options.ClientId = "mvc";

                options.ResponseType = "code id_token";
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;

                options.Scope.Add("offline_access");
                options.Scope.Add("api1");
                options.ClaimActions.MapJsonKey("website", "website"); 
            });

Это смоделировано по примеру: Quickstart5_HybridAndApi

В SignalR на сервере:

        [Authorize]
        public class SignalRSignalHub : Hub
        {
            public override Task OnConnectedAsync()
            {
                var context = Context.GetHttpContext();
                return base.OnConnectedAsync();
            }
        }
...