Начиная с шаблона веб-приложения ASP.NET 5 с использованием индивидуальных учетных записей пользователей, мне удалось получить внешнюю аутентификацию, работающую с учетными записями Microsoft. Когда пользователь нажимает кнопку Login они перенаправляются на ExternalLogin
в AccountController
как этотRedirect Login to Controller Action
<form asp-controller="Account" asp-action="ExternalLogin" method="post" asp-route-returnurl="@ViewData["ReturnUrl"]" class="nav navbar-right">
<button type="submit" class="btn btn-null nav navbar-nav navbar-right" name="provider" value="Microsoft" title="Log in"><span class="fa fa-sign-in"/> Log In</button>
</form>
, который получает их вошли в систему с помощью учетной записи Microsoft тир и все, кажется, работает хорошо. Но как мне перехватить прямые попытки доступа к привилегированным действиям [Authorize]
, чтобы пользователь перенаправлялся на ExternalLogin
? Можно ли установить действие по умолчанию в Startup.cs
?
EDIT 1 Попытка следовать рекомендациям @Yves Я создал CustomAutorizationFilter
в папке Фильтры. Он не проверяет для любых условий
public class CustomAutorizationFilter : IAuthorizationFilter
{
public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
//if (...) // Check you conditions here
//{
context.Result = new RedirectToActionResult("ExternalLogin", "Account", null);
//}
}
}
и отредактировали ConfigureServices
ниже
services.AddMvc(config =>
{
config.Filters.Add(typeof(Filters.CustomAutorizationFilter));
});
Когда я запустить приложение локально он больше не выходит на главную страницу. Он возвращает пробел http://localhost:52711/Account/ExternalLogin
Очевидно, что я не очень понимаю.
Edit 2: Вот подпись ExternalLogin
// POST: /Account/ExternalLogin
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
Это как ExternalLogin
выходит из коробки в ASP.Net 5 Web App шаблона.
Я думаю, что после редактирования может возникнуть цикл перенаправления. Попробуйте добавить 'AllowAnonymousAttribute' в ваш контроллер' ExternalLogin'. Если я не ошибаюсь, этот атрибут обходит «IAuthorizationFilter». Вы можете отладить его, чтобы посмотреть, что происходит. Я не в ПК-банкомате. Поэтому я не могу проверить это. – Yves
Я добавил подпись 'ExternalLogin' к моему вопросу. – Vague
@Yves правильно относится к циклу перенаправления. Он продолжает цикл через 'context.Result = new RedirectToActionResult (« ExternalLogin »,« Account », null);' Без всякого удара 'ExternalLogin' – Vague