Условно используйте промежуточное программное обеспечение только на конечных точках, которые имеют атрибуты авторизации - PullRequest
2 голосов
/ 28 июня 2019

Я написал часть промежуточного программного обеспечения, которое я хочу запускать только на конечных точках, прошедших проверку подлинности.

Итак, я хочу, чтобы в моей реализации он запускался только тогда, когда контроллер или действие помечено [Authorize].Любое действие контроллера, которое не требует авторизации, не должно требовать запуска моего промежуточного программного обеспечения.

Я обнаружил функциональность UseWhen, но лучшее, что мне удалось сделать, - это то, что промежуточное программное обеспечение запускается только после аутентификации пользователя.Однако if все равно будет срабатывать на всех конечных точках после того, как пользователь вошел в систему.

Вот мое текущее условие.

app.UseWhen(context => context.User.Identity.IsAuthenticated, appBuilder =>
{
    appBuilder.UseAutomaticallyRefreshTokenMiddleware();
});

Я думаю, что мне просто нужно изменить эту проверку контекста, но не совсемуверен, что заменить его.

Ответы [ 3 ]

2 голосов
/ 28 июня 2019

Промежуточное программное обеспечение регистрируется в конвейере в зависимости от состояния, и регистрация выполняется только при запуске. Регистрация не изменяется впоследствии. Как только они становятся частью конвейера, они становятся частью конвейера. Одна вещь, которую вы можете сделать, это настроить атрибут Authorize. Унаследуйте атрибут Authorize, а затем внутри него запустите логику, которую вы используете внутри промежуточного программного обеспечения.

0 голосов
/ 01 июля 2019

По вашему требованию вы можете попробовать IActionFilter вместо промежуточного программного обеспечения.

  1. TokenRefrehFilter

    public class TokenRefrehFilter : IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext context)
        {
        }
    
        public void OnActionExecuting(ActionExecutingContext context)
        {
            //check whether action is authorized attribute
            var isAuthorizedAction = context.Filters.Any(f => f.GetType() == typeof(AuthorizeFilter));
        }
    }
    
  2. Регистрация TokenRefrehFilter

    services.AddMvc(options => {
        options.Filters.Add(typeof(TokenRefrehFilter));
    })
    SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    

    Для этого пути TokenRefrehFilterбудет запущен по запросу контроллера, и вы можете проверить isAuthorizedAction с помощью True для действия, необходимого для обновления токена.

0 голосов
/ 29 июня 2019

ASP.NET Core 3.0 позволяет это с маршрутизацией конечной точки, это не может быть выполнено до этого, потому что решения о маршрутизации и выбор конечной точки происходят намного позже, чем при запуске конвейера промежуточного программного обеспечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...