Быстрый способ запустить надежный сервер OAuth2 на вашем локальном компьютере — использовать отличный проект Cloud Foundry UAA . UAA используется в качестве базового сервера авторизации OAUth2 в развертываниях Cloud Foundry и может масштабироваться, но все еще достаточно мал, чтобы его можно было загружать на небольшом оборудовании.
Я расскажу об использовании UAA в двух постах. В этом посте я расскажу, как запустить локальный сервер UAA, и заполню его некоторыми участниками процесса авторизации OAuth2 — клиентами и пользователями, а в следующем посте я покажу, как использовать этот сервер авторизации. с примером клиентского приложения и в защите ресурса.
Запуск UAA
Репозиторий для проекта UAA находится по адресу https://github.com/cloudfoundry/uaa.
Загрузка проекта проста, просто клонируйте этот репозиторий:
| 
 1 
 | 
git clone https://github.com/cloudfoundry/uaa | 
Если у вас есть локальный JDK, запустите его, используя:
| 
 1 
 | 
./gradlew run | 
Эта версия UAA использует базу данных в памяти, поэтому сгенерированные тестовые данные будут потеряны при перезапуске приложения.
Заполните некоторые данные
Отличным способом взаимодействия с UAA является его сопутствующее CLI-приложение под названием uaac, доступное здесь . Предполагая, что вы загрузили uaac cli и UAA запустился с портом по умолчанию 8080, давайте начнем с указания uaac на приложение uaa:
| 
 1 
 | 
uaac target http://localhost:8080/uaa | 
и войдите в него, используя один из постоянных учетных данных клиента (admin / adminsecret):
| 
 1 
 | 
uaac token client get admin -s adminsecret | 
Теперь, когда клиент вошел в систему, токен можно исследовать с помощью:
| 
 1 
 | 
uaac context | 
Это будет отображать детали токена, выпущенного UAA, по следующим направлениям:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
 | 
[3]*[http://localhost:8080/uaa]  [2]*[admin]      client_id: admin      access_token: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJkOTliMjg1MC1iZDQ1LTRlOTctODIyZS03NGE2MmUwN2Y0YzUiLCJzdWIiOiJhZG1pbiIsImF1dGhvcml0aWVzIjpbImNsaWVudHMucmVhZCIsImNsaWVudHMuc2VjcmV0IiwiY2xpZW50cy53cml0ZSIsInVhYS5hZG1pbiIsImNsaWVudHMuYWRtaW4iLCJzY2ltLndyaXRlIiwic2NpbS5yZWFkIl0sInNjb3BlIjpbImNsaWVudHMucmVhZCIsImNsaWVudHMuc2VjcmV0IiwiY2xpZW50cy53cml0ZSIsInVhYS5hZG1pbiIsImNsaWVudHMuYWRtaW4iLCJzY2ltLndyaXRlIiwic2NpbS5yZWFkIl0sImNsaWVudF9pZCI6ImFkbWluIiwiY2lkIjoiYWRtaW4iLCJhenAiOiJhZG1pbiIsImdyYW50X3R5cGUiOiJjbGllbnRfY3JlZGVudGlhbHMiLCJyZXZfc2lnIjoiZTc4YjAyMTMiLCJpYXQiOjE0ODcwMzk3NzYsImV4cCI6MTQ4NzA4Mjk3NiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJhZG1pbiIsImNsaWVudHMiLCJ1YWEiLCJzY2ltIl19.B-RmeIvYttxJOMr_CX1Jsinsr6G_e8dVU-Fv-3Qq1ow      token_type: bearer      expires_in: 43199      scope: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.read      jti: d99b2850-bd45-4e97-822e-74a62e07f4c5 | 
Чтобы увидеть более читаемую и расшифрованную форму токена, просто запустите:
| 
 1 
 | 
uaac token decode | 
который должен отображать декодированную форму токена:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
 | 
jti: d99b2850-bd45-4e97-822e-74a62e07f4c5  sub: admin  authorities: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.read  scope: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.read  client_id: admin  cid: admin  azp: admin  grant_type: client_credentials  rev_sig: e78b0213  iat: 1487039776  exp: 1487082976  iss: http://localhost:8080/uaa/oauth/token  zid: uaa  aud: admin clients uaa scim | 
Теперь, чтобы создать новый клиент (называемый client1), который я буду использовать в следующем посте:
| 
 1 
2 
3 
4 
5 
6 
 | 
uaac client add client1  \  --name client1 --scope resource.read,resource.write \  --autoapprove ".*"  \  -s client1 \  --authorized_grant_types authorization_code,refresh_token,client_credentials \  --authorities uaa.resource | 
Этот клиент будет запрашивать область действия resource.read, resource.write у пользователей и будет участвовать в потоках OAuth2 типа авторизации code
Создание владельца ресурса или пользователя системы:
| 
 1 
 | 
uaac user add user1 -p user1 --emails user1@user1.com | 
и назначив этому пользователю область resource.read:
| 
 1 
2 
 | 
uaac group add resource.readuaac member add resource.read user1 | 
Выполните тестовый поток
Теперь, когда у нас есть клиент и владелец ресурса, давайте проведем быстрый поток authorization_code, uaac предоставляет удобный параметр командной строки, который обеспечивает необходимые перехваты перенаправления для захвата кода авторизации и преобразует код auth_code в токен доступа.
| 
 1 
 | 
uaac token authcode get -c client1 -s client1 --no-cf | 
Вызов вышеупомянутой команды должен открыть окно браузера и запросить кредиты пользователя:
Вход в систему с пользователем user1 / user1, который был создан ранее, должен ответить в командной строке сообщением о том, что токен был успешно извлечен, это можно проверить еще раз, используя следующую команду:
| 
 1 
 | 
uaac context | 
с выводом, показывая детали вошедшего в систему пользователя !:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
 | 
jti: c8ddfdfc-9317-4f16-b3a9-808efa76684b  nonce: 43c8d9f7d6264fb347ede40c1b7b44ae  sub: 7fdd9a7e-5b92-42e7-ae75-839e21b932e1  scope: resource.read  client_id: client1  cid: client1  azp: client1  grant_type: authorization_code  user_id: 7fdd9a7e-5b92-42e7-ae75-839e21b932e1  origin: uaa  user_name: user1  email: user1@user1.com  auth_time: 1487040497  rev_sig: c107f5c0  iat: 1487040497  exp: 1487083697  iss: http://localhost:8080/uaa/oauth/token  zid: uaa  aud: resource client1 | 
На этом завершается вихревая экскурсия по настройке локального UAA и добавлению пары ролей, участвующих в потоке OAuth2 — клиента и пользователя. Я не рассматривал потоки OAuth2 сам по себе, вводная часть Digital Ocean для OAuth2 является очень хорошим учебником по потокам.
Я буду следовать за этим постом с сообщением о том, как эту инфраструктуру можно использовать для защиты примера ресурса и демонстрации потока с использованием Spring Security и Spring Boot.
| Ссылка: | Начальная загрузка сервера авторизации OAuth2 с использованием UAA от нашего партнера по JCG Биджу Кунджуммена из блога all and sundry. | 
