IdentityServer4 - вызов ВСЕХ запросов к API, а не только [Авторизация] - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть ASP.Net Core 2 API, использующий IdentityServer4.Я хотел бы оспаривать ВСЕ запросы к серверу и вызывать перенаправление входа в систему, если пользователь не прошел проверку подлинности, перезванивая на определенный URL-адрес после проверки подлинности.

По умолчанию вызывается перенаправление входа в систему только тогда, когда пользователь, не прошедший проверку подлинности, запрашиваетресурс, защищенный атрибутом [Authorize].Это не будет работать в моем случае использования.

По сути, я хочу функциональный эквивалент атрибута [Authorize] для всего приложения, а не только для конкретных контроллеров.

Какой самый простой способ сделатьэтот?Есть ли параметр, который я могу использовать при настройке служб в Startup.cs (services.AddAuthentication)?Или через пользовательское промежуточное ПО сразу после app.UseAuthentication ()?

Я попробовал следующее пользовательское промежуточное ПО, но оно говорит, что обработчик не настроен.

ConfigureServices

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = "https://localhost:4000";
                options.ApiName = "myapi";
            });

Configure

        app.UseAuthentication();

        app.Use(async (context, next) =>
        {
            if (!context.User.Identity.IsAuthenticated)
            {
               await context.ChallengeAsync(IdentityServerAuthenticationDefaults.AuthenticationScheme, new AuthenticationProperties {RedirectUri= "https://localhost:5000/" });
            }
            else { await next.Invoke(); }
        });

        app.UseMvc();

1 Ответ

0 голосов
/ 26 сентября 2018

Для настройки [Authorize] для целых контроллеров вы можете попробовать AuthorizeFilter, как показано ниже

            services.AddMvc(config => {
            var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
            config.Filters.Add(new AuthorizeFilter(policy));
                })                    
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

Для перенаправления, вы можете попробовать настроить UserInteraction.LoginUrl

            services.AddIdentityServer(opt => {
                    opt.UserInteraction.LoginUrl = "/Identity/Account/LogIn";
                })
                .AddDeveloperSigningCredential()
                .AddInMemoryPersistedGrants()
                .AddInMemoryIdentityResources(Config.GetIdentityResources())
                .AddInMemoryApiResources(Config.GetApiResources())
                .AddInMemoryClients(Config.GetClients())
                .AddAspNetIdentity<IdentityUser>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...