[스프링 시큐리티 OAuth] 구글 OAuth 로그인을 위한 설정해주기

코린이서현이·2024년 6월 9일
0
post-thumbnail

들어가면서..

관심없는 주제는 안해서 졸리도 않고, 딴짓만 하고 싶은데 집중하는 강의는 미친 듯이 잠이 오네? 

OAuth 해보자..?

구글 cloud에 프로젝트 등록하기

프로젝트의 구글 OAuth 활성화 해주기 - OAuth 동의 화면 설정

프로젝트의 구글 OAuth 활성화 해주기 - 사용자 인증 정보

프로젝트의 구글 OAuth 활성화 해주기 - 승인된 리디렉션 URL

생성하고 나면?!

⭐ 이 리디렉션 URL은 뭐하는 걸까

  • 구글 api랑 여러번 정보를 주고 받을 텐데, 여기다 보내주세요~ 하고 설정하는 것!

의존성 추가

  • OAuth 2
<!-- https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2 -->
<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.4.2.RELEASE</version>
</dependency>
  • OAuth 2 client
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-oauth2-client -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-client</artifactId>
    <version>6.2.4</version>
</dependency>

신기한 거 설정?

security:
  oauth2:
    client:
      registration:
        google:
          client-id: 760459109498-p7r85c6qbscblul8s2uppsn0e비밀이다.
          client-sercret: GOCSPX-H이것도 비밀이다.
          sccope:
          - email
          - profile

구글로그인 버튼을 만들자 (구글에게 요청보내기 )

  • loginForm 수정
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>로그인 페이지</title>
</head>
<body>
<h1>로그인 페이지</h1>

<form action="/security/login" method="POST">
  <input type="text" name="username" placeholder="username"/> <br>
  <input type="text" name="password" placeholder="password"/> <br>
  <button>로그인</button>

</form>
<a href="/oauth2/authorization/google">구글로그인</a>
<a href="/security/joinForm">회원가입 바로 하러가기</a>
</body>
</html>

config 설정하기...

왜 개발자들이 영어를 잘 해야하는지 알겠어요..ㅜ
    @Bean
    SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf(csrf -> csrf.disable())
                .authorizeRequests((authorizeRequests) -> authorizeRequests
                                .requestMatchers("/user/**").authenticated()
                                .requestMatchers("/admin/**").hasRole("ADMIN")
                                .requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANGER"))
                .formLogin(formLogin -> formLogin
                        .loginPage("/loginForm") //-> 사용자 정의 로그인 페이지
                        .loginProcessingUrl("/login") //이 주소가 호출 되면 시큐리티가 낚아채서 로그인 ㄱㄱ
                        .defaultSuccessUrl("/")) // -> 로그인 성공 후 이동 페이지
                //여기부터 =============================
                .oauth2Login(oauth2Login -> oauth2Login
                        .loginPage("/loginForm")
                        .defaultSuccessUrl("/")
                        .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint
                                .userService(null)));
                                
                               
				//여기까지 추가 수정=============================
        return http.build();

    }

중간 실행해볼까요?

^__^ 오류터지기 설렌다. 사실 당연한거임.. 위에 nulll을 줬으니까... 하지만 내가 할 수 있는 건 또 별개의 문제...

그러면 우리는 요 userservice에 넣을 무언가를 만들어야겠지요??

마무리하면서 + 다음 계획

위에서 userservice에 넣을 구현체가 필요하다고 했는데 어떤 타입의 구현체가 필요한걸까?

public 
반환값 -> ~~~ UserInfoEndpointConfig 
        
 메서드 이름 -> userService
 파라미터 값,,, ->  	
 		(org.springframework.security.oauth2.client.userinfo.OAuth2UserService
 		<org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest,
			org.springframework.security.oauth2.core.user.OAuth2User> 
 		userService) {
        
 /* compiled code */ 
 
 }

이게 무슨일이죠...?
보기 힘들지만 그래도 다시 잘 보면 OAuth2UserService<OAuth2UserRequest,OAuth2User> 인 것을 확인할 수 있다.

그러니까 다음 글에서는 이 타입의 userservice를 만들자고요~!

호호 기대감 증폭이요`1 
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글