@BashkaMen
C# программист

Web Api Авторизация, без готовых решений?

Привет, хочу сделать API на ASP.net Core и хочу спросить пару вопросов по авторизации в API.
Api ещё не делается, я просто хочу спланировать и все нарисовать у себя в голове.

Представим, есть БД пользователей логин и пароль и мб ещё какой-то мусор.
Контроллер имеет метод Auth(string login, string pass) который вернет нам ответ в котором при успешном входе будет токен который мы и будем дальше использовать просто прикрепив к след запросам в Header.
Токен регистрируется в таблице Токенов с Id пользователя и IP получения. То-есть наш токен это ключ к совершению действий от пользователя, но только с того-же IP.

Есть контроллер с данными и прочими действиями, на них стоит атрибут авторизации который как раз и проверяет наличие этого токена в Header, если нет - не пропускает и возвращает ошибку, иначе все и работает по своему сценарию.

Вроде идея проста и я не вижу здесь "дыр" для взлома.

1) Мне кажется что в каждом запросе к API проверять валидность IP - Token (запрос к БД) будет долго и ответы будут больше пол секунды, как можно решить или так и делают?
2) Везде где читаю про эту тему пишут: "Не пишите сами, будет куча дыр! Используйте готовые решения. (Owin и тд)"
Есть ли в моей модели дыры?
3) Если я сделаю сайт (Веб приложение) который будет обращаться к API (я так понимаю как и обычный клиент - HTTP запросами), то по идее мой сайт будет одним из пользователей который использует Token и держит его в Header, будет ли виден он в веб-отладчике? с какого IP будут уходить запросы, сервера или пользователя? Я имею ввиду те корые будут не в контроллерах сайта, а Ajax.
  • Вопрос задан
  • 2446 просмотров
Решения вопроса 1
@BashkaMen Автор вопроса
C# программист
Кому интересно как уже работает система можете попробывать )
autoupdateservice.azurewebsites.net/swagger

В ответе на авторизацию будет токен который нужно будет вставить после нажатия Authorize

https://github.com/BashkaMen/QRTicket
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
1) Мне кажется что в каждом запросе к API проверять валидность IP - Token (запрос к БД) будет долго и ответы будут больше пол секунды, как можно решить или так и делают?

Кеш in-memory для активных токенов.
2) Везде где читаю про эту тему пишут: "Не пишите сами, будет куча дыр! Используйте готовые решения. (Owin и тд)"
Есть ли в моей модели дыры?

На стадии модели дыры рано искать, да и модель у вас поверхностная. Как будут генериться токены, какой сложности, вероятность коллизий - вот это вот все решает.
3) Если я сделаю сайт (Веб приложение) который будет обращаться к API (я так понимаю как и обычный клиент - HTTP запросами), то по идее мой сайт будет одним из пользователей который использует Token и держит его в Header, будет ли виден он в веб-отладчике? с какого IP будут уходить запросы, сервера или пользователя? Я имею ввиду те корые будут не в контроллерах сайта, а Ajax.

Смотря какой апи и как вы реализуете. Ajax - это клиентская технология, да, токен будет виден в отладчике.
Ответ написан
AxisPod
@AxisPod
Поглядите JWT это стандарт, не совсем готовое решение.
Ответ написан
@Mindgrow
Есть контроллер с данными и прочими действиями, на них стоит атрибут авторизации который как раз и проверяет наличие этого токена в Header, если нет - не пропускает и возвращает ошибку, иначе все и работает по своему сценарию.


А я прочитал это и прям понял что вы хотите переписать ASP.NET Identity. Все в точности как там. У методов контроллера можно поставить атрибут "Authorized", и тогда если пользователь не авторизован - то он будет переведён на страницу авторизации. Плюс к тому можно указать атрибут Роль, в котором можно указывать для каких ролей действует данный метод контроллера. Ну и много других преимуществ, таких как авторизация через социальные сети.

Все готово, просто не понимаю зачем вам тратить время на разработку своей собственной системы авторизации. Если только вы не пишете сайт для вооруженных сил...)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы