From 8fcdcdb4884e6556f3c564a870f49befcd12a669 Mon Sep 17 00:00:00 2001 From: lcarlyl Date: Thu, 21 Apr 2022 19:41:11 +0300 Subject: [PATCH] add gitlab oauth2 --- gitlab/README.MD | 33 +++++++++ gitlab/docs/1.png | Bin 0 -> 11649 bytes gitlab/docs/2.png | Bin 0 -> 32989 bytes gitlab/docs/3.png | Bin 0 -> 10928 bytes gitlab/docs/gitlab.svg | 69 ++++++++++++++++++ .../gitlab/config/GitLabOAuth2Config.java | 2 + gitlab/src/main/resources/application.yml | 6 +- .../resources/templates/includes/header.ftlh | 4 +- 8 files changed, 109 insertions(+), 5 deletions(-) create mode 100644 gitlab/README.MD create mode 100644 gitlab/docs/1.png create mode 100644 gitlab/docs/2.png create mode 100644 gitlab/docs/3.png create mode 100644 gitlab/docs/gitlab.svg diff --git a/gitlab/README.MD b/gitlab/README.MD new file mode 100644 index 0000000..72270b7 --- /dev/null +++ b/gitlab/README.MD @@ -0,0 +1,33 @@ +# Spring Boot + OAuth2 GitHub + +Spring Boot +GitLab + +## Перед запуском +### Создание OAuth Application +Для запуска понадобиться обзавестить своим **GitLab**. + +1. Переходим в [Applications](https://gitlab.com/-/profile/applications) + +![](docs/1.png) +2. Заполняем обязательно следующие поля +- **Name**: `MY_OAUTH2-APP` +- **Redirect URI**: `http://127.0.0.1:8080/login/oauth2/code/gitlab` +- **Scopes**: `read_user` +![](docs/2.png) +3. Получаем **Client secret/Client ID** +![](docs/3.png) + +### Настройка Spring +Открываем файл `src/main/resources/application.yml` и указываем там **Client ID** и **Client secrets**: + +```yaml +spring: + security: + oauth2: + client: + registration: + gitlab: + client-id: 0781ee8ca191018d2b60eb68b1a0b2af5c4765fbbf51cd297c95fa59b9ff99ae + client-secret: ef19ea39b87f3be6532108d455ae7f962c1e77132b82fa1a7a4f6f93470534de +``` diff --git a/gitlab/docs/1.png b/gitlab/docs/1.png new file mode 100644 index 0000000000000000000000000000000000000000..86505320e19ba04302ea20e117aab31d83feab72 GIT binary patch literal 11649 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 S9=KY4LRIn6!+iOtul@(mf}64c literal 0 HcmV?d00001 diff --git a/gitlab/docs/2.png b/gitlab/docs/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9592838b11f51e24483435630bdf271382708452 GIT binary patch literal 32989 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 literal 0 HcmV?d00001 diff --git a/gitlab/docs/3.png b/gitlab/docs/3.png new file mode 100644 index 0000000000000000000000000000000000000000..19260c5dadf5cc773ee01c7f999cea25d3522128 GIT binary patch literal 10928 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 J${v`!{STGo=YaqK literal 0 HcmV?d00001 diff --git a/gitlab/docs/gitlab.svg b/gitlab/docs/gitlab.svg new file mode 100644 index 0000000..edb193b --- /dev/null +++ b/gitlab/docs/gitlab.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + 1x + + + 1x + + + 1x + + + + 1x + + + diff --git a/gitlab/src/main/java/example/oauth2/gitlab/config/GitLabOAuth2Config.java b/gitlab/src/main/java/example/oauth2/gitlab/config/GitLabOAuth2Config.java index 36408ec..4e63ffa 100644 --- a/gitlab/src/main/java/example/oauth2/gitlab/config/GitLabOAuth2Config.java +++ b/gitlab/src/main/java/example/oauth2/gitlab/config/GitLabOAuth2Config.java @@ -9,7 +9,9 @@ import org.springframework.security.oauth2.client.registration.ClientRegistratio import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository; import org.springframework.security.oauth2.core.AuthorizationGrantType; import org.springframework.security.oauth2.core.ClientAuthenticationMethod; +import org.springframework.stereotype.Component; +@Component public class GitLabOAuth2Config { private static final String GITLAB_CLIENT_PROPERTY_KEY = "spring.security.oauth2.client.registration.gitlab"; diff --git a/gitlab/src/main/resources/application.yml b/gitlab/src/main/resources/application.yml index bbb0e33..e53b689 100644 --- a/gitlab/src/main/resources/application.yml +++ b/gitlab/src/main/resources/application.yml @@ -2,7 +2,7 @@ server: address: 127.0.0.1 port: 8080 -debug: true +debug: false spring: freemarker: @@ -13,5 +13,5 @@ spring: client: registration: gitlab: - client-id: 8b22a9eaee0936a6dc369e3e101c675fde7663962973cdc51e3fc67883888ea4 - client-secret: 6d38287ff1c7d4d2e2a19041c52eef3d128ca050ee9a55668870d66edee9167a + client-id: 0781ee8ca191018d2b60eb68b1a0b2af5c4765fbbf51cd297c95fa59b9ff99ae + client-secret: ef19ea39b87f3be6532108d455ae7f962c1e77132b82fa1a7a4f6f93470534de diff --git a/gitlab/src/main/resources/templates/includes/header.ftlh b/gitlab/src/main/resources/templates/includes/header.ftlh index ec65274..55801ae 100644 --- a/gitlab/src/main/resources/templates/includes/header.ftlh +++ b/gitlab/src/main/resources/templates/includes/header.ftlh @@ -1,9 +1,9 @@ - GitHub OAuth2 Example + GitLab OAuth2 Example -

GitHub OAuth2 Example

+

GitLab OAuth2 Example