У нас есть проект ASP.NET Core 2 MVC, который использует IdentityServer4 для защиты своих страниц.Обычные контроллеры перенаправляют на сервер идентификации, когда не прошли проверку подлинности, что является ожидаемым поведением.То, что я пытаюсь включить, - это чтобы метод открытого контроллера вызывался неподписанным пользователем с помощью токена доступа, который предоставляется тем же сервером идентификации для вызывающей стороны.Если у пользователя есть действительный токен доступа, метод должен функционировать регулярно, если не выдает ошибку 401 или что-то в этом роде.
Проблема в том, что даже если метод вызывается с допустимым токеном доступа с использованием Authorization: Bearer
заголовок просто перенаправляется в IdentityServer.Можно ли добиться того, что я пытаюсь сделать?Нужно ли определять другую схему авторизации для этого метода или что-то в этом роде?
Вот конфигурация OIDC:
void oidcOptions(OpenIdConnectOptions options)
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = openIdSettings.StsAuthority;
options.RequireHttpsMetadata = openIdSettings.DiscoveryEndpointRequiresHttps;
options.ClientId = openIdSettings.ClientId;
options.ClientSecret = openIdSettings.ClientSecret;
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.UseTokenLifetime = true;
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
NameClaimType = ClaimTypes.Name,
RoleClaimType = ClaimTypes.Role,
};
options.Scope.Remove("profile");
foreach (string scope in openIdSettings.Scopes)
{
options.Scope.Add(scope.Trim());
}
}
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = AuthenticationConstants.SigninScheme;
})
.AddCookie(options =>
{
options.Cookie.Name = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddOpenIdConnect(AuthenticationConstants.SigninScheme, oidcOptions);