diff --git a/discord/README.MD b/discord/README.MD index 2a25d16..d29aa06 100644 --- a/discord/README.MD +++ b/discord/README.MD @@ -1,6 +1,6 @@ # Spring Boot + OAuth2 Discord -Spring Boot +Spring Boot Discord ## Перед запуском diff --git a/discord/docs/spring-boot.svg b/docs/spring-boot.svg similarity index 88% rename from discord/docs/spring-boot.svg rename to docs/spring-boot.svg index c320439..3629f45 100644 --- a/discord/docs/spring-boot.svg +++ b/docs/spring-boot.svg @@ -1,10 +1,12 @@ - - + + diff --git a/github/README.MD b/github/README.MD new file mode 100644 index 0000000..08233ad --- /dev/null +++ b/github/README.MD @@ -0,0 +1,33 @@ +# Spring Boot + OAuth2 GitHub + +Spring Boot +Discord + +## Перед запуском +### Создание OAuth App +Для запуска понадобиться обзавестить своим **GitHub OAuth App**. + +1. Переходим в [Developer settings](https://github.com/settings/developers) +2. Создём новое OAuth приложение + ![](docs/1.png) +3. Заполняем обязательно следующие поля + - **Homepage URL**: `http://127.0.0.1:8080` + - **Authorization callback URL**: `http://127.0.0.1:8080/login/oauth2/code/github` + ![](docs/2.png) +4. Сгенерировать новый **Client secrets** + ![](docs/3.png) + ![](docs/4.png) + +### Настройка Spring +Открываем файл `src/main/resources/application.yml` и указываем там **Client ID** и **Client secrets**: + +```yaml +spring: + security: + oauth2: + client: + registration: + github: + client-id: f9bbf16cc3a93663282f + client-secret: 16f203668e25bfe44513d2a7b4925d62bb100783 +``` diff --git a/github/build.gradle b/github/build.gradle new file mode 100644 index 0000000..af22e3b --- /dev/null +++ b/github/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'org.springframework.boot' version '2.6.6' + id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'java' +} + +group = 'example.oauth2' +version = '1.0-SNAPSHOT' +sourceCompatibility = JavaVersion.VERSION_11 + +repositories { + mavenCentral() +} + +dependencies { + implementation('org.springframework.boot:spring-boot-starter-web') + implementation('org.springframework.boot:spring-boot-starter-thymeleaf') + + implementation('org.springframework.boot:spring-boot-starter-security') + implementation('org.springframework.security:spring-security-oauth2-client') +} diff --git a/github/docs/1.png b/github/docs/1.png new file mode 100644 index 0000000..8c5273e Binary files /dev/null and b/github/docs/1.png differ diff --git a/github/docs/2.png b/github/docs/2.png new file mode 100644 index 0000000..a24282e Binary files /dev/null and b/github/docs/2.png differ diff --git a/github/docs/3.png b/github/docs/3.png new file mode 100644 index 0000000..65b3ea4 Binary files /dev/null and b/github/docs/3.png differ diff --git a/github/docs/4.png b/github/docs/4.png new file mode 100644 index 0000000..9fcbc85 Binary files /dev/null and b/github/docs/4.png differ diff --git a/github/docs/github-white.svg b/github/docs/github-white.svg new file mode 100644 index 0000000..770e017 --- /dev/null +++ b/github/docs/github-white.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/github/src/main/java/example/oauth2/github/ApplicationGithub.java b/github/src/main/java/example/oauth2/github/ApplicationGithub.java new file mode 100644 index 0000000..149f92d --- /dev/null +++ b/github/src/main/java/example/oauth2/github/ApplicationGithub.java @@ -0,0 +1,13 @@ +package example.oauth2.github; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ApplicationGithub { + + public static void main(String[] args) { + SpringApplication.run(ApplicationGithub.class, args); + } + +} diff --git a/github/src/main/java/example/oauth2/github/config/MvcConfig.java b/github/src/main/java/example/oauth2/github/config/MvcConfig.java new file mode 100644 index 0000000..cfe85a1 --- /dev/null +++ b/github/src/main/java/example/oauth2/github/config/MvcConfig.java @@ -0,0 +1,15 @@ +package example.oauth2.github.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class MvcConfig implements WebMvcConfigurer { + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("index"); + registry.addViewController("/secret").setViewName("secret"); + } +} diff --git a/github/src/main/java/example/oauth2/github/config/WebSecurityConfig.java b/github/src/main/java/example/oauth2/github/config/WebSecurityConfig.java new file mode 100644 index 0000000..0bb999c --- /dev/null +++ b/github/src/main/java/example/oauth2/github/config/WebSecurityConfig.java @@ -0,0 +1,24 @@ +package example.oauth2.github.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@EnableWebSecurity +@Configuration +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + //@formatter:off + http + .authorizeRequests() + .antMatchers("/").permitAll() //Доступ разрешен всем пользователей + .anyRequest().authenticated() //Все остальные страницы требуют аутентификации + .and() + .oauth2Login() + ; + //@formatter:on + } +} diff --git a/github/src/main/resources/application.yml b/github/src/main/resources/application.yml new file mode 100644 index 0000000..eb53ee4 --- /dev/null +++ b/github/src/main/resources/application.yml @@ -0,0 +1,14 @@ +server: + address: 127.0.0.1 + port: 8080 + +debug: false + +spring: + security: + oauth2: + client: + registration: + github: + client-id: f9bbf16cc3a93663282f + client-secret: 16f203668e25bfe44513d2a7b4925d62bb100783 diff --git a/github/src/main/resources/templates/index.html b/github/src/main/resources/templates/index.html new file mode 100644 index 0000000..73f5702 --- /dev/null +++ b/github/src/main/resources/templates/index.html @@ -0,0 +1,18 @@ + + + + GitHub OAuth2 Example + + + +

GitHub OAuth2 Example

+
+

+ Home public page
+ ---> Secret Page <---
+ [ Login GitHub ] +

+ + diff --git a/github/src/main/resources/templates/secret.html b/github/src/main/resources/templates/secret.html new file mode 100644 index 0000000..b5f1ba8 --- /dev/null +++ b/github/src/main/resources/templates/secret.html @@ -0,0 +1,12 @@ + + + + GitHub OAuth2 Example + + + +

GitHub OAuth2 Example

+
+

[TOP SECRET PAGE]

+ + diff --git a/settings.gradle b/settings.gradle index f2479e2..4c71bac 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,4 @@ rootProject.name = 'spring-oauth2-examples' include('discord') +include('github')