Le attribut Authenticate est simplement un filtre de requête ServiceStack, c'est-à-dire qu'il fonctionne à la fois dans MVC et ServiceStack.
Appliquer ce filtre renverra une réponse 401 Non autorisé pour toutes les demandes autres que HTML. Par exemple, si vous appelez cela avec Ajax, vous pouvez détecter cette réponse d'erreur et rediriger côté client.
À partir de v3.9.23+ de ServiceStack, l'attribut [Authenticate]
redirigera automatiquement toutes les erreurs d'authentification vers l'URL ~/login
par défaut.
Vous pouvez remplacer cette URL lors de l'enregistrement de la fonctionnalité Auth, par exemple :
Plugins.Add(new AuthFeature(...) { HtmlRedirect = "/chemin/vers/mon/login" });
Cela s'appliquera globalement à tous les attributs [Authenticate]
ou vous pouvez le remplacer de manière ad hoc avec :
[Authenticate(HtmlRedirect="/chemin/vers/mon/login")]
Remarque : Les attributs sont héritables, vous pouvez donc ajouter ceci une fois à une classe SecuredService et toutes les sous-classes hériteront de son comportement.
Redirection manuelle
Pour rediriger manuellement une demande HTML non autorisée, vous pouvez effectuer vos propres vérifications + redirection avec :
public object Secured(Request request) {
if (!base.SessionAs().IsAuthenticated)
return new HttpResult(HttpStatusCode.Redirect, "Non autorisé") {
Headers = { {"Location", "/chemin/vers/login" } } };
}
Il existe également un wrapper DRY autour de la redirection ci-dessus que vous pouvez utiliser à la place :
public object Secured(Request request) {
if (!base.SessionAs().IsAuthenticated)
return HttpResult.Redirect("/chemin/vers/login");
}