14

Я считаю, что наилучшей практикой для API RESTful является отсутствие состояния. Я читаю abit об аутентификации без гражданства, но я не совсем понимаю, как его реализовать (выглядит как беспорядок токенов и т. Д.). PassportJS - хорошая библиотека проверки подлинности, но ее не без гражданства? Есть ли какая-то библиотека, которая помогает мне создавать API без состояния (с проверкой подлинности)? Я хочу использовать SSO (один знак), например Google, Twitter и т. Д., Поэтому будет хорошо, если библиотека обрабатывает это для меня (например, PassportJS).Библиотека аутентификации без учета состояния в NodeJS

+0

Когда вы говорите без гражданства, я предполагаю, что вы имеете в виду, что информация о сеансе не хранится о пользователе на стороне сервера. Если вы хотите этого, вы можете использовать промежуточное программное обеспечение «cookie», предоставляемое библиотеками connect/express. Вероятно, это то, что вы хотите, но можете ли вы подробнее рассказать о своей интерпретации аутентификации без гражданства, чтобы я мог помочь. – user568109

+0

@ user568109, вы правы, без апатии означает отсутствие информации о сеансе на сервере. «cookie» выглядит так, как мне нужно, но мне все же нужно определить часть аутентификации. PassportJS - огромная библиотека проверки подлинности использует сеансы, задаваясь вопросом, возможно ли ее заставить работать с «печенье» или каким-то образом сделать PassportJS безстоящим? –

ответ

24

В настоящее время я разрабатываю API REST и использую PassportJS Basic Auth (для целей dev) без сеансов. Вы можете сказать, стратегию не использовать сессии:

passport.authenticate('basic', { 'session' : false }) 
passport.authenticate('bearer', { 'session' : false }) 
passport.authenticate('token', { 'session' : false }) 

См here в нижней части.

+2

Я как бы новичок в этом. Если я хочу, чтобы пользователи проходили аутентификацию через третьи стороны, такие как Google, GitHub и т. Д., Которые, я считаю, также используют OAuth 2, как мне настроить это? Как провайдеры (Google, Facebook, Twitter) относятся к API (Basic, OAuth, OAuth 2)? –

6

@fakewaffle правый. Вы можете сделать паспорт без гражданства, установив сеанс на значение false.

Я разработал сервер Oauth2 с использованием oauth2rize. https://github.com/jaredhanson/oauth2orize/. Я использую его, чтобы предоставить токены доступа клиенту, которые затем отправляются с каждым запросом в заголовок authorization. Эти жетоны хранятся в базе данных и поэтому являются апатридами.

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

Паспорт.js предоставляет несколько провайдеров аутентификации, которые могут использоваться для аутентификации через сторонних поставщиков, таких как facebook, твиттер и т. Д. Ссылка на сайт провайдера http://passportjs.org/guide/facebook/.

Это ответ на вопрос или есть что-то еще, что вы хотите сделать?

+1

'oauth2orize' - это то, что я могу использовать, если я хочу создать поставщика OAuth? Если я хочу разрешить моим пользователям входить в систему/регистрироваться через Google/GitHub/etc, я буду использовать соответствующие провайдеры PassportJS? Если так, я хочу сделать их без гражданства, как это должно работать? Он не документирован, поэтому я могу использовать: 'passport.authenticate ('google', {'session': false})'? –

+0

Кроме того, «токены хранятся в базе данных и поэтому являются безстоящими»: поэтому я мог использовать «redis-sessions» без изменений кода в стороне PassportJS, и все будет «без гражданства»? –

+0

Да, я думаю, вы можете использовать 'redis-sessions', хотя я сам не использовал redis. И да, 'oauth2rize' используется для создания собственного поставщика OAuth. Также вы можете объяснить, что именно вы подразумеваете под апатридом, поэтому я могу ответить с большей уверенностью. – RohanJ