Существует серверное приложение Blazor, которому необходимо обращаться к основному веб-API для получения данных, выполнения действий и т. д. Я защитил это, используя поток oidc с включенной аутентификацией клиента и стандартный поток. Веб-API защищен с помощью JWTBearer.
Обе эти службы могут независимо аутентифицироваться и работать самостоятельно, но я не уверен, как заставить их общаться друг с другом. Я думал, что сделаю какой-то обмен токенами, но, похоже, у меня нет токена для обмена (по крайней мере, в моем http-контексте, у меня даже нет заголовка аутентификации).
Конфигурация аутентификации для API в файле программы следующая:
Код: Выделить всё
builder.Services.AddAuthentication()
.AddJwtBearer(o =>
{
o.RequireHttpsMetadata = false;
o.Audience = builder.Configuration["Authentication:Audience"];
o.MetadataAddress = builder.Configuration["Authentication:MetadataAddress"]!;
o.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = builder.Configuration["Authentication:ValidIssuer"]
};
});
Код: Выделить всё
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie()
.AddOpenIdConnect("oidc", options =>
{
var oidcConfig = builder.Configuration.GetSection("OpenIDConnectSettings");
options.Authority = oidcConfig["Authority"];
options.ClientId = oidcConfig["ClientId"];
options.ClientSecret = oidcConfig["ClientSecret"];
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.ResponseType = OpenIdConnectResponseType.Code;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.MapInboundClaims = false;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters.NameClaimType = JwtRegisteredClaimNames.Name;
options.TokenValidationParameters.RoleClaimType = "roles";
});
Подробнее здесь: https://stackoverflow.com/questions/798 ... server-app
Мобильная версия