Я думаю, что токены - это хороший путь.Проверка подлинности по формам основана на файлах cookie для Интернета.Не самая идеальная ситуация для всех не браузерных клиентов.
Я бы предложил создать пользовательский атрибут AuthorizationFilterAttribute и переопределить метод OnAuthorization.В этом методе вы можете проверить наличие маркера, который вы выдали клиенту после того, как они предоставили действительные учетные данные.Вы можете использовать этот атрибут в любом методе или контроллере, который вы хотите проверить.Вот пример, на который вы можете сослаться
public class AuthorizeTokenAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext != null)
{
if (!AuthorizeRequest(actionContext.ControllerContext.Request))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) { RequestMessage = actionContext.ControllerContext.Request };
}
return;
}
}
private bool AuthorizeRequest(System.Net.Http.HttpRequestMessage request)
{
bool authorized = false;
if (request.Headers.Contains(Constants.TOKEN_HEADER))
{
var tokenValue = request.Headers.GetValues("TOKEN_HEADER");
if (tokenValue.Count() == 1) {
var value = tokenValue.FirstOrDefault();
//Token validation logic here
//set authorized variable accordingly
}
}
return authorized;
} }
TOKEN_HEADER - это просто строка, представляющая заголовок HTTP, который клиент должен передать обратно для аутентифицированных запросов.
Так что давайте пройдемся по нему
- Клиент запрашивает защищенные данные
- Клиент не авторизован, возвращает ответ с несанкционированным кодом состояния
- Клиент отправляет учетные данные для аутентификации, которые должны быть защищены через HTTPS
- После проверки клиент получает токен через заголовок HTTP или любой другой способ, который вам подходит
- Клиент пытается снова запросить защищенные данные, на этот раз прикрепил токен к запросу
- Атрибут AuthorizeTokenAttribute провериттокен и разрешить выполнение действия.
Также проверьте этот пост Джона Петерсена. Обеспечение безопасности вашего ASP.NET Web API