Dans mon MVC 5 application, je décore mes contrôleurs comme suit:Comment puis-je développer un AuthorizeAttribute personnalisé qui accepte un login OU un token?
[Authorize]
public class Controller
{
..
Cependant, une condition que j'ai est d'utiliser un jeton pour autoriser une action sans passer à l'écran de connexion. par exemple: http://{website}/Action?token={/* token for this user */}
Ainsi, Comment développer un AuthorizeAttribute personnalisé qui accepte un login (comportement par défaut) OU un jeton (comportement personnalisé, requis)?
En d'autres termes, si j'utilise http://{website}/Action
, je serais redirigés vers l'écran de connexion (si je ne suis pas autorisé), mais si je l'utilise http://{website}/Action?token={/* token for this user */}
, je serais autorisé et redirigés à ladite action.
[TokenAuthorize]
classe
public class TokenAuthorize : AuthorizeAttribute
{
private const string SecureToken = "token";
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Authorize(filterContext))
{
return;
}
HandleUnauthorizedRequest(filterContext);
}
private bool Authorize(AuthorizationContext actionContext)
{
try
{
HttpRequestBase request = actionContext.RequestContext.HttpContext.Request;
string token = request.Params[SecureToken];
return SecurityManager.IsTokenValid(token);
}
catch (Exception)
{
return false;
}
}
}
Si je décore mes contrôleurs avec:
[Authorize]
[TokenAuthorize]
public class Controller
{
..
Il est traité comme Authorize
ET TokenAuthorize
(1). Je dois développer un moyen de traiter comme Authorize
ou TokenAuthorize