Итак, если я правильно понял, вам нужен способ аутентификации дочернего сервиса, основанный на аутентификации родительского сервиса, проходящей аутентификацию между сервисами.
Нам просто нужно одно и то же здесь, чтобы аутентифицировать микросервисыза нашим фронт-сервисом (родительским сервисом).
Мы использовали для этого 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
};
});
}
Если у вас все еще есть сомненияЯ рекомендую вам поискать аутентификацию между микросервисами, возможно, это может помочь.