Цикл перенаправления with.Net атрибут авторизации MVC с утверждениями ADFS
У меня есть проблема с настройкой ADFS с помощью моего приложения .Net MVC 5.
Я настроил свой проект в VS 2015 для использования утверждений, и он работает нормально, но у меня есть проблема.
Я могу войти, ussing ADFS, я могу проверить роли пользователей и т. д. Проблема возникает, когда я пытаюсь использовать
[Authorize(Roles="somenonExistingRole")]
Несмотря на то, что я уже аутентифицирован, я перенаправлен на страницу ADFS, когда аутентификация происходит снова, и я перенаправлен на свою страницу, где происходит цикл. Страница Отправить меня на портал ADFS, ADFS перенаправляет мой к порталу, и после нескольких попыток я получаю ошибку от ADFS (ко многим запросам )
Должен ли я реализовать что-то вроде поставщика ролей самостоятельно? или мне нужно настроить что-то дополнительное. Может быть, я мог бы просто ограничить количество попыток? Почему я перенаправлен в ADFS, когда у меня уже есть все роли?
В коде на самом деле мало что можно показать, ut, как и было запрошено: контроллер, который тестирует im:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult About()
{
var u = HttpContext.User;
if (u.IsInRole("/"))
{
ViewBag.Message = "User is in role.";
}
else
{
ViewBag.Message = "User is NOT in role.";
}
return View();
}
[Authorize(Roles = "/nonexistingRole")]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
И раздел configure auth
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata,
});
}
1 ответ:
Чтобы исправить проблему цикла, вы должны переопределить
AuthorizeAttribute
.По умолчанию MVC возвращает 401 Unauthorized, если роли пользователя не соответствуют требованиям
AuthorizeAttribute
. Это инициализирует запрос на повторную проверку подлинности к поставщику удостоверений. Поскольку пользователь уже вошел в систему, AD возвращается на ту же страницу, которая затем выдает еще 401, создавая цикл перенаправления. Здесь мы переопределяем метод HandleUnauthorizedRequest атрибута AuthorizeAttribute, чтобы показать что-то, что имеет смысл в контекст нашего приложения.Этот класс был создан при создании нового проекта MVC с использованием VS 2015:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (filterContext.HttpContext.Request.IsAuthenticated) { //One Strategy: //filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden); //Another Strategy: filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary( new { controller = "Error", action = "ShowError", errorMessage = "You do not have sufficient priviliges to view this page." }) ); } else { base.HandleUnauthorizedRequest(filterContext); } } }