{"id":22064352,"url":"https://github.com/siwony/sb-google-oauth2-example","last_synced_at":"2025-02-28T05:19:57.832Z","repository":{"id":265635121,"uuid":"352833450","full_name":"siwony/SB-google-oauth2-example","owner":"siwony","description":"Spring Boot Oauth2 google authentication/authorization with session","archived":false,"fork":false,"pushed_at":"2022-03-17T01:54:22.000Z","size":82,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-11T01:23:52.976Z","etag":null,"topics":["java11","redis","session-cookie","spring-boot","spring-security-oauth2"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/siwony.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-30T01:27:15.000Z","updated_at":"2023-04-09T09:58:38.000Z","dependencies_parsed_at":"2024-11-30T15:50:54.534Z","dependency_job_id":null,"html_url":"https://github.com/siwony/SB-google-oauth2-example","commit_stats":null,"previous_names":["siwony/sb-google-oauth2-example"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siwony%2FSB-google-oauth2-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siwony%2FSB-google-oauth2-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siwony%2FSB-google-oauth2-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siwony%2FSB-google-oauth2-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/siwony","download_url":"https://codeload.github.com/siwony/SB-google-oauth2-example/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241104502,"owners_count":19910454,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java11","redis","session-cookie","spring-boot","spring-security-oauth2"],"created_at":"2024-11-30T19:08:58.762Z","updated_at":"2025-02-28T05:19:57.813Z","avatar_url":"https://github.com/siwony.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SB OAuth2 Google Example with redis\n\nSpring Boot OAuth2를 이용한 Google 로그인 + redis session storage 에제\n\n### 주요 프로젝트 구조\n```tree\n/src/main/java/me/siwony/sbaouth2google\n├── SbOauth2GoogleApplication.java // application 진입점\n├── domain\n│   ├── auth\n│   │   ├── dto\n│   │   │   ├── OAuthAttributes.java // OAuth 속성을 가지고 있는 DTO\n│   │   │   └── SessionMember.java // 로그인 된 사용자의 정보를 세션에 저장할 DTO\n│   │   └── service\n│   │       ├── AuthService.java\n│   │       └── CustomOAuth2UserService.java // OAuth 구현체\n│   └── member\n│       ├── controller\n│       │   └── MemberController.java\n│       ├── entity\n│       │   ├── Member.java\n│       │   └── MemberRepository.java\n│       └── service\n│           └── MemberService.java\n└── global\n    └── security\n        └── SecurityConfig.java\n        \n/src/main/resources\n├── application.yml\n└── application-google-oauth.yml\n```\n\n#### application-google-oauth.yml\ngoogle oauth 인증에 필요한 정보들을 담고있는 에플리케이션 구성 파일입니다.\n\n```yml\nspring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: GCP에서 발급받은 client-id\n            client-secret: client-secret\n            scope:\n              - profile\n              - email\n```\nclient-id와 client-secret은 \n\u003e GCP 콘솔 \u0026rarr; 대시보드 \u0026rarr; API 및 서비스 \u0026rarr; 사용자 인증 정보 \n \n에서 확인할 수 있다.\n### 주요 의존성\n- spring boot starter web\n- spring boot data jpa\n- spring boot starter security\n- spring boot starter oauth2 client\n- spring boot starter data redis\n- spring session data redis\n\n#### 주의사항\n`spring session data redis`의존성 사용시 `spring boot starter data redis`의존성이 반드시 필요합니다.  \n없다면 Spring Boot Application 시작 시점에 `org.springframework.boot.autoconfigure.session.SessionRepositoryUnavailableException`이 발생하여 결과적으로\n`org.springframework.beans.factory.BeanCreationException`이 발생하며 종료됩니다.\n\n```log\norg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.session.SessionAutoConfiguration$ServletSessionRepositoryValidator': Invocation of init method failed; nested exception is org.springframework.boot.autoconfigure.session.SessionRepositoryUnavailableException: No session repository could be auto-configured, check your configuration (session store type is 'redis')\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.16.jar:5.3.16]\n\tat org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.16.jar:5.3.16]\n\tat org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.4.jar:2.6.4]\n\tat org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) ~[spring-boot-2.6.4.jar:2.6.4]\n\tat org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) ~[spring-boot-2.6.4.jar:2.6.4]\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-2.6.4.jar:2.6.4]\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.4.jar:2.6.4]\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.4.jar:2.6.4]\n\tat me.siwony.sboauth2google.SbOauth2GoogleApplication.main(SbOauth2GoogleApplication.java:10) ~[main/:na]\nCaused by: org.springframework.boot.autoconfigure.session.SessionRepositoryUnavailableException: No session repository could be auto-configured, check your configuration (session store type is 'redis')\n\tat org.springframework.boot.autoconfigure.session.SessionAutoConfiguration$AbstractSessionRepositoryValidator.afterPropertiesSet(SessionAutoConfiguration.java:315) ~[spring-boot-autoconfigure-2.6.4.jar:2.6.4]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.16.jar:5.3.16]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.16.jar:5.3.16]\n\t... 16 common frames omitted\n```\n\n### Reference\n- https://velog.io/@swchoi0329/스프링-시큐리티와-OAuth-2.0으로-로그인-기능-구현\n- https://github.com/spring-projects/spring-session/issues/853\n- https://docs.spring.io/spring-session/reference/guides/boot-redis.html\n- https://docs.spring.io/spring-boot/docs/2.5.6/reference/htmlsingle/#features.spring-session","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiwony%2Fsb-google-oauth2-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiwony%2Fsb-google-oauth2-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiwony%2Fsb-google-oauth2-example/lists"}