Я внедрил пользовательский атрибут AuthorizeAttribute в своем WebAPI (обратите внимание, что это отличается от MVC AuthorizeAttribute).Как настроить System.Web.Http.AuthorizeAttribute с помощью Microsoft.Owin.Security?
Я переопределил метод OnAuthorization. В этом методе я проверяю, аутентифицирован ли пользователь. Если не аутентифицирован, я прошу пользователя войти в систему.
Часть моей пользовательской логики заключается в проверке аутентифицированных пользователей, если они разрешены для продолжения (в основном я проверяю их имя/адрес электронной почты, если он существует в предопределенном списке, тогда у них есть доступ).
Проблема, которую я вижу, такова: После того, как пользователь успешно аутентифицирует, НО ОТКАЗЫ, которые будут разрешены, я вижу, что на страницу входа существует бесконечное перенаправление цикла.
Опять же, проблема для учетных данных пользователя находится в методе OnAuthorization. Что может вызывать этот бесконечный цикл и как предотвратить это, как только пользователь определил, что у него нет авторизации?
* Обновлен фрагмент кода *
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
base.OnAuthorization(actionContext); // Should this be here?
var owinContext = HttpContext.Current.GetOwinContext();
var authenticated = owinContext.Authentication.User.Identity.IsAuthenticated;
var request = System.Web.HttpContext.Current.Request;
if (!authenticated)
{
// Challenge user for crednetials
if (!request.IsAuthenticated)
{
// This is where the user is requested to login.
owinContext.Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "/" },
WsFederationAuthenticationDefaults.AuthenticationType);
}
}
else
{
// At this point the user ia authenticated.
// Now lets check if user is authorized for this application.
var isAuthorized = SecurityHelper.IsUserAuthorized();
if (isAuthorized)
{
// authorized.
return;
}
// not authorized.
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}
У меня нет явного метода входа. Вызов входа вызывает вызов из метода OnAuthorization. Пользователи могут легко войти в систему после запроса. Проблема заключается в том, что после входа в систему они затем решили не иметь авторизации/доступа. Именно в этот момент начинается цикл. – AlvinfromDiaspar
Вам нужно будет обновить свой вопрос с помощью кода из пользовательского авторизованного атрибута. –