Spring Boot-Google OAuth2 로그인
이 장에서는 Gradle 빌드와 함께 Spring Boot 애플리케이션을 사용하여 Google OAuth2 로그인을 추가하는 방법을 살펴 보겠습니다.
먼저 빌드 구성 파일에 Spring Boot OAuth2 보안 종속성을 추가하면 빌드 구성 파일이 아래에 제공됩니다.
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
group = 'com.tutorialspoint.projects'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
compile('org.springframework.security.oauth:spring-security-oauth2')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
이제 아래와 같이 기본 Spring Boot 애플리케이션 클래스 파일에서 Spring Boot를 통해 인증 한 후 Google에서 사용자 프린시 펄을 읽을 HTTP Endpoint를 추가하십시오.
package com.tutorialspoint.projects.googleservice;
import java.security.Principal;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class GoogleserviceApplication {
public static void main(String[] args) {
SpringApplication.run(GoogleserviceApplication.class, args);
}
@RequestMapping(value = "/user")
public Principal user(Principal principal) {
return principal;
}
}
이제 웹 보안을 위해 OAuth2SSO를 활성화하고 index.html 파일에 대한 인증을 제거하는 구성 파일을 작성하십시오.
package com.tutorialspoint.projects.googleservice;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableOAuth2Sso
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/index.html")
.permitAll()
.anyRequest()
.authenticated();
}
}
다음으로, 정적 리소스 아래에 index.html 파일을 추가하고 아래와 같이 Google 사용자 주체를 읽기 위해 사용자 HTTP 엔드 포인트로 리디렉션 할 링크를 추가합니다.
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href = "user">Click here to Google Login</a>
</body>
</html>
Note − Google Cloud 콘솔에서-Gmail 서비스, 분석 서비스 및 Google+ 서비스 API를 활성화합니다.
그런 다음 자격 증명 섹션으로 이동하여 자격 증명을 만들고 OAuth 클라이언트 ID를 선택합니다.
다음으로 OAuth2 동의 화면에 제품 이름을 제공합니다.
다음으로 애플리케이션 유형을 "웹 애플리케이션"으로 선택하고 승인 된 JavaScript 원본 및 승인 된 리디렉션 URI를 제공합니다.
이제 OAuth2 클라이언트 ID 및 클라이언트 시크릿이 생성됩니다.
다음으로 애플리케이션 속성 파일에 클라이언트 ID와 클라이언트 시크릿을 추가합니다.
security.oauth2.client.clientId = <CLIENT_ID>
security.oauth2.client.clientSecret = <CLIENT_SECRET>
security.oauth2.client.accessTokenUri = https://www.googleapis.com/oauth2/v3/token
security.oauth2.client.userAuthorizationUri = https://accounts.google.com/o/oauth2/auth
security.oauth2.client.tokenName = oauth_token
security.oauth2.client.authenticationScheme = query
security.oauth2.client.clientAuthenticationScheme = form
security.oauth2.client.scope = profile email
security.oauth2.resource.userInfoUri = https://www.googleapis.com/userinfo/v2/me
security.oauth2.resource.preferTokenInfo = false
이제 실행 가능한 JAR 파일을 만들고 다음 Gradle 명령을 사용하여 Spring Boot 애플리케이션을 실행할 수 있습니다.
Gradle의 경우 다음과 같이 명령을 사용할 수 있습니다.
gradle clean build
“BUILD SUCCESSFUL”후에 build / libs 디렉토리에서 JAR 파일을 찾을 수 있습니다.
java –jar <JARFILE> 명령을 사용하여 JAR 파일을 실행하면 Tomcat 포트 8080에서 애플리케이션이 시작됩니다.
이제 URL을 누르십시오. http://localhost:8080/ Google 로그인 링크를 클릭하십시오.
Google 로그인 화면으로 리디렉션되고 Gmail 로그인 세부 정보가 제공됩니다.
로그인이 성공하면 Gmail 사용자의 Principal 개체를 받게됩니다.