У меня есть приложение 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();
}
Можете ли вы сказать мне, как правильно это сделать? Я нашел несколько тем по этому вопросу, но это было не совсем в моем контексте.
Спасибо