Проверка подлинности маркера веб-API с пользовательской базой данных пользователей


Я разрабатываю службу Web API 2.1, которая должна аутентифицировать подключающиеся клиенты (клиенты HTML5/JS, которые я буду создавать и контролировать). К сожалению, информация о пользователе (имя пользователя, хэши паролей, роли и многое, многое другое) хранится в существующей базе данных (SQL Server), к которой у меня есть только доступ для чтения. Таблица базы данных пользователей была создана 5-6 лет назад без каких-либо ссылок на фреймворки безопасности, поэтому это полностью пользовательский формат. Я не имею права вносить какие-либо изменения либо к данным, либо к структуре базы данных.

вдохновленный в этой статье, Я свернул свой собственный метод аутентификации пользователей на основе токенов, но мне не хватает полноты и (повторно)гарантии использования установленной структуры безопасности.

есть ли способ интегрировать существующую структуру, например OAuth2, в мой текущий проект с учетом ограничений, о которых я упоминал выше? Я не знаю, имеет ли это какое-либо значение, но я использую самостоятельный хостинг Долг.

EDIT: Я не знаю, почему несколько человек отвергли этот вопрос-это действительно так плохо? Это настоящий вопрос, насколько мне известно, и я хотел бы получить ответ (даже если это "нет, вы не можете этого сделать, потому что..."). Если эти люди могут объяснить свои причины в комментарии,это будет оценено.

5 56

5 ответов:

Это хороший ответ на подобный вопрос. Он в основном говорит:

  • создайте пользовательский класс пользователя, который реализует IUser
  • определите пользовательское хранилище, которое реализует public class UserStoreService : IUserStore<CustomUser>, IUserPasswordStore<CustomUser>
  • провод все

Так как ответ довольно обширен, я просто предоставил основные шаги... подробности здесь: как настроить аутентификацию для моего собственного набора таблиц в asp.net web api 2?

Это также очень ценный контент, который также относится к веб-API:

настройка ASP.NET аутентификация с идентификацией по JumpStart

https://channel9.msdn.com/Series/Customizing-ASPNET-Authentication-with-Identity

HTH

я наткнулся на мое решение при попытке реализовать аутентификацию токенов json в веб-api. Важно отметить, что мое решение обрабатывает аутентификацию, отправляя токен json через заголовок аутентификации Http-запроса (не через куки) и не С помощью Microsoft.Структура идентичности.

во всяком случае, я в основном реализовал в поваренной книге решение, любезно описанное здесь Taiseer Joudeh: http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/

главное, что нужно заметить, это следующий бит кода:

//Dummy check here, you need to do your DB checks against memebrship system http://bit.ly/SPAAuthCode
        if (context.UserName != context.Password)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect");
            //return;
            return Task.FromResult<object>(null);
        }

естественно, вы заменили бы этот бит кода выше своим собственным методом для проверки ваших (предположительно существующих) пользовательских баз данных. Как только я реализовал это, я понял, что вам не нужно использовать новый Code first identity framework, который Visual Studio устанавливает для вас.

чтобы сделать эту работу я сделал следующее:

1) создал пустой проект и выбран Изменить Аутентификацию / Индивидуальные Учетные Записи Пользователей. Это устанавливает большинство необходимых ссылок и файлов, которые вам нужны из коробки, чтобы использовать аутентификацию токенов с помощью файлов cookie, а также файлов Identity framework с первым кодом.

2) отредактировал эти файлы, следуя примеру Taiseer Joudeh. Это требует некоторые новые объекты, такие как CustomOAuthProvider.cs среди других. И вам нужно реализовать свою собственную проверку пользователя / пароля, настроив этот блок кода:

if (context.UserName != context.Password) { context.SetError("invalid_grant", "The user name or password is incorrect"); //return; return Task.FromResult<object>(null); }

ссылка на инструкции Taiseer Joudeh: http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/

3) обрезал мой проект посторонних файлов (AccountBindingModels.cs, AccountViewModels.cs, IdentityModels.cs, ApplicationOAuthProvider.цезий, identityConfig.cs, AccountBindingModels.cs, AccountViewModels.цезий.) В принципе, больше никаких ссылок на удостоверения microsoft.

Я уверен, что microsoft.identity вещь отличная, но я был раздражен первой реализацией кода баз данных, когда я уже использовал некоторые устаревшие базы данных другой структуры и т. д. Надеюсь, это поможет. Я вполне доволен результатом (после нескольких дней возни, чтобы заставить его работать).

кто-то другой, обладая компетенцией, может объяснить варианты. Но если аутентификация как услуга является опцией, то проверьте Auth0 @ https://auth0.com

я протестировал службу (как плагин Azure), используя как HTML/JS -, так и собственные приложения Windows Phone, против простой таблицы Sql Server и AD. Работает лиек Шарм, почти нулевая головная боль.

Я не хотел использовать какие-либо существующие классы и, наконец, выйти что-то очень простое, как

var userName = context.UserName;
var password = context.Password;
var userService = new UserService(); // our created one
var user = userService.ValidateUser(userName, password);
if (user != null){
   .......
}

Смотрите полную информацию здесь веб-API с OAuth токен проверки подлинности базы с пользовательской базе данных

на ролевая базовая аутентификация с пользовательской базой данных Надеюсь, это поможет

Это может быть совершенно безумный и недопустимый подход для вас, но я столкнулся с аналогичной проблемой: новое веб-приложение (MVVM + WebAPI), устаревшая система, используемая для выдачи и проверки токенов. Вдохновленный http://tech.pro/tutorial/1216/implementing-custom-authentication-for-aspnet, и поскольку мое приложение будет в основном использоваться его сопровождаемым графическим интерфейсом (веб-приложение MVVM), я решил использовать маркер "cookie на основе", созданный FormsAuthentication. Формсаутнентификация cookie / ticket является обеспеченный внутренней магической безопасностью .net (который я предполагаю, что id полностью безопасен и нерушим).

в моем случае cookie просто содержит билет, выданный устаревшей системой (но вы также можете хранить там более подробную информацию, например, JSONSerializing пользовательский тип). Во время авторизации моя система проверяет маркер на соответствие устаревшей системе. Я думаю, вы могли бы использовать что-то подобное вместе с пользовательским AuthorizationFilter.