Получение доступа к API после входа OIDC в ​​серверное приложение BlazorC#

Место общения программистов C#
Ответить
Anonymous
 Получение доступа к API после входа OIDC в ​​серверное приложение Blazor

Сообщение Anonymous »

Я пытаюсь разобраться с аутентификацией и авторизацией в сценарии, где у меня есть несколько приложений, и я пытаюсь использовать маскировку для управления этим.
Существует серверное приложение 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"]
};
});
а сервер blazor выглядит следующим образом:

Код: Выделить всё

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";
});
Есть идеи, как мне заставить их разговаривать друг с другом? У меня есть класс прокси-сервиса, который может отправлять запросы к API, но мне нужен какой-то способ получить некоторую аутентификацию для подключения к нему из приложения аутентификации blazor, как только пользователь пройдет аутентификацию внутри него.

Подробнее здесь: https://stackoverflow.com/questions/798 ... server-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»