6. 로그인 기능 구현하기
구글/카카오/네이버 계정 사용해서 로그인하기 기능을 사용해보신 적이 있나요?
소셜 로그인은 우리가 처음 접하는 사이트에서 id와 password를 만들지 않고도 서비스를 사용할 수 있도록 돕습니다.
또한 개발자들을 api 구현의 고통에서 벗어나게 해주죠!
OAuth 로그인을 사용하면 개발자들은 아래와 같은 기능을 신경쓰지 않고 서비스 개발에만 집중할 수 있습니다.
* 로그인 시 보안
* 회원가입 시 이메일 혹은 전화번호 인증
* 비밀번호 찾기
* 비밀번호 변경
* 회원정보 변경
6.1. Spring Security
Spiring Sequrity는 스프링 기반 어플리케이션의 보안을 담당하는 프레임워크입니다.
보안과 관련된 다양한 옵션을 지원하고 java bean 설정만으로도 간단하게 사용할 수 있습니다.
본 섹션에서는 Spring Sequrity가 무엇이고 어떻게 동작하는지 보다도, OAuth에 사용된다는 점만 알고 넘어가려 합니다.
6.2. Google Login
구글 로그인을 제 SpringBoot 프로젝트와 연동시키기 위해 구글 클라우드 플랫폼에서 신규 서비스 정보를 만들었습니다. application-oauth.properties에 여기서 생성한 client id와 보안 코드를 붙여넣습니다.
spring.security.oauth2.client.registration.google.client-id="제 클라이언트 id"
spring.security.oauth2.client.registration.google.client-secret="제 클라이언트 secret"
spring.security.oauth2.client.registration.google.scope = profile, email
잊지말고 .gitignore에도 등록해주어야 합니다!
구글 로그인을 연동하기 위해 다음 과정을 거쳤습니다.
1. domain/user에 User 패키지를 생성합니다.
@Getter
@NoArgsConstructor
@Entity
public class User extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
@Column
private String picture;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private Role role;
@Builder
public User(String name, String email, String picture, Role role) {
this.name = name;
this.email = email;
this.picture = picture;
this.role = role;
}
public User update(String name, String picture) {
this.name = name;
this.picture = picture;
return this;
}
public String getRoleKey() {
return this.role.getKey();
}
}
2. 각 사용자의 권한을 관리할 Enum 클래스 Role.java을 생성합니다.
@Getter
@RequiredArgsConstructor
public enum Role {
GUEST("ROLE_GUEST", "손님"),
USER("ROLE_USER", "일반 사용자");
private final String key;
private final String title;
}
3. USER의 CRUD를 다루기 위해 UserRepository.java를 생성합니다.
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
스프링 시큐리티를 설정하기 위해 다음 과정을 거쳤습니다.
1. build.gradle에 스프링 시큐리티 의존성을 추가합니다.
compile('org.springframework.boot:spring-boot-starter-oauth2-client')
2. config/auth 패키지를 생성해 관련 파일을 작성합니다.
* config/auth/SecurityConfig.java
* config/auth/CustomOAuth2UserService.java
* config/auth/OAuthAttributes.java
* config/auth/dto/SessionUser.java
references
* 스프링 부트와 aws로 혼자 구현하는 웹 서비스 - 이동욱님 (👍)
'Web Application > Backend' 카테고리의 다른 글
[백엔드 시작하기] 8. 클라우드 서버에 데이터베이스 만들기 (0) | 2021.05.12 |
---|---|
[백엔드 시작하기] 7. 클라우드 서버에 배포하기 (0) | 2021.05.12 |
[백엔드 시작하기] 5. 게시판 만들기 (0) | 2021.05.12 |
[백엔드 시작하기] 4. Template Engine (0) | 2021.05.12 |
[백엔드 시작하기] 3. Java Persistence Api (0) | 2021.05.12 |