Примечание. Я знаю, что есть МНОГО других вопросов StackOverflow, касающихся этой темы. Я прочитал многие из них, а также многие другие веб-сайты. У меня остались следующие вопросы.
Итак, я создаю REST API для нового продукта. В настоящее время API предназначен исключительно для частного использования нашими веб-сайтами и телефонными приложениями. Однако я думаю, что было бы разумно разработать API так, чтобы его можно было сделать общедоступным в будущем.
Аутентификация
Хотя я смотрел на OAuth, я думаю, что базовая аутентификация HTTP через SSL достаточно безопасна для нашего API. Из того, что я понимаю, HTTP Basic Authentication over SSL является полностью жизнеспособным способом аутентификации REST API. Это также довольно просто, что мне нравится, так как я новичок в разработке API.
Авторизация
Если пользователь входит в API, используя свое имя пользователя и пароль, ему будет предоставлен доступ только к определенным частям API. Это означает, что они будут иметь доступ к своему собственному контенту, но не к контенту других пользователей. Кроме того, они могут быть ограничены тем, что они все могут делать.
В дополнение к учетным записям пользователей я планирую также иметь другие (не пользовательские) учетные записи для более глобальных административных задач. Эти учетные записи потенциально могут иметь полный доступ к API.
Это хороший дизайн? ИЛИ плохо ли аутентифицировать пользователя таким образом? Должен ли я только аутентифицировать своих клиентов (т.е. приложения) таким образом?
Сессии
Мой большой вопрос: при входе пользователя в наше веб-приложение, как мне управлять его сеансами? REST предусматривает отправку имени пользователя и пароля с каждым запросом. Кроме того, REST API не имеет состояния, поэтому я не могу управлять сеансами там. Однако мне нужно отследить, что они каким-то образом вошли в веб-приложение. Они явно не могут войти вручную для каждого запроса.
Один из подходов заключается в том, что после входа пользователя в систему мы сохраняем его учетные данные (адрес электронной почты и пароль) в сеансе PHP. Затем каждый последующий запрос к API может использовать эти учетные данные. Однако сохранение имен пользователей и паролей в сеансе PHP кажется неправильным и очень небезопасным. Но если не сделать это таким образом, как люди управляют сеансами при взаимодействии с REST API?
Телефонные приложения проще, так как вы можете сохранить учетные данные пользователя в связке ключей.
Может ли кто-нибудь помочь с моими вопросами по дизайну?