Web API 2.0 Owin авторизация с несколькими приложениями .net - PullRequest
0 голосов
/ 11 мая 2018

У меня есть два приложения .net.Оба приложения имеют API WebAPI 2.O, использующие C #.

Скажем, один - родительское приложение, другой - ребенок.Родительское приложение имеет аутентификацию Owin, и все API работают как ожидается с авторизацией.

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

Две вещи, которые я попробовал:

  1. Использование одних и тех же клавиш машины в обоих приложениях

  2. Попытка создать третьюнезависимое приложение .net, которое обеспечит аутентификацию и авторизацию для обоих приложений.

Первый не сработал.Я не уверен, как мне достичь второго.

Любая помощь будет признательна.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Сохраните сгенерированный токен аутентификации (вместе с идентификационной информацией пользователя, если необходимо) из родительского приложения в безопасном кэше Redis.

Затем вы можете получить токен из последующих запросов к авторизованным конечным точкам Родительского API и добавить его при любых вызовах к вашему дочернему API:

public class ValuesController : ApiController
{
  [Authorize]
  public IHttpActionResult Get()
  {
    var authToken = Request.Headers.Authorization;
    // send authToken with requests to child endpoints
  }
}

Затем в дочернем API вы можете аналогичным образом получить токен аутентификации и найти и проверить его по сохраненным токенам Redis.

Дополнительные очки, если вы получаете токен в промежуточном программном обеспечении.

0 голосов
/ 16 мая 2018

Итак, если я правильно понял, вам нужен способ аутентификации дочернего сервиса, основанный на аутентификации родительского сервиса, проходящей аутентификацию между сервисами.

Нам просто нужно одно и то же здесь, чтобы аутентифицировать микросервисыза нашим фронт-сервисом (родительским сервисом).

Мы использовали для этого JWT, с его помощью мы можем решить это, потому что на дочерних сервисах (в нашем случае микросервисах) они доверяют родительской аутентификации.

Службы работают следующим образом: Родительская служба или, возможно, другая служба аутентификации создает допустимый JWT для использования в Родительской службе.

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

В результате мы получаем код, подобный этому, в нашем файле Startup.cs наших дочерних служб, наша родительская служба / служба проверки подлинности осталась прежней.

public static void ConfigureAuth(IServiceCollection services)
{
    services
        .AddAuthentication(o =>
        {
            o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(o =>
        {
            o.SaveToken = true;
            o.TokenValidationParameters = new TokenValidationParameters
            {
                // Must validate the signing key
                ValidateIssuerSigningKey = true,

                // Must validate the life time
                ValidateLifetime = true,

                // The issuer may vary in a multitenant scenario,
                // that's why we not valid the issuer.
                ValidateIssuer = false,
                ValidIssuer = o.ClaimsIssuer,

                // Allowing passing a token among multiple services (audiences).
                ValidateAudience = false,
                ValidAudience = "",

                // Does not require expiration
                RequireExpirationTime = false,
                ClockSkew = TimeSpan.Zero
            };
        });
}

Если у вас все еще есть сомненияЯ рекомендую вам поискать аутентификацию между микросервисами, возможно, это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...