5

Я использую промежуточное программное обеспечение для аутентификации, которое обрабатывает запросы API для сторонней службы. Затем это промежуточное программное обеспечение устанавливает претензии, которые позже обрабатываются AuthorizationHandler в сочетании с IAuthorizationRequirement и пользовательской политикой.Пользовательский переадресация из AuthorizationHandler (ядро ASP.NET)

Промежуточное часть работы, и я в состоянии построить требования:

context.User.AddIdentity(identity); // contains claims 

Где я застрял перенаправляет к определенному URL (Есть пользовательские правила, где мы должны перенаправить) из обработчика или атрибута. Из обработчика я попробовал:

var mvcContext = context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext; 
mvcContext.Result = new RedirectToActionResult("login", "home", null); 

но его игнорируют; возвращается только 401. AuthorizeAttribute больше не имеет OnAuthorization, поэтому я не могу использовать это ...

Мысли? Спасибо.

ответ

0

Если единственное, что вы хотите, чтобы попытаться в Middleware вашего API, заключается в выполнении поведения Войти, как ваш код, кажется, объясняет эти возможные случаи, на мой взгляд, заставляющий думать:

  1. /login/home Если перенаправляет на веб-страницу:

    • Вы должны использовать HttpContext.Response.Redirect для перенаправления на веб-страницу Войти. As the documentation says, Это отправит 301 код, который может интерпретировать любой веб-браузер. HttpContext доступен в методе Invoke.
  2. /login/home Если перенаправляет на контроллер, который выполняет логику, которая проверяет идентификатор пользователя:

    • Вы можете вместо проверки идентичности вашего пользователя внутри промежуточного слоя, а не в отдельном маршруте. Just like the great Nate Barbettini does.

Возьмите также посмотреть на Nate's post и this question.

Смежные вопросы