Нужен ли мне oauth для аутентификации на основе токенов доступа

У меня есть одностраничное приложение для не-/мобильных браузеров html5, получающих данные из RESTful HTTP API с веб-API asp.net. Мы используем собственный хостинг OWIN, работающий в службе Windows.

Мне не нужна аутентификация на основе файлов cookie. Я хотел бы аутентифицировать пользователя и предоставить ему токен доступа на основе json с его утверждениями/разрешениями на редактирование/создание/удаление/показ определенных вещей в пользовательском интерфейсе.

Мне не нужен внешний провайдер входа в систему. Наш пользователь будет аутентифицироваться с именем пользователя и паролем, а не с электронной почтой Google...

Теперь я спрашиваю себя, должен ли я идти в направлении thinktecture и identyserver, или идентификации asp.net, или... аутентификации OWIN и ExternalBearer, я здесь потерялся.

Что бы вы порекомендовали, исходя из моей информации?


person Elisabeth    schedule 22.06.2014    source источник


Ответы (1)


IdentityServer подходит для сценариев, в которых у вас есть несколько приложений и вы хотите, чтобы они аутентифицировались с помощью одной STS, в основном, если вам нужен единый вход. Описанный вами сценарий достигается в IdentityServer с помощью OAuth. То есть вы определяете приложение, которое хотите использовать IdentityServer для аутентификации, а затем создаете клиент OAuth для получения токенов доступа для доступа к этому приложению. Если это не так, то вам, вероятно, лучше избегать сложности внедрения стороннего компонента для выполнения этой работы. Мы используем IdentityServer для аутентификации пользователей 3 разных приложений, 2 SPA и приложения MVC. Кроме того, в этом случае вы действительно не можете разделить идентификаторы OWIN и ASP.NET. Промежуточное ПО OWIN предоставит вам токены и будет использовать ASP.NET Identity в качестве репозитория пользователей для аутентификации пользователей, поэтому OWIN просто выполняет работу по предоставлению токенов и использованию ASP.NET Identity для аутентификации пользователей.

person Mohammad Sepahvand    schedule 23.06.2014
comment
Извините за вводящий в заблуждение комментарий о личности asp.net или ... OWIN. Конечно, они зависят вместе. У нас есть только ОДНА заявка. ... сторонний компонент для выполнения этой работы... Тогда третьей стороной будет идентификатор asp.net, верно? И если бы у меня был отдельный сайт администратора от сайта пользователя для работы на отдельном сервере, то вы говорите, что identityserver подойдет лучше? - person Elisabeth; 23.06.2014
comment
Нет, третьей стороной будет IdentityServer. Я в основном говорю, что IdentityServer имеет свою собственную кривую обучения, и его документация далеко не так обильна и полна, как у OWIN и ASP.NET Identity. Если бы я был вами, я бы пошел дальше и использовал ASP.NET Identity/OWIN, если вы думаете, что в будущем у вас будут другие приложения, которые вам нужно будет аутентифицировать в той же базе данных пользователей, тогда используйте IdentityServer. - person Mohammad Sepahvand; 23.06.2014
comment
если вы думаете, что в будущем у вас будут другие приложения, которые вам нужно будет аутентифицировать в той же базе данных пользователей, тогда используйте IdentityServer. – Как я уже говорил, у нас БУДЕТ отдельный сайт администратора/пользователя. Когда администратор или пользователь входит в систему на каждом своем сайте, они, конечно, будут использовать одну и ту же базу данных. Основываясь на этой информации, в чем конкретное преимущество использования identityServer и asp.net с owin? - person Elisabeth; 23.06.2014
comment
Спасибо за обзор, который облом... Он не отвечает на мой вопрос, на самом деле просто вызывает новые вопросы... ;-) И если бы я использовал identityServer, я бы дождался v3 этой весной. Я знаю v2 от бывшей компании частично, и ее много нужно настроить ... - person Elisabeth; 23.06.2014
comment
Я уже говорил, что использование Identity Server для описанного вами сценария — это излишество. Просто используйте OWIN. Таким образом, IdentityServer используется, когда у вас есть много приложений, которые вы хотите аутентифицировать в одном месте, SSO! Это также дает вам детальный контроль над тем, как вы выпускаете свои токены и что вы кладете в эти токены. Который вам, похоже, совсем не нужен. - person Mohammad Sepahvand; 23.06.2014
comment
Хорошо, но вы читали это? ... аутентифицируйте пользователя и дайте ему токен доступа на основе json с его утверждениями / разрешениями ... Разве этого недостаточно мелкозернистого контроля, который мне нужен? - person Elisabeth; 23.06.2014
comment
Посмотрите на метод GrantResourceOwnerCredentials в классе SimpleAuthorizationServerProvider по ссылке, которую я разместил в комментарии выше. Это отвечает на ваш вопрос, если вы не поймете, в основном, вы можете добавить все, что хотите, в качестве претензии к токену, этого более чем достаточно мелкозернистого контроля. - person Mohammad Sepahvand; 23.06.2014
comment
Хорошо спасибо! Я проверил класс SimpleAuthorizationServerProvider :) - person Elisabeth; 23.06.2014