Это хороший вопрос - много путаницы вокруг токенов и OAuth.
Во-первых, когда вы упоминаете OAuth, вы, вероятно, имеете в виду стандарт OAuth2. Это последняя версия протокола OAuth, и именно об этом говорит большинство людей, когда говорят «OAuth».
Протокол OAuth поддерживает несколько различных типов аутентификации и авторизации (если быть точным, то 4).
Во-вторых, протокол OAuth работает путем аутентификации пользователей с помощью токенов. Идея вот такая:
Вместо того, чтобы ваш пользователь отправлял свои фактические учетные данные на ваш сервер при каждом отдельном запросе (как в случае с базовой аутентификацией, когда пользователь отправляет свое имя пользователя / пароль на сервер для каждого запроса), с помощью OAuth вы сначала обмениваете свои учетные данные на «токен», а затем аутентифицировать пользователей на основе этого «токена».
Идея OAuth заключается в том, что, требуя от пользователей реже передавать свои конфиденциальные учетные данные по сети, может случиться меньше неприятностей. (Во всяком случае, это идея.)
Теперь, вот где в игру вступают токены: спецификация OAuth построена на концепции токенов, но НЕ УКАЗЫВАЕТ, ЧТО ТАКОЕ ТОКЕН.
В самом «общем» смысле токен - это просто строка, которая однозначно идентифицирует пользователя. Вот и все.
Люди поняли это и разработали новый стандарт для создания токенов, названный стандартом JSON Web Token. Этот стандарт в основном предоставляет набор правил для создания токенов особым образом, что делает токены более полезными для вас в целом.
JWT позволяют делать такие вещи, как:
- Криптографически подпишите токен, чтобы вы знали, что токен не был подделан пользователем.
- Зашифруйте токены, чтобы их нельзя было прочитать в виде обычного текста.
- Встраивайте данные JSON ВНУТРИ строки токена стандартным способом.
Теперь по большей части: почти все в сообществе разработчиков согласились с тем, что если вы используете какой-либо тип OAuth, то используемые вами токены должны быть веб-токенами JSON.
==========
OK! Теперь, когда мы рассмотрели предысторию, позвольте мне ответить на ваш вопрос.
Выбор, который вы делаете выше, заключается в том, хотите ли вы включить полную спецификацию OAuth2 для аутентификации / авторизации (что довольно сложно) или вам просто нужна базовая «аутентификация токена».
Поскольку протокол OAuth предоставляет несколько различных способов аутентификации в соответствии со СТАНДАРТАМИ, он значительно усложняет большинство систем аутентификации.
Из-за этого многие фреймворки предлагают «упрощенную» версию потока предоставления пароля OAuth2, который, по сути, представляет собой простой метод, в котором:
- Пользователь отправляет свое имя пользователя / пароль на ваш сервер по некоторому URL-адресу, например / login.
- Ваш сервер генерирует токен JWT для пользователя.
- Ваш сервер возвращает этот токен пользователю.
- Пользователь хранит этот токен в своих файлах cookie, на мобильном устройстве или на возможном сервере API, где он использует его для выполнения запросов.
Опять же: приведенный выше поток НЕ совместим с OAuth, но представляет собой немного более простую версию, в которой ВСЕ ЕЩЕ используются токены.
Главное здесь то, что токены (JWT) обычно полезны, и их НЕ НУЖНО связывать с потоком OAuth.
Я понимаю, что это стена текста, но, надеюсь, она ответит на ваш вопрос более подробно =)
person
rdegges
schedule
21.01.2016