В моей MVC 5 приложения я декорировать свои контроллеры следующим образом:Как я могу разработать пользовательский атрибут AuthorizeAttribute, который принимает логин или токен?
[Authorize]
public class Controller
{
..
Однако одно требование, у меня есть, чтобы использовать маркер для авторизации действия, не выходя на экран входа в систему. то есть: http://{website}/Action?token={/* token for this user */}
Таким образом, Как я могу разработать пользовательский атрибут AuthorizeAttribute, который принимает логин (поведение по умолчанию) ИЛИ токен (обычное, обязательное поведение)?
Другими словами, если я использую http://{website}/Action
, я бы перенаправлен на экран входа в систему (если я не авторизован), но если я использую http://{website}/Action?token={/* token for this user */}
, я был бы уполномочен и перенаправляется на упомянутое действие.
[TokenAuthorize]
класс
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;
}
}
}
Если я декорировать свои контроллеры с:
[Authorize]
[TokenAuthorize]
public class Controller
{
..
Говорится Authorize
И TokenAuthorize
(1). Мне нужно разработать способ обработки, такой как Authorize
OR TokenAuthorize