Как получить токен в Spring boot 2 oauth2?

Я новичок в весенней безопасности oauth2. Я хочу запустить этот пример кода сервера авторизации. Я запускаю его успешно, чтобы получить токен, я установил почтальона следующим образом, а затем отправил запрос:

Как получить токен в Spring boot 2 oauth2?Как получить токен в Spring boot 2 oauth2?

В этом случае я ввел идентификатор клиента с его паролем, но я хочу войти без них. Например, мои пользователи отправляют имя пользователя, пароль и идентификатор клиента, а затем получают токен. Но каждый запрос, который я отправляю, сервер возвращает 401 ответ. В Пружинный ботинок 2 oauth 2, Как мне это сделать?

пожалуйста, опубликуйте свои WebSecurityConfigurerAdapter и AuthorizationServerConfigurerAdapter

Ganesh Gudghe 11.12.2018 11:00
WebSecurityConfigurerAdapter и AuthorizationServerConfigurerAdapter.
Morteza Malvandi 11.12.2018 11:03

опубликуйте свой 401 ответ Почтальон снимок экрана здесь

Ganesh Gudghe 11.12.2018 11:06

{"timestamp": "2018 ...", "status": 401, "error": "Unauthorized", "message": "Unauthorized", "path": "/ oauth / token"}

Morteza Malvandi 11.12.2018 11:11

Что ты имеешь ввиду под but i want to login without theme?

Sven Hakvoort 11.12.2018 11:16

Без идентификатора клиента и секрета клиента.

Morteza Malvandi 11.12.2018 12:00

Как вы планируете проверять клиента без учетных данных? Как настроен ваш клиент?

s7vr 27.02.2019 17:17

Я хочу, чтобы пользователи отправляли собственное имя пользователя и пароль с помощью ajax на сервер авторизации и получали токен.

Morteza Malvandi 28.02.2019 10:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
9
8
12 735
2

Ответы 2

1) К получить токен доступа нужно использовать такой запрос:

curl --user client:secret \
  -X POST http://localhost:8080/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password&username=username&password=password&scope=*" \

с Базовая аутентификация и учетными данными вашего приложения (вы можете избежать секрета, если хотите). Имя пользователя и его пароль, которые вы должны передать в теле запроса, а также значение «пароль» в поле grant_type.

В ответ вы получите доступ и обновите токены, например:

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM",
    "expires_in": 119,
    "scope": "*"
    "jti": "c95c93a0-18f8-48fc-a3de-5efcf5ab10a9"
}

2) Затем вы можете использовать этот токен доступа к получить доступ к ресурсам вашего серверного приложения. В этом случае вам понадобится тип авторизации Жетон на предъявителя и ваш токен доступа:

curl -X GET http://localhost:8080/demo \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw'

3) Для обновить токен вы должны снова использовать базовую аутентификацию с учетными данными клиента, но в этом случае вам понадобится «refresh_token» как grant_type:

curl --user client:secret \
  -X POST http://localhost:8080/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=refresh_token&scope=*&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM'

Каждый раз, когда срок действия токена доступа истекает, вы должны обновлять его с помощью третьего запроса. Тогда вы снова сможете получить доступ к ресурсам.

Дополнительная информация

1) Мой ответ как создать простое приложение OAuth2 с JWT и настраиваемыми утверждениями

2) Связанное демонстрационное приложение

3) Связанная коллекция почтальона

Спецификация OAuth 2.0 описывает ряд грантов («методов») для клиентского приложения для получения токена доступа (который представляет собой разрешение пользователя для клиента на доступ к своим данным).

Предопределенные типы грантов Spring OAuth2:

  • ClientCredentialsTokenGranter
  • RefreshTokenGranter
  • AuthorizationCodeTokenGranter
  • ImplicitTokenGranter
  • ResourceOwnerPasswordTokenGranter (это тип предоставления пароля, который вы используете в примере)

Если вы хотите изменить логику получения токенов, вы можете использовать собственный TokenGranter.

Дополнительный:

Руководство разработчика OAuth 2

Другие вопросы по теме