Ответ 1
Вы можете использовать базовую HTTP-аутентификацию или реализовать аналогичную с маркером или билетом, переданным через заголовки http.
Предполагая, что в настоящее время у меня есть недавно созданный проект на основе шаблона Visual Studio 2015 "WebApp" с индивидуальной аутентификацией учетных записей, я использую пакет Microsoft.AspNet.Authentication
, и я не всегда могу полагаться на файлы cookie, потому что мой веб-API также должен ориентироваться на мобильные приложения:
Как добавить аутентификацию в свой веб-API? Меня особенно интересует аутентификация на токенах.
Вы можете использовать базовую HTTP-аутентификацию или реализовать аналогичную с маркером или билетом, переданным через заголовки http.
Внедрите собственный авторизованный атрибут в свой веб-проект api. В перегрузке IsAuthorized (HttpActionContext actionContext) вы можете проверить схему авторизации и заголовок авторизации, а затем вы можете подключиться к провайдеру сеансов и проверить, имеет ли пользователь активный сеанс.
Вы должны передать токен входа в заголовок авторизации, поэтому, если токен отсутствует, это означает, что нет активного пользователя.
Поэтому, когда вы входите в систему, вы должны создать и зашифровать токен при успешном входе в систему. Затем передайте этот токен с каждым запросом на сервер.
Этот блог содержит дополнительную информацию об использовании AuthorizeAttribute: http://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way
Вы можете сделать отдельную таблицу в db для хранения деталей проверки подлинности (AuthKey, UserID, CreatedDate, ExpiredDate, IsExpired) и создать такие функции, как CheckAuthorizationKey (строка authKey), ExtendAuthorization (строка authKey), ExpireAuthorization (строка authKey) {}
и вызовите эти функции для проверки авторизации в соответствии с примером кода.
public ServiceResult<LoginModel> Login(string auth_key)
{
var service = new ServiceResult<LoginModel>();
LoginModel user = new LoginModel();
if (AuthKey.CheckAuthorizationKey(auth_key) == false)
{
service.message = TemplateCodes.GetMessage(TemplateCodes.UnAuthorize, null, db);
service.status = ServiceStatus.authorization_failed;
return service;
}