Переадресация на страницу входа, когда пользователь не прошел аутентификацию перед перенаправлением на авторитетный URL - PullRequest
0 голосов
/ 23 октября 2019

У меня есть приложение Aspnet Core, которое использует аутентификацию Azure Ad для подключения пользователей.

В будущем мне может понадобиться несколько схем аутентификации, поэтому мне бы хотелось, чтобы, когда пользователь не прошел аутентификацию, это было быперенаправляется на мою страницу входа "/ Home / SignIn" или "/ Account / SignIn", затем на странице содержится кнопка, которая отправляет запрос аутентификации.

Вот мой класс запуска:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IGraphAuthProvider, GraphAuthProvider>();
        services.AddTransient<IGraphSdkHelper, GraphSdkHelper>();

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        /*
        services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options)).AddCookie();*/

        services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
       .AddAzureAd(options => Configuration.Bind("AzureAd", options))
       .AddCookie();

        services.AddSession();

        services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
        {
            options.Authority = options.Authority + "/v2.0/";         // Microsoft identity platform

            options.TokenValidationParameters.ValidateIssuer = false;// accept several tenants (here simplified)


        });

        //services.ConfigureApplicationCookie(options => options.LoginPath = "/Home/SignIn");

        services.AddMvc(/*options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                            .RequireAuthenticatedUser()
                            .Build();
            options.Filters.Add(new AuthorizeFilter(policy));

        }*/)           
       .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
       .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
        services.AddDbContext<ApplicationDbContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddOData();


        // Create the Bot Framework Adapter with error handling enabled.
        services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();

        // Create a global hashset for our ConversationReferences
        services.AddSingleton<ConcurrentDictionary<string, ConversationReference>>();

        // Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
        services.AddTransient<IBot, ProactiveBot>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStaticFiles();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
            app.UseStatusCodePagesWithReExecute("/Error/{0}");
            app.UseHttpsRedirection();
        }
        app.UseDeveloperExceptionPage();
        //app.UseStatusCodePagesWithReExecute("/Error/{0}");
        app.UseCookiePolicy();
        app.UseSession();  

        app.UseAuthentication();
        app.UseMvc(routeBuilder =>
        {
            routeBuilder.EnableDependencyInjection();
            routeBuilder.Expand().Count().Filter().Select().OrderBy();
            routeBuilder.MapRoute("default", "{controller=Home}/{action=Index}");

        });
        //app.UseMvcWithDefaultRoute();
    }

Можете ли вы сказать мне, как правильно это сделать? Я нашел несколько тем по этому вопросу, но это было не совсем в моем контексте.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...