Локальное хранилище учетных записей для веб-API в ASP.NET Core 2.0

Я использую ASP.Net Core 2.0, я хочу создать проект веб-API с типом авторизации отдельных учетных записей пользователей, но единственным вариантом является Connect to an existing user store in the cloud. Create new project screenshot

Как добавить шаблон для веб-API с отдельными учетными Store user accounts in-app с помощью учетных записей Store user accounts in-app?

Этот параметр доступен для веб-приложения, но не для веб-API.

Ответ 1

Попробуйте запустить свой проект в консоли с помощью команды

dotnet new webapi -au Individual

После этого вы можете открыть свой проект в VS. (чтобы обойти диалог). Тогда вы можете использовать, например, атрибут authorize. Но проект по-прежнему настроен на использование аутентификации на основе Azure. Вы должны решить, где получить идентификацию. Вы можете взять identityserver4 или создать собственные "Пользовательские поставщики хранилища для базовой идентификации ASP.NET" (MS-Docs)

Разница с MVC WebApp: здесь у вас есть контроллер учетной записи с представлениями для регистрации регистраций и получения имени пользователя и пароля и т.д.

Ответ 2

Я был озадачен тем же, и в итоге я выбрал Web Application вместо Web API. Вероятно, логика в MS удаляет "учетные записи в приложении". С веб-API вы, вероятно, пишете SPA, а "ваш", "мнение" ("Вход", "Забыли пароль" и т.д.) Должны быть в вашем клиентском коде; а не Razor на сервере.

Обратите внимание, что если вы идете с IdentityServer 4, представления генерируются в приложении IS4; а не в приложении Business API.

Поэтому я думаю, что Microsoft пытается дать вам намек здесь...

Ответ 3

Чтобы получить ответ, я построил как версию API без аутентификации, так и версию с, затем сделал diff для сгенерированных папок (и проигнорировал один дополнительный блок кода в appsettings.json, который появляется, когда вы используете опцию cloud-auth).

Оказывается, что для активации аутентификации требуется всего несколько строк кода.

Если вы сделаете следующие изменения в версии API шаблона без аутентификации, у вас будет версия аутентификации:

В Startup.cs добавьте: using Microsoft.AspNetCore.Authentication; в разделе "использование". Также добавьте: app.UseAuthentication(); прямо перед app.UseMvc(); как показано ниже:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseAuthentication();
    app.UseMvc();
}

В Controllers\ValuesController.cs добавьте: using Microsoft.AspNetCore.Authorization; в разделе "использование". Также добавьте: [Authorize] непосредственно над [Route("api/[controller]")]

Это все, что вам нужно, чтобы добавить шаблонную аутентификацию в шаблон API vanilla. Конечно, вам нужно добавить действительный код аутентификации, но на уровне шаблона все готово.

(Примечание: в версии Auth было также допущение Microsoft о том, что вы будете использовать UserSecretsId, поэтому, если вы тоже этого хотите, просто щелкните правой кнопкой мыши на решении и выберите "Управление секретами пользователя".)