BASIС аутентификация для REST API плоха?

psm-home

Каждый раз, когда мне нужно сделать API для удаленного взаимодействия двух систем, я выбираю HTTPS протокол с BASIC аутентификацией (и XML или JSON в качестве payload, но сейчас это не важно). И каждый раз находятся добрые люди, которые говорят мне "это плохо, так не делают". А почему в точности это плохо, не говорят ("ах, это ужасно, мы шлем пароль с каждым запросом"). Ну и что, ведь все завернуто в HTTPS, так?
Как вы считаете, BASIC auth в таком случае это плохо? Почему, и что нужно использовать вместо?

Dasar

не удобно, не секьюрно (т.к. логин и пароль приходится передавать каждому клиентскому компоненту, который работает с сервером)

psm-home

А что вместо?

Dasar

как вариант: по куке. По крайней мере, такой вариант широкораспространен и с ним все работать умеют.
из минусов: менее стандартно.

SergeRRRRRR

скока я сталкивался с апи различных систем, везде это была авторизация с логином и паролем в каждом запросе. Ну иногда еще в запрос включался хэш всех параметров + ключевое слово, заданное и на стороне сервера, и на стороне клиента.

Dasar

скока я сталкивался с апи различных систем, везде это была авторизация с логином и паролем в каждом запросе.
именно для rest-а?

Dasar

вообще, если делать правильно, то лучше сразу OAuth втыкать.

SergeRRRRRR

не, не только rest. Ну можно наверное еще и высылать уже готовый хэш пароля, можно авторизовываться по токену (по сути кука).

psm-home

не удобно, не секьюрно (т.к. логин и пароль приходится передавать каждому клиентскому компоненту, который работает с сервером)

как вариант: по куке. По крайней мере, такой вариант широкораспространен и с ним все работать умеют.
из минусов: менее стандартно.

Ничего не понял, логин и пароль нужно передавать каждому компоненту и куку тоже надо передавать, так? Где профит? Это не говоря уже о том, что обычно на всю систему бывает 1 клиент к чужой системе, которого остальные части нашей системы просят выполнить тот или иной запрос.

Dasar

Ничего не понял, логин и пароль нужно передавать каждому компоненту и куку тоже надо передавать, так?
логинится один компонент и раздает куку другим компонентам для доступа.

psm-home

Ок, из нашей беседы я пока вынес для себя, что нужно присмотреться к OAuth (вероятно 2.0). Он у меня ассоциировался больше с авторизацией, чем с аутентификацией и мне пока непонятно, как его можно использовать для REST API. Еще он выглядит сложно, это плохо.

zorin29

ИМХО, принципиальный минус BASIC в том, что пароль играет роль access token-а. В идеале, ты бы хотел иметь отдельно логин-пароль, а отдельно - сессионный ключ, или access token, который выдается на определенный срок, с которым разрешено слать только определенное подмножество запросов и т.д. В итоге, если даже access token скомпрометирован, то злоумышленник еще не украл весь твой аккаунт.
В данном случае этот минус мне не кажется особенно значимым. Вот если бы у тебя была иерархия permission-ов, то да.
P.S. OAuth мощен, но не сказать, чтобы прост в понимании.

zorin29

Вот если Йожик напишет андроид-клиента к флокалу, то для того, чтобы я мог с этого андроид-клиента читать свои приваты, я должен буду сказать Йожику свой логин и пароль. Йожик, конечно, обещает мои приваты не читать :) Но кто его знает, может, он женат?
А если бы на флокале был OAuth, то я бы приложению выдал ограниченный ключик, который бы позволял ему с моего смартфона читать приваты (но не, к примеру, менять аватарку).

istran

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

zorin29

верно. Но он хотя бы не продаст мой аккаунт Аджилу.

evgen5555

У топикстартера две системы было, а не одна :)

Hastya

Как вы считаете, BASIC auth в таком случае это плохо? Почему, и что нужно использовать вместо?
BASIC + HTTPS достаточно секурно само по себе. Другое дело, пароль передается N раз, а не 1 раз - т.е. "в теории" шансов взломать такое больше. На практике я бы заморачивался только если очень много денег на кону.

yroslavasako

Для извращенцев по security есть такой rfc

psm-home

SPNEGO
Nooooooooooo!

yroslavasako

То есть basic аутентификация не так уж и плоха по сравнению с аутентификацией по токенам?

psm-home

Я вообще считаю что BASIC аутентификация завернутая в HTTPS достаточна для большинства применений (речь идет про remote API для межсистемного взаимодействия).

Hastya

То есть basic аутентификация не так уж и плоха по сравнению с аутентификацией по токенам?
Она просто имеет меньше возможностей в сравнении с токенами, например, нельзя избирательно вырубить сессию, ограничить время жизни и т.п.
Применять все эти токены, хэши, дайджесты внутри SSL "чисто для безопасности" - бессмысленная трата времени, т.к. всё это делает протокол SSL, причем лучше.
Оставить комментарий
Имя или ник:
Комментарий: