Подключаем Spring Security и oAuth2. Spring Boot REST
HTML-код
- Опубликовано: 20 июл 2018
- Spring Boot Rest Application: подключаем Spring Security oAuth2 используя в качестве провайдера oAuth2 Google.
Для реализации авторизации в приложении можно привычную форму авторизации, но это потребует от пользователя создания новой учётной записи, подтверждение почты, время на заполнение профиля и прочие сложности. От разработчика требуются действия по проверке данных пользователя и организации их шифрования. Альтернатива - использование oAuth2 авторизации с использованием внешнего сервера для подтверждения личности пользователя.
Ссылка на код из видео:
github.com/drucoder/sarafan/t...
Проект Lombok, предоставляющий аннотации для сущностей можно посмотреть тут:
• Java Tools: Project Lo...
Spring Framework содержит в своём наборе отличный модуль - Spring Security, включающий, помимо прочего, блок, обеспечивающий простую интеграцию oAuth2 авторизации.
В качестве провайдера oAuth2 мы будем использовать Google ввиду того, что продукты этой компании достаточно широко распространены и учётная запись Google есть у большинства современных пользователей (по состоянию на 2018 год XD)
В качестве ориентира при настройке авторизации мы будем использовать официальный гайд из блога проекта Spring:
spring.io/guides/tutorials/sp...
Зависимости на необходимые в этом видео модули лежат тут:
gist.github.com/drucoder/40ff...
Проперти, необходимые для Spring Security:
gist.github.com/drucoder/92a1...
Личный кабинет в Google Developer Console, где создаются токены:
console.cloud.google.com/apis...
Ссылка на плейлист Sweater App (Spring MVC):
• Spring Boot: делаем пр...
Ссылка на видео с подключением Spring Security в Sweater App:
• Spring Boot Security: ...
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
➡ Твиттер: / letscodedru
➡ Чат в Discord: / discord
➡ Группа Вконтакте: letscodedru
➡ Канал в Telegram: t.me/letsCode_dru
➡ Чат в Telegram: t.me/joinchat/FeiP9xEhqHajfqh...
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Поддержать проект:
➡ Patreon / letscodedru
➡ Яндекс.Деньги money.yandex.ru/to/4100145167...
➡ PayPal paypal.me/letscodedru
➡ Qiwi qiwi.me/letscode
➡ WebMoney/BitCoin funding.webmoney.ru/d/drucoder
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
➡ Ссылка на канал: / @letscodedru
➡ Ссылка на Яндекс.Дзен: zen.yandex.ru/media/id/5ac209... - Наука
Ну чёкаво, как лето-то проходит? =)
С джавой в обнимку))
Есть классное предложение на место джава разработчика по стеку оооочень схожему с применеяемым в видеокурсах, но еще надо много чего еще подтянуть. Поэтому лето проходит практически мимо, зато джава заходит на ура благодаря твоим стараниям. Спасибо!
Уже осень)))
Обнови гисты плс, compile в градле уже не совсем актуален
и не помешало бы видеть какие хоткеи ты используешь, в частности окно с переменными из дебагера, так и не нашел как его открыть
P.S. у меня пол установлен, и всё равно он не пришел, может надо что-то дописать конфигах?
Спасибо огромное за ваши видео! Одни из лучших и понятных уроков , что я вообще смотрел.
Привет из лета 2019!)) Лето просто супер)) Спасибо огромное за урок!))
Классная тема!!! Не думал, что вся эта авторизация так легко делается!!)) Осталось только понять как сама лямбда работает....
Андрей, как всегда спасибо за видео!!!
Чётко расписал, зачет, автору респект. Лето проходит хорошо, быдлокоджу более продуктивно)
Не, дружище, быдло кодить не надо, настраивал себя на то, что пишешь хороший код :)
Мотивация и формулировка важны ;)
Спасибо за классные уроки. Лето проходит неплохо, правда на море редко выбираюсь и за работы. А сам как
Тоже работы много, продукт запускаем. Отдыхать зимой буду)
Спасибо большое!)) С праздниками всех!) Мы используем протокол oauth2 для общения между микросервисами и для общения клиент-сервер)
классные видео, голос, информация и количество ее. Почти как сериал смотрится, почти интересно чем закончится)
Привет из лета 2020!) Лето так себе, 2020-ый очень не простой для всего мира:(
вот сидим твои видосики изучем)
И джаву учим)
@@vvbubnov 👍👍👍👍
Невероятно толковые уроки! Большое спасибо !
Спасибо! Отличный и лаконичный материал!
Спасибо) лето быстро проходит
Отличный урок, четко, ясно. Спасибо большое))
Спасибо Дрю ♥♥♥
10/10, посмотрел на одном дыхании
Спасибо огромное тебе за твой труд! Это лучше что есть на русском по спринту!
Спасибо! Круто!
Так как юзаю MySQL, при компиляции выпала ошибка:
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table usr (id varchar(255)...
Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytes
То есть драйвер не пропускает запрос на создание таблицы с внешним ключем в 255 символов. Проблема в дефолтном движке (MyISAM), что использует Hibernate при генерации запроса в базу и который сильно ограничен.
Помогла явная перенастройка на другой движок: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
Коротко, ясно и по делу. Респект автору и лайк.
Продолжай в том же духе. Будем ждать новых интересных проектов.
Спасибо за видосы. Хоть сейчас и не лето да и год другой)
Спасибо за урок. А можешь запилить видос по собственной серверной авторизации, используя JWT? Уроки в сети есть, но обычно их ведут индусы и как там все у них работает не совсем понятно.
Отличные видео!! Спасибо!! Не могли бы Вы сделать видео о подключении двухфакторной авторизации, например, через тот же Гугл? Было бы очень полезно
В файле application.properties переменные accessTokenUri, userAuthorizationUri, userInfoUri, где для них можно найти значения. Хотел подключить авторизацию от Яндекса, но нашёл только значение для userAuthorizationUri.
Вот интересно те кто ставят дизлайки , хоть бы один написал , что ему не понравилось мне аж интересно.
Скажу больше Автор человек отзывчивый , я сказал " ..что на мой взгляд надо отдельно объяснять там где винда и где линуха" ... и теперь Автор одтельно показывает особенности для каждой ОС. Спасибо ему.
А дизлайков-то нету
под этим видео пока нет а в плейлисте под видео есть ... полистайте плейлист посмотрите
думаю дислайки ставят те, кто не может уследить за мыслью автора, потому что если действительно ты не знаком с материалом урока, вот так вот на такой скорости все осознать трудно. Даже когда все вроде понятно, все же должно уложиться в голове.
Я ещё сильно отстаю (только sweater заканчиваю разбирать), но авторизация через Google - вещь крайне современная и полезная!
Было бы также не плохо про LDAP-авторизацию посмотреть - для корпоративных приложений это на много полезнее...
🤔
letsCode
Практически на любом предприятии есть MS Active Directory. Пользователей удобнее и логичнее авторизовать с помощью LDAP.
поддерживаю, интересно про ldap посмотреть
На спринг.ио есть понятный(хз) туториал по лдап-авторизации: spring.io/guides/gs/authenticating-ldap/
при авторизации по /login/google (по гайду на spring.io) PrincipalExtractor не сохраняет пользователя в бд. Возможно связано с EnableOAuth2Client. Кто знает, как пофиксить?
В итоге все запустилось и это круто!!)
Огромное человеческое спасибо. :)
лайк!
Top1 in youtube)
В моём случае при добавлении аннотации @EnableOAuth2Sso приложение напрочь отказывалась запускаться. Говорила что-то вроде: Бин не может быть зарегистрирован....бла, бла, бла. Нашёл такое решение "spring.main.allow-bean-definition-overriding=true" .
Либо можно использовать compile('org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.0.RELEASE'), там эта проблема устранена.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource возникает ошибка если использовать выше вами предложенные решения, не знаете в чем может быть проблема?
@@ivanyuyukin2900 Я уже точно не помню какая была ошибка. Но у меня была решена проблема 2-м способом, до этого был *2.0.0.RELEASE...
2.1.0 не помогло. Помогло 2.1.1 stackoverflow.com/questions/53798458/bean-scopedtarget-oauth2clientcontext-could-not-be-registered-same-bean-name-h
@@user-kd9pp7ly9c мне помогло и 2.1.0
@@redevil4144 благодарю, похоже что в новой версии какие-то проблемы с
@EnableOAuth2Sso
Крутая магия! Рассказано отлично! Не понял ничего...
Пока май, но, надеемся, что лето не как в прошлом году. В security.oauth2.client куча чего стало depricated. В мире все противопоставления black-white, высунув язык от усердия, меняют на allow-depricate или подобное. Да и вообще куча всего, что в 2018 году казалось безумием, случается :)
Если сделать такую авторизацию то только под своим гугл аккаунтом можно зайти или он под другими позволит?
Андрей, приветствую!
Отличные у Вас уроки получаются, большое спасибо.
Но по этому уроку у меня не отрабатывает principalextractor. Просто он игнорируется спрингом. Все аннотации верны, несколько раз все перепроверил. В чем может быть проблема, подскажите, пожалуйста?
Заранее спасибо.
в gradle замените
implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.RELEASE'
на
implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.9.RELEASE'
Мужик! Еще раз попиарил тебя в телеге в группе по spring. Так держать! Что дальше в планах, как твой запал?)
Огромное спасибо!
Запал на месте, со временем немного проблемы, но я прорабатывать этот вопрос.
В планах довести rest до ума, накидать ещё про js интерфейсы и запилить плейлист про реактивный вэб
про реактивный веб было бы интересненько
Дима, подскажи, пожалуйста, что за группа?
А знает кто-нибудь, как отозвать токен из гугла, чтобы про логауте заново заправшивался логин и пароль? буду благодарен за любую инфу
у меня почему то lombok @Data даже просто для getters&setters не работает
Автор в видео с подключением БД упоминал об этом. Рекомендую пересмотреть прошлое видео.
всё супер круто, но я одного не понимаю: зачем на 11:17 использовать конструктор по умолчанию и сетить все поля, если можно из того же ломбока использовать @AllArgsConstructor? Это просто bad/good practice? Заранее благодарю за ответ!
Если я ничего не путаю, то вы не правы. @AllArgsConstructor - спрингу не нужен, это для нас конструктор (если нужно). А спринг сначало создает сущность, потом заполняет сеттерами.
@@skrynfor3947 так я и говорю про "нас". Спрингу нужен только конструктор по умолчанию, но использовать, как мне кажется, намного удобнее конструктор со всеми аргументами.
У меня одного ошибка при создании ключа в Гугле?
Плюсик поставил, но мне кажется что всю эту хренотень с секурити надо давать как-то отдельно. В прошлом проекте была капча, на сегодня API капчи поменялся - старый код не работает. Когда руки дойдут вычитать доки и сделать по-новому не знаю. А хотелось бы чтобы приложение работало, хоть бы и без авторизации.
Пожелание: давать такие вещи отдельно или самым последним уроком.
thx
Вопрос откуда появляются метолды у newUser ?
@Data аннотация lombok. Если не работает в идее, надо подключить плагин lombok
Вопрос
В vuejs мы создали объект для отправки json давая имена через camelCase
Но в моделях java мы даем имена полям underscoreCase (потому что имена колонок принято через _)
Автоматом @RequestBody ищет имена underscoreCase , а c vuejs мы шлем camelCase
Как !правильно! это устаканить??
Может быть в моделях отдельно давать имена для колонок?
Так. Есть 3 соглашения:
camelCase
snake_case
cebab-case (это в лиспе)
В java и js мы используем первый. Второй - только в БД в нашем случае. И это головняк Hibernate. В чем вопрос?
@@letsCodeDru был вопрос,
Просто увидел в видео что в model поле задается через snake_case
И в БД соответственно тоже идет snake_case
И в самой java это поле тоже как не странно snake_case (а в java тоже принято camelCase, значит имя колонки нужно задавать руками)
И @RequestBody в json ищет имена snake_case (потму что они так заданы в model )
Но как я понял нужно задавать в model два имени
Одно для колонки в БД
@Column(name="created_at")
и для самого поля в Java
private Date createdAt;
Тогда все будет ровно
Верно?
может я как то по тупому ставил вопрос
сори
Есть ли аналог аннотации @EnableOauth2Sso, просто в более новой версии помечен как Deprecated
Получилось сделать о другому?
@@caffeinejavacode1475 получилось найти ответ? :D
@@user-ml2et9iw2l не совсем
@@caffeinejavacode1475 я просто сделал версию 2.1.0 и все заработало
@@user-ml2et9iw2l я сделал авторизацию, но не считываю даные юзера.
В след. видео я понял что мне тяжело Vue. т.к не знаю js. забросил этот плейлист. Начал искать уроки по Vue.
Не работает в Spring Boot 2.1.2, при запуске выдает ошибку:
The bean 'scopedTarget.oauth2ClientContext', defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration$SessionScopedConfiguration$ClientContextConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/security/oauth2/config/annotation/web/configuration/OAuth2ClientConfiguration$OAuth2ClientContextConfiguration.class] and overriding is disabled.
Меняю версию на 2.0.5 - все работает. Как исправить?
нашел решение?
Другая проблема - почему то не добавляется пользователь в БД..
There was an unexpected error (type=Unauthorized, status=401).
Unauthorized
У меня тоже, ты не нашел решение?
И в билд.грэйдл где строчка автконфигур - там поставил версию 2.1.0
Как насчет использовать UUID для id-ка?
Не возражаю и не запрещаю))))
можно использовать но не лучшее решение, лучше добавь еще одно поле для всех entity uuid
Уроки Топ! спасибо большое.
Подскажите как исправить ошибку, уже 2 дня ломаю голову, в PrincipalExtractor когда идет получение полей(id,email,gender,locale,picture, выдает ошибку: cannot find symbol method setid(string) и так во всех полях
В классе User надо создать геттеры и сеттеры на все поля. Lombok не работает, по задумке он должен был автоматизировать этот процесс.
Если поставить всё, что связано с Ломбоком выше всех остальных зависимостей, то всё работает
Привет, вот бы все только в облачных библиотеках от netfix в паре с spring cloud
Привет. Вот бы мне дополнительные 20 часов в сутках))
Автор сколько Вам лет?
и сколько Вы в java?
Если кто использует mariDb (я правда не знаю, только у нее такие проблемы с этим или нет). Когда я пытался зарегистрироваться через гугл аккаунт и у меня вылетала ошибка "Сaused by: java.sql.SQLDataException: (conn=534) Incorrect string value: '\xD0\x90\xD0\xBB\xD0\xB5...' for column `resttest`.`usr`.`name` at row 1". Чтобы решить нужно, чтобы имя вашего аккаунта было написано латиницей
Мог бы ты поточнее написать что нужно исправить?)) бьюсь со своей ошибкой полдня, и Charset/Collation менял, все равно "Caused by: java.sql.SQLSyntaxErrorException: (conn=977) Incorrect string value: '\xD0\x92\xD0\xB0\xD1\x81...' for column 'name' at row 1"
Буду очень признателен!
Вот ты говоришь легко, а я 3 дня сидел и пытался сделать, пока не допер, что случайно начал делать не клиент, а свой oauth сервер с блекджеком и багами.
У меня ломбок не захотел работать.
Пришлось создать все геттеры и сеттеры.
Бывает. У меня недавно тоже отваливался, пришлось идею шатать, чтобы плагин увидела
@@letsCodeDru а как идею шатать?
"...Я вот видосики пишу, вот такое лето..." - грусть в голосе, аж жалко стало((
Да чёт подустал я на тот момент) когда лето за окном, тоже хочется за окно, а не вот это все))
@@letsCodeDru Эхх да, иногда хочется куда-то в горы, подальше от людей)) Но на самом деле, твои труды, даже в вот такие деньки, не давали многим страждущим новенького, опускать руки и даваться во все тяжкие, после которых уже и нет сил браться за ум.... в Очередной раз, спасибо тебе!
PS: Пару недель назад, впервые на стрим твой попал. Усы зачетные! по голосу на скринкастах, видел тебя, совсем иначе)
Видел иначе - это как обычно. Та же херня в 100% случаев. Единственный, у кого голос прям соответствует внешности - Барух Садогурский
Эх, Андрей, а кроме яндекс денег как тебе еще можно переслать благодарность? Из украины нет легального доступа к яндексу. Напиши в личку, плиз
Спасибо за желание помочь каналу. Это очень приятно :)
Пока что не собираю денег с подписчиков. Но очень буду признателен за размещение ссылок в социалочках или ещё где-нибудь в интернете. :)
А, это уже (reposts)) Ну хорошо, счастья тебе сейчас и 'во веки веков')!
PrincipalExtractor не работает?
Spring Boot 3 убрал oauth.autoconfiguration, а PrincipalExtractor оттуда. В отличае от остальных миграционных моментов, которые я разрешил довольно просто, тут пока не нахожу удобоваримой информации , ну, для моего уровня знаний по крайней мере. Начало было хорошим, но от видео к видео все свалилось к "Делай как я и будет тебе счастье " . Это не обучение - а , скажем так, ДОРОЖНАЯ карта, а дальше - гуглить по ключевым словам)
Привет из нелёгкого 2020, кто сталкивался с такой проблемой как у меня? Описываю: локально логинизация через фейсбук и гугл пашет без проблем, сама прила и хост зарегистрирован правильно, но на проде при регистрации с реального домена спринг выкидывает такой эксцепшен "org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.", помогите спасите умоляю!?!?!?!?!?
часть ответа нашёл, что бы это работало на энвайрменте надо сделать конфигурацию WebSecurity, примерно вот так web.httpFirewall(defaultHttpFirewall()); но пока полностью проблема не решена
У ломбока же билдер есть.
Заморочек с ним по начало много. Но я настроил, и довольно интересное решение, симпатично смотрится.
А у вас как выглядит
@Bean
public PrincipalExtractor principalExtractor
Сможете скинуть?
Короче, нашел способ заменить PrincipalExtractor на момент 29.01.2021(Нет, я не сидел над этим 20 дней, но меня мучило эти 20 дней, что я выбрал неподходящий способ с successHandler). Не хочу засорять гитхаб, поэтому просто распишу это тут.
Сначала о том, почему неподходящий: с PrincipalExtractor мы по сути ставили своего Authentication Principal'а, а с successHandler мы просто сохраняем его один разок при успешном входе.
К теме:
Мы используем openid, поэтому нам, как я писал уже раньше, понадобится OidcUserService, но дополнительно нам нужно отредактировать своего пользователя. Вообще это, мне кажется, костыль, и можно сделать свой UserDetails, но так впадлу...
Короче, наследуем нашего юзера от OidcUser, добавляем там необходимые интерфейсу поля, помечаем их @Transient, потому что в бд они нам не нужны.
Дальше похожим способом делаем свой класс сервиса (например SarafanOidcUserService), наследуем его от OidcUserService, переопределяем метод loadUser, в нем получаем пользователя из *супер метода*, т.е OidcUser u = super.loadUser(userRequest), берем из него атрибуты через метод getAttributes(), и создаем уже нашего пользователя из атрибутов полученного. Названия полей в атрибутах такие же, как и в примере дрю. Дальше переносим из полученного от супер метода пользователя необходимые нам поля в нашего созданного пользователя, т.е attributes, authorities, claims и подобные, и уже нашего созданного пользователя мы возвращаем из метода loadUser (Не забудьте про сохранение).
И последний штрих, в конфиг инжектим наш сервис(@Autowired) и добавляем к нашему вызову метода oauth2Login (Теперь мы вызываем его так, т.к в новой Spring Security @EnableOauth2Sso стало deprecated) в скобках следующую лямбда-функцию:
userInfo -> userInfo.userInfoEndpoint().oidcUserService(SarafanOidcUserService)
Итог: Теперь при использовании аннотации @AuthenticationPrincipal мы можем получать нашего пользователя, вебсокет(через несколько видео) будет работать с нашим пользователем (при successHandler он выводил поле sub, теперь будет выводить имя пользователя).
Пришлось подправить классы:
1) WebSecurityConfig
2) User
Пришлось добавить классы:
1) SarafanOidcUserService
одна строчка - implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.9.RELEASE' ,но за старанье все ровно молодец!
@@mirnijalexey2765 ааххаха, ну я мог бы и догадаться, что нужно просто зависимость подкрутить. Спасибо :)
@@kajmankaiman4896 на работу устроился?)
@@mirnijalexey2765 Не, диплом вот делаю, а потом уже на работу)
@@kajmankaiman4896 Красавчик, удачи!
@Data не работает - пришлось гетеры давать - кто решил проблему?
В IDEA поставил галочку File-Settings-Build, Execution, Deployment-Compiler-Annotation Processors-Enable Annotation Processing и установил плагин Lombok для идеи.
@@user-wj7if5xq6l спасибо, а плагин тоже через Settings ставиться?
@@user-qy7yv1ut4c да, в разделе Plugins
@@user-wj7if5xq6l ничего не изменилось после этих действий
сранный ломбок с 11-ой джавой не хочет работать -_-
пришлось генерить геттеры и сеттеры.
надеюсь, что пофиксят.
У меня он отличное работает на 11, но только с мавеном, а с грэдлом постоянно отваливается.
Почитал комменты - добавил annotationProcessor 'org.projectlombok:lombok' в build.gradle - заработало
Мне этот урок дался очень тяжело, по сравнению с остальными
В 2023г всё это больше не работает...
Кстати, Гугл переделал меню на том сайте, где ключи создаются. Я полчаса тупил над ним, пока создал ключ
Я конечно рад за тебя, но мне было бы интересно узнать как ты его создал?
Уже не нужно) Нашел, тоже примерно пол часа потратил))
@@user-lw3fi2xi1t замечательно)) я просто не у компа был. А с телефона искать так себе
Спасибо гении, что для всех остальных ответили. В духе "отписал в личку" и "решил сам, всем спасибо". Так вот, ребят, кто не нашёл, инструкция следующая. После создания ключа вас перебрасывает на окно с названием "Окно запроса доступа OAuth". Там после сохранения данных, как в видео, жмёте слева "Учетные данные". Там сверху выбираете снова "СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ". В нём снова "Идентификатор клиента OAuth". И там уже можно выбирать, как на видео.
@@user-hd3rr7nc7b спасибо добрый человек) а то я уже собрался g suite подключать)))
Посмотрел видео поставь ЛАЙК. Инфа бесплатная и годная лайк ставить не трудно. Поддержи Автора канала.
Сделал как в видео. Открываю страничку для авторизации - 'org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.'
Пробовал spring-security-oauth2-autoconfigure версий 2.1.0.RELEASE, 2.1.1.RELEASE, 2.1.2.RELEASE и 2.1.8.RELEASE
Мне кажется при настройке приложения в консоли гугла, ты указал неправильные ссылки
что то в голос с 4 гендеров от гугла :D
У кого то их около 50. Прошли времена, когда пол был булином
In December 2018, we announced our decision to shut down Google+ for consumers in April 2019 due to low usage and challenges involved in maintaining a successful product that meets consumers' expectations.
Наверно придется переделовать видос...
С авторизацией это не связано, все ок
letsCode надеюсь FB или VK oAuth тоже так цепляются. Попробую
The bean 'scopedTarget.oauth2ClientContext', defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration$SessionScopedConfiguration$ClientContextConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/security/oauth2/config/annotation/web/configuration/OAuth2ClientConfiguration$OAuth2ClientContextConfiguration.class] and overriding is disabled.
кто словил?
Мне помогло указать другую версию для зависимости spring-security-oauth2-autoconfigure. Попробуй поставить 2.1.0.RELEASE
@@godzilla65536 Спасибо, помогло
Кто знает, как пофиксить?
console:
Cross-Origin Read Blocking (CORB) blocked cross-origin response accounts.google.com/o/oauth2/v2/auth?client_id=426843391767-pemhtu4shq0stv5ghq6auogsoetm8aiu.apps.googleusercontent.com&redirect_uri=localhost:8080/login&response_type=code&scope=openid%20email%20profile&state=RZlSFj with MIME type text/html. See www.chromestatus.com/feature/5629709824032768 for more details.
Дуратский lombok, последний раз этой шляпой пользовался
Толерастный google...
🤔
Всем привет!
кому-то удалось решить эту проблему с oAuth ?
org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!