Доступ к удостоверению пользователя и утверждениям перед авторизацией с помощью политикC#

Место общения программистов C#
Ответить
Anonymous
 Доступ к удостоверению пользователя и утверждениям перед авторизацией с помощью политик

Сообщение Anonymous »

Напишите API на .NET 8.
Мой конвейер выглядит примерно так:

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

app.UseAuthentication()
....
app.UsePreAuthMiddleWares() // Have a group of middlewares required prior to authorization
app.UseAuthorization()
app.UsePostAuthMiddleWares() // Have a group of middlewares required post authorization
Поддерживаются два токена. Изначально я добавлял политику по умолчанию, например:

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

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
// Specify Options and Events
});
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();
});
А затем используйте его следующим образом:

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

[ApiController]
[Authorize]
public class BaseApiController : ControllerBase
{
}
Здесь я должен был получить context.User.Identity.IsAuthenticated как true, а также получить утверждения пользователей. Для аутентификации другого токена необходимо удалить атрибут [Authorize] для этих контроллеров, добавить IAsyncAuthorizationFilter и проверить там другой токен. Я бы не использовал здесь IsAuthenticated как true, как ожидалось, и не утверждал бы, что необходимое промежуточное программное обеспечение было пропущено для этих API.
Для простоты и для обработки всех ошибок аутентификации в один момент - через JwtBearerEvents я изменил необходимо добавить две политики для обоих токенов, например:

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

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer("Policy1", options =>
{
// Specify Options and Events
})
.AddJwtBearer("Policy2", options =>
{
// Specify Options and Events
});
services.AddAuthorization(options =>
{
   options.AddPolicy("Policy1", new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
       .RequireAuthenticatedUser()
       .Build());
   options.AddPolicy("Policy2", new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
       .RequireAuthenticatedUser()
       .Build());
});
И использовать его следующим образом:

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

[ApiController]
[Authorize(Policy = "Policy1")]
public class BaseApiController : ControllerBase
{
}
После этих изменений я перестал получать сообщение IsAuthenticated как ложное в промежуточном программном обеспечении предварительной авторизации, и утверждения стали пустыми. Они нужны заранее, так как у меня добавлен IAuthorizationPolicyProvider, и на основе утверждений пользователей я извлекаю и добавляю некоторые утверждения разрешений, которые обеспечивают успех поставщика политики.
Я что-то упустил здесь и есть ли там способ заставить пользователя утверждать, что он работает с этим кодом потенциально для обеих политик?

Подробнее здесь: https://stackoverflow.com/questions/793 ... h-policies
Ответить

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

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

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

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

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