De retour HTTP 403 aide d'Autoriser l'attribut ASP.Net de Base
Lors de l'utilisation de ASP.Net WebAPI, j'ai l'habitude d'avoir un custom Autoriser
l'attribut je voudrais l'utiliser pour renvoyer un HTTP 403
ou 401
en fonction de la situation. par exemple, si l'utilisateur n'est pas authentifié, le retour d'un 401
; si l'utilisateur est authentifié, mais n'a pas les autorisations appropriées, de retour d'un 403
. Voir ici pour plus de discussion sur que.
Il semble aujourd'hui, dans le nouveau ASP.Net de Base, ils ne voulez pas vous en substituant l' Autoriser
l'attribut plus la place à la faveur d'une politique basée sur l'approche. Cependant, il semble Core, MVC, souffre de la même "il suffit de retourner 401
pour tous auth erreurs" approche de ses prédécesseurs.
Comment puis-je remplacer le cadre pour obtenir le comportement que je veux?
- Selon @blowdart, si le MVC6 Autoriser attribut est encore de retour 401 au lieu de 403 lorsqu'un utilisateur est authentifié, mais non autorisé, il y a un bug qui devrait être déposé ou vous faites quelque chose de mal.
- J'ai supposé que c'était par la conception qu'elle était de retour 401 est, peu importe le scénario. Si ce comportement n'est pas prévu, je vais déposer un bug dans le réseau/sécurité.
- Voir le dernier commentaire ici: stackoverflow.com/a/31465227/304832
Vous devez vous connecter pour publier un commentaire.
Après l'ouverture d'un question ici, il apparaît en fait, cela devrait fonctionner...en quelque sorte.
Dans votre
Startup.Configure
, si vous appelezapp.UseMvc()
et de ne pas enregistrer n'importe quel autre middleware, vous obtiendrez401
pour tout auth erreurs liées (pas authentifié, authentifié mais pas d'autorisation).Si, toutefois, vous enregistrez l'un de l'authentification middlewares qui le prennent en charge, vous obtenez correctement
401
pour non authentifié et403
pour sans autorisations. Pour moi, j'ai utilisé leJwtBearerMiddleware
qui permet l'authentification via un JSON Web Jeton. La clé est de définir laAutomaticChallenge
option lors de la création du middleware:dans
Startup.Configure
:AutomaticAuthenticate
va définir leClaimsPrincipal
automatiquement de sorte que vous pouvez accéder àUser
dans un contrôleur.AutomaticChallenge
permet à l'auth middleware pour modifier la réponse lors de la auth les erreurs se produisent (dans ce cas, le réglage de401
ou403
de façon appropriée).Si vous avez votre propre schéma d'authentification à mettre en œuvre, vous héritez de
AuthenticationMiddleware
etAuthenticationHandler
similaire à la façon dont le JWT travaux de mise en œuvre.AuthenticationMiddleware
&AuthenticationHandler
J'ai fini par le faire avec middleware:
qui devraient être inscrits dans
Startup.Configure
avant d'appelerapp.UseMvc()
.