Есть ли способ провести внешнюю аутентификацию в Blazor без использования базы данных?

#authentication #azure-active-directory #blazor #saml-2.0 #blazor-server-side

#аутентификация #azure-active-directory #blazor #saml-2.0 #blazor-на стороне сервера

Вопрос:

Итак, по сути, у меня есть серверное приложение Blazor. Я пытаюсь добавить внешнюю аутентификацию с помощью Azure AD SAML. Я использую Sustainsys.Saml2.AspNetCore2 пакет для внешней аутентификации. Я не так хорошо знаком с различными методами аутентификации в ASP.NET или Blazor.

Я использовал серверный шаблон Blazor для контейнера docker Linux, в котором настроена аутентификация для отдельной учетной записи, и я добавил Azure AD SAML в качестве внешнего.

Вот как мой Configure Services выглядит внутри Startup.cs

 public void ConfigureServices(IServiceCollection services)
        {
            this.LoadConfigurations();
            services.AddDataProtection();
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<ApplicationDbContext>();

            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddElasticsearch(this.Configuration);
            services.AddHttpContextAccessor();
            services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
            services.AddAuthentication()
                .AddSaml2("AAD", "Azure AD", options =>
                {
                    options.SPOptions.EntityId = new EntityId("spn:"   this.Configuration["AzureAD:EnterpriseAppId"]);
                    options.SPOptions.ReturnUrl = new Uri(this.Configuration["AzureAD:ReturnUrl"]);
                    options.IdentityProviders.Add(
                        new IdentityProvider(
                            new EntityId(this.Configuration["AzureAD:AzureADId"]), options.SPOptions)
                        {
                            LoadMetadata = true,
                            MetadataLocation = this.Configuration["AzureAD:AppMetadataUrl"]
                        }
                        );
                });
        }
  

Здесь мы используем базу данных SQLServer и храним идентификаторы пользователей? Приложение использует общую страницу входа:

Вход

В моем случае использования все, что я хочу, это аутентифицировать пользователей через Azure AD. Я не хочу, чтобы они создавали и использовали локальные учетные записи, и я не хочу иметь какую-либо локальную базу данных. Я искал везде и не смог найти решение, которое не использует базу данных. Кто-нибудь может помочь мне найти правильное направление?

Комментарии:

1. Проект по умолчанию использует Identity в качестве поставщика аутентификации пользовательский интерфейс по умолчанию, в котором есть элемент входа в систему. Вы можете переопределить эти представления и удалить те части, которые вы не хотите показывать.

2. Спасибо за ваш ответ. Вы имеете в виду проект на стороне сервера Blazor по умолчанию с аутентификацией отдельных учетных записей? Я не вижу точных представлений внутри него, в частности скриншота, который я опубликовал.

3. Я нашел ответ о переопределении пользовательских интерфейсов, как вы сказали. learn.microsoft.com/en-us/aspnet/core/security/authentication/… Однако я все еще не уверен, как удалить зависимость от базы данных. Насколько я понимаю, идентификатор создается с помощью базы данных, без нее он не создается и во время выполнения.

4. Я просмотрел библиотеку Saml2 и, не вникая в нее глубоко, не могу сразу сказать, требуется ли для этого идентификация или нет. Вы можете попробовать поиграть с ` services. Добавить defaultidentity<Идентификатор пользователя> (параметры => options. Вход в систему. RequireConfirmedAccount = true) . AddEntityFrameworkStores<ApplicationDbContext>();`. В их одном примере они настроили его на использование идентификации через github.com/Sustainsys/Saml2/blob/develop/Samples /…

5. Вы выяснили, как это сделать? Я пытаюсь сделать то же самое, и в Интернете об этом не так много информации.