Я довольно новичок в Blazor и изо всех сил пытаюсь реализовать функцию входа в систему, которая предлагает два варианта входа в систему. Приложение должно принимать пользователей моей компании, которые прошли проверку подлинности с помощью AzureAD, а также внешних пользователей, которые прошли проверку подлинности с помощью ASP Core Identity. Вход через Identity уже настроен. Для этого приложение использует логи по умолчанию c. Я также могу переключиться на аутентификацию AzureAD, которая прекрасно работает, когда я устанавливаю ее в качестве единственного поставщика.
По сути, я хочу закрыть все приложение, и все пользователи должны пройти аутентификацию для использования приложения. Они должны быть перенаправлены на страницу входа, где они выбирают способ входа.
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<AppUser>(options =>
{
options.SignIn.RequireConfirmedAccount = true;
options.User.RequireUniqueEmail = true;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddRazorPages().AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeFolder("/");
}).AddMvcOptions(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}); ;
services.AddServerSideBlazor();
services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<AppUser>>();
services.AddScoped<ProjectService>();
services.AddScoped<AppUserService>();
services.AddTelerikBlazor();
services.AddFileReaderService();
services.AddTransient<IEmailSender, EmailSender>();
services.AddScoped<UrlHelper>();
services.AddAuthentication()
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
}
При использовании вышеуказанной версии Startup.cs пользователь правильно перенаправляется на / Identity /Логин аккаунта. Существует возможность входа через личность. Когда я пытаюсь
return Challenge(new AuthenticationProperties{RedirectUri = returnUrl},
AzureADDefaults.AuthenticationScheme);
, пользователь, направленный в AzureAD, может войти туда ... но затем возвращается на страницу входа, где пользователь все еще не авторизован.
Когда я изменяю Startup.cs от
services.AddAuthentication()
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
до
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
, пользователь переходит непосредственно в AzureAD, проходит проверку подлинности там, а также в приложении. Больше не будет перенаправления на страницу входа.
Кто-нибудь знает, как я могу предложить обе опции аутентификации на своей странице входа и заставить пользователя перенаправляться туда?
Спасибо