1. Введение
В этом руководстве мы будем понимать аутентификацию OAuth2 Token , так что только аутентифицированные пользователи и приложения получают действительный токен доступа, который впоследствии можно использовать для доступа к авторизованным API (которые являются ничем иным, как защищенными ресурсами в терминах OAuth) на сервере.
Благодаря аутентификации на основе токенов пользователи / приложения получают доступ к защищенным ресурсам в течение определенного периода времени, предоставляя действительный токен доступа для каждого взаимодействия с сервером.
2. События, связанные с аутентификацией токена
С помощью аутентификации токена, соответствующие события были четко изображены на диаграмме ниже —
- Клиентское приложение сначала запрашивает разрешение на авторизацию у пользователя (владельца ресурса), поскольку мы часто видим всплывающее окно авторизации для авторизации или запрета доступа к данным какого-либо другого приложения. Например, Goibibo запрашивает доступ к друзьям из вашей учетной записи Facebook.
- Как только пользователь авторизуется, нажав «Авторизовать» во всплывающем окне, клиентское приложение (Goibibo) получает грант авторизации.
- Затем клиентское приложение (Goibibo) запрашивает у сервера авторизации (Facebook) токен доступа вместе со своей идентификационной информацией и разрешением авторизации, полученным на предыдущем шаге.
- Если клиентское приложение аутентифицировано и разрешение на авторизацию признано действительным, Сервер авторизации (через Facebook) предоставляет / выдает токен доступа клиентскому приложению (Goibibo).
- Затем клиентское приложение (Goibibo) получает доступ к защищенным ресурсам (друзьям из приложения facebook), передавая затем токен доступа на сервер ресурсов (через Facebook) до истечения срока действия токена.
3. OAuth2 Роли
Ниже перечислены делегированные роли в реализации OAuth —
-
- владелец ресурса — объект, способный предоставить доступ к защищенному ресурсу. Если вы вошли в Goibibo и хотите получить доступ к друзьям из вашей учетной записи Facebook, вы являетесь владельцем ресурса, которому необходимо предоставить разрешение на авторизацию.
- сервер ресурсов — сервер (Facebook), на котором размещены защищенные ресурсы, который может принимать и отвечать на запросы защищенных ресурсов с помощью токенов доступа. Это означает, что список друзей — это один из ресурсов, размещаемых на сервере (Facebook), доступ к которому могут получить другие сторонние приложения (Goibibo).
- клиент — приложение (Goibibo), делающее защищенные запросы ресурсов от имени владельца ресурса (пользователя) и с его авторизацией. Мы определяем все такие авторизационные гранты в контексте как —
- Это означает, что Gobibo как клиентское приложение может получить доступ к списку друзей администратора на сервере ресурсов (Facebook).
- сервер авторизации — сервер, который предоставляет токен доступа клиентскому приложению на основе идентификатора клиентского приложения и гранта авторизации, полученных владельцем ресурса (пользователем).
4. Авторизация Гранты
OAuth2 предоставляет четыре типа авторизационных грантов —
4.1 Код авторизации
- Используется в приложениях на стороне сервера, поэтому конфиденциальность с обеих сторон поддерживается.
- Самый распространенный из всех.
- Перенаправление на основе потока.
- Запрос авторизации пользователя направляется через пользовательский агент (веб-браузер), и клиентское приложение должно быть достаточно способным взаимодействовать с пользовательским агентом и получать код авторизации с сервера авторизации на другом конце.
4.2 Неявный
- Несколько похоже на тип авторизации кода авторизации.
- Чаще используется для мобильных приложений и веб-приложений.
- Конфиденциальность подвергается риску на стороне клиента, так как код авторизации хранится локально вместе с пользовательским агентом перед передачей его клиентскому приложению. Это может быть выставлено другим приложениям на устройстве пользователя.
- Не поддерживает Обновить токены.
4.3 Учетные данные пароля владельца ресурса
- Используется между доверенными приложениями.
- Пользователь (владелец ресурса) делится учетными данными напрямую с клиентским приложением, которое запрашивает у сервера авторизации вернуть токен доступа после успешной аутентификации учетных данных пользователя и дальнейшей авторизации пользователя для доступа к ограниченным ресурсам на сервере.
- Это тип предоставления авторизации, который мы будем использовать для нашего демонстрационного приложения.
4.4 Учетные данные клиента
- Используется, когда приложению требуется доступ к собственному сегменту учетной записи службы, с помощью которого оно может получать ресурсы только под своим контролем.
- Таким образом, к одному и тому же приложению могут быть другие доверенные конфиденциальные клиенты, которые имеют свои собственные индивидуальные служебные учетные записи приложения и могут иметь под своим контролем различные защищенные ресурсы.
- Приложение запрашивает токен доступа, отправляя свои учетные данные, идентификатор клиента и секрет клиента на сервер авторизации.
5. Магазин токенов
Другим важным компонентом является хранилище токенов, которое определяет, как сгенерированные токены должны храниться. Хранилище по умолчанию является реализацией в памяти , но также доступны некоторые другие реализации, которые могут использоваться согласно требованию —
- InMemoryTokenStore — токен хранится в памяти сервера, поэтому существует риск потери токенов при перезапуске сервера авторизации.
- JwtTokenStore — все данные авторизации и предоставления доступа закодированы в самом токене, и такие токены нигде не сохраняются. Такие токены проверяются на лету с помощью декодера и зависят от JwtAccessTokenConverter .
- JdbcTokenStore — данные токена сохраняются в реляционной базе данных. С этим хранилищем токенов мы в безопасности в случае перезапуска сервера авторизации. Токены также могут быть легко распределены между серверами и могут быть отозваны. Обратите внимание, что для использования JdbcTokenStore нам понадобится зависимость «spring-jdbc» в пути к классам.
6. Обновить поток токенов
После истечения срока действия токена доступа по истечении заданного промежутка времени (119 в соответствии с приведенным ниже примером) мы можем сгенерировать новый действительный токен доступа, используя токен обновления . Токен обновления появляется, когда выдан оригинальный токен доступа, как мы видим ниже.
1
2
3
4
5
6
|
{ "access_token" : "04f12761-501b-415b-8941-52bce532ce60" , "token_type" : "bearer" , "refresh_token" : "fc348b4f-de62-4523-b808-9935b1f2e46f" , "expires_in" :119 } |
Нажмите здесь, чтобы перейти к официальной документации OAuth2
Ссылка: | Понимание аутентификации токена OAuth2 от нашего партнера JCG Абхиманью Прасада в блоге jCombat . |