Смущает ASP.NET Идентификатор ядра и IdentityServer 4 в случае реализации API для внешнего доступа

#api #asp.net-core #asp.net-identity #identityserver4

#API #asp.net-core #asp.net-identity #identityserver4

Вопрос:

У меня есть один ASP.NET Ядро 3.1.8 веб-приложение, которое использует ASP.NET Личность. Теперь я добавил некоторый вызываемый извне REST API.

Я застрял на том, как добавить аутентификацию на основе токена (?) в мой API. Кажется, что ASP.NET Identity не поддерживает аутентификацию по API. В моем старом веб-приложении .NET Framework я использовал

 app.UseOAuthBearerTokens(OAuthOptions);
  

итак, у меня была конечная точка токена, где внешний клиент мог запрашивать действительный токен.

Теперь я прочитал о том, что для аутентификации по API я должен использовать либо AD, либо AD B2C, либо IdentityServer 4. Я согласен с опцией IdentityServer 4, но что-то не ясно

  • IdentityServer полностью заменит мой ASP.NET Личность? Я все еще хочу использовать пользовательский интерфейс входа и мою существующую интерактивную логику входа и пользовательский интерфейс.
  • Я читал о подключении ASP Identity к IdentityServer 4. Так должен ли я интегрировать свой существующий идентификатор ASP с IdentityServer 4?
  • Можно ли размещать IdentityServer 4 в том же веб-приложении, где размещены пользовательский интерфейс и API?
  • Я попытался прочитать ASP.NET Исходные данные основного репозитория как 3.1.8, так и 5.0.0-rc.1, чтобы получить некоторое направление. Я бы не хотел идти в каком-то направлении, которое будет считаться неоптимальным в следующем выпуске .NET 5. Я знаю, что есть совершенно другой способ решить эту проблему: AD или AD B2C, и у меня также есть шаблон решения для этого. В качестве альтернативы я также хотел бы иметь «автономное» решение, поэтому я инвестировал в ASP Identity. Каким будет правильное будущее направление на этом пути (автономное) для реализации аутентификации внешнего API?

Ответ №1:

Для защиты самого API вы обычно используете следующее:

 services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", options =>
    {
        options.Authority = "https://localhost:5001";

        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateAudience = false
        };
    });
  

Я рекомендую, чтобы, если вы используете IdentityServer, вы должны поместить его в свой собственный сервис, потому что в противном случае действительно сложно понять, что происходит и кто что делает.

IdentityServer не имеет дела с пользователями, поэтому вам необходимо реализовать базу данных пользователей (регистрация / забытый пароль …) самостоятельно. Вы можете использовать ASP.NET Идентичность для этого.

IdentityServer полностью заменит мой ASP.NET Личность?

Я бы сказал, что это зависит от ваших потребностей, в некоторых случаях IdentityServer заменяет ASP.NET Идентичность, а в некоторых случаях и нет. Если у вас есть только одна служба для защиты, то IdentityServer, вероятно, излишен, потому что есть чему поучиться.