Aktualnie pracuję nad interfejsem Web API, korzystając z projektu MVC 4 web API. Obecnie jestem na etapie, w którym muszę dodać pewne zabezpieczenia do API. Znam atrybut Authorize, jednak klient wolałby inne podejście. W tym celu starałem się przesłonić atrybut Authorize w mojej własnej klasie i jako podstawowy start, po prostu mam AuthorizeCore zawsze zwracając wartość false, co powinno oznaczać, że nie jest uwierzytelniony. Jeśli dodam to do akcji w kontrolerze, akcja zawsze się zakończy i zawsze będę pobierać dane. Wierzę, że przyczyną może być niestandardowy atrybut nie jest zarejestrowany w pliku web.config, jednak nie jestem pewien, jak to zrobić, gdy nie korzystasz z uwierzytelniania formularzy.Używanie niestandardowej autoryzacji w MVC 4
Kod, którego używam do przetestowania, to nowy projekt API sieci MVC 4 z niestandardowym atrybutem pokazanym poniżej.
public class Auth : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("http://www.google.com");
}
}
I dodaje atrybut na metody GET domyślnego ValuesController jako taki
[Auth]
public IEnumerable<string> Get()
Jednak, kiedy przejść do domeny/API/wartości Ja zawsze prezentowane z danymi zamiast oczekiwane przekierowanie do google. Każda pomoc jest doceniana.
Edycja: Po rozglądać trochę więcej Znalazłem to tutaj: http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx Sugeruje to, że wybrałem źle źle klasę AuthorizeAttribute jak ja wybrał jedną z System.Web.MVC zamiast jednego z System.Web.Http . Wygląda na to, że wersja Http nie pozwala na taki sam poziom konfiguracji, jak wersja MVC, ponieważ nie pozwala mi to zastąpić AuthorizeCore. Dozwolona jest dalsza pomoc w tym zakresie.
I nie sądzę, że nie ma nic wspólnego ze złym klasie AuthorizeAttribute. Umieść punkt przerwania na "return false;" instrukcja, uruchom w trybie debugowania i sprawdź, czy trafiłeś w to oświadczenie. – Turnkey
Próbowałem tego, a punkt przerwania w ogóle nie został trafiony. Jest to zgodne z zachowaniem wymienionym w linku, że nic się nie dzieje, gdyby użyto niewłaściwego atrybutu. – bruinbrown
Tak, wygląda na to, że różnica w zachowaniu w WebApi versus MVC. – Turnkey