Я считаю, что наилучшей практикой для API RESTful является отсутствие состояния. Я читаю abit об аутентификации без гражданства, но я не совсем понимаю, как его реализовать (выглядит как беспорядок токенов и т. Д.). PassportJS - хорошая библиотека проверки подлинности, но ее не без гражданства? Есть ли какая-то библиотека, которая помогает мне создавать API без состояния (с проверкой подлинности)? Я хочу использовать SSO (один знак), например Google, Twitter и т. Д., Поэтому будет хорошо, если библиотека обрабатывает это для меня (например, PassportJS).Библиотека аутентификации без учета состояния в NodeJS
ответ
В настоящее время я разрабатываю API REST и использую PassportJS Basic Auth (для целей dev) без сеансов. Вы можете сказать, стратегию не использовать сессии:
passport.authenticate('basic', { 'session' : false })
passport.authenticate('bearer', { 'session' : false })
passport.authenticate('token', { 'session' : false })
См here в нижней части.
Я как бы новичок в этом. Если я хочу, чтобы пользователи проходили аутентификацию через третьи стороны, такие как Google, GitHub и т. Д., Которые, я считаю, также используют OAuth 2, как мне настроить это? Как провайдеры (Google, Facebook, Twitter) относятся к API (Basic, OAuth, OAuth 2)? –
@fakewaffle правый. Вы можете сделать паспорт без гражданства, установив сеанс на значение false.
Я разработал сервер Oauth2 с использованием oauth2rize. https://github.com/jaredhanson/oauth2orize/. Я использую его, чтобы предоставить токены доступа клиенту, которые затем отправляются с каждым запросом в заголовок authorization
. Эти жетоны хранятся в базе данных и поэтому являются апатридами.
Вы можете, конечно, использовать другие провайдеры для аутентификации пользователя и предоставления доступа токену клиенту.
Паспорт.js предоставляет несколько провайдеров аутентификации, которые могут использоваться для аутентификации через сторонних поставщиков, таких как facebook, твиттер и т. Д. Ссылка на сайт провайдера http://passportjs.org/guide/facebook/.
Это ответ на вопрос или есть что-то еще, что вы хотите сделать?
'oauth2orize' - это то, что я могу использовать, если я хочу создать поставщика OAuth? Если я хочу разрешить моим пользователям входить в систему/регистрироваться через Google/GitHub/etc, я буду использовать соответствующие провайдеры PassportJS? Если так, я хочу сделать их без гражданства, как это должно работать? Он не документирован, поэтому я могу использовать: 'passport.authenticate ('google', {'session': false})'? –
Кроме того, «токены хранятся в базе данных и поэтому являются безстоящими»: поэтому я мог использовать «redis-sessions» без изменений кода в стороне PassportJS, и все будет «без гражданства»? –
Да, я думаю, вы можете использовать 'redis-sessions', хотя я сам не использовал redis. И да, 'oauth2rize' используется для создания собственного поставщика OAuth. Также вы можете объяснить, что именно вы подразумеваете под апатридом, поэтому я могу ответить с большей уверенностью. – RohanJ
Когда вы говорите без гражданства, я предполагаю, что вы имеете в виду, что информация о сеансе не хранится о пользователе на стороне сервера. Если вы хотите этого, вы можете использовать промежуточное программное обеспечение «cookie», предоставляемое библиотеками connect/express. Вероятно, это то, что вы хотите, но можете ли вы подробнее рассказать о своей интерпретации аутентификации без гражданства, чтобы я мог помочь. – user568109
@ user568109, вы правы, без апатии означает отсутствие информации о сеансе на сервере. «cookie» выглядит так, как мне нужно, но мне все же нужно определить часть аутентификации. PassportJS - огромная библиотека проверки подлинности использует сеансы, задаваясь вопросом, возможно ли ее заставить работать с «печенье» или каким-то образом сделать PassportJS безстоящим? –