Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Это хороший ответ на аналогичный вопрос. Это в основном говорит:

  • Создайте пользовательский класс пользователя, который реализует 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

НТН

Ответ 2

Я наткнулся на свое решение, пытаясь реализовать аутентификацию маркера json в web api. Важно отметить, что мое решение обрабатывает аутентификацию, отправив токен json через заголовок аутентификации запроса Http (а не через файлы cookie) и не используя инфраструктуру Microsoft.Identity.

Во всяком случае, я в основном реализовал в поваренной книге решение, которое здесь описано 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);
        }

Естественно, вы заменили бы этот бит кода выше своим собственным методом проверки ваших (предположительно ранее существовавших) пользовательских баз данных. После того, как я это осуществил, я понял, что вам не нужно использовать новую среду идентификации, установленную Visual Studio для вас.

Чтобы выполнить эту работу, я сделал следующее:

1) Создал пустой проект и выбрал Изменить аутентификацию/Индивидуальные учетные записи пользователей. Это устанавливает большинство требуемых ссылок и файлов, которые вам нужны из коробки, для использования аутентификации с помощью токена с помощью куки файлов, а также файлов фреймворка идентификации кода.

2) Отредактировал эти файлы, следуя примеру Тайсера Жуде. Это требует некоторые новые объекты, такие как 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.cs, identityConfig.cs, AccountBindingModels.cs, AccountViewModels.cs). В принципе, больше не упоминается идентификатор Microsoft.

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

Подробные сведения см. Здесь Аутентификация базы токенов OAuth Web API с пользовательской базой

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