1 λΆ„ μ†Œμš”

1. 파일 ꡬ성

  1. 각 OAuth2 μ„œλΉ„μŠ€ μ œκ³΅μžλ“€μ˜ 연동을 톡해 인증 및 인가 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  곡톡항λͺ©μ€ μΆ”μƒν™”ν•œλ‹€
  2. OpenID Connect Provider λ₯Ό μ§€μ›ν•˜λŠ” μ„œλ²„μ™€ μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ„œλ²„μ— λŒ€ν•˜μ—¬ μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°μ˜ 연동 처리λ₯Ό μœ„ν•œ 내뢀원리λ₯Ό μ΄ν•΄ν•œλ‹€
  3. OAuth2UserService λ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•˜μ—¬ 인증 이후 νšŒμ›κ°€μž… 처리λ₯Ό μœ„ν•œ λΆ€κ°€ μ„œλΉ„μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€
  4. OAuth2User 와 OidcUser 처리λ₯Ό κ΅¬λΆ„ν•˜μ—¬ κ΅¬ν˜„ν•˜κ³  μŠ€ν”„λ§ MVC μ—μ„œ νƒ€μž…λ³„λ‘œ 인증객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 방법을 μ•Œμ•„λ³Έλ‹€
  5. Scope 의 정보λ₯Ό κΆŒν•œμ •λ³΄λ‘œ λ§€ν•‘ν•˜λŠ” 원리λ₯Ό νŒŒμ•…ν•˜κ³  이λ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•˜λŠ” 방법을 μ•Œμ•„λ³Έλ‹€

2. Google 연동

연동 절차

  1. OAuth2 Client 와 Google μΈκ°€μ„œλ²„μ™€μ˜ 연동을 톡해 인증/인가 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€
  2. ꡬ글 μ„œλΉ„μŠ€μ— μ‹ κ·œ μ„œλΉ„μŠ€λ₯Ό μƒμ„±ν•œλ‹€ - https://console.cloud.google.com/
  3. application.yml μ„€μ •

    spring:
      security:
        oauth2:
          client:
            registration:
              google:
                client-id: 823010453529-xxxxxxxxxxxxxxxxxxxxx
                client-secret: GOCSPX- xxxxxxxxxxxxxxxxxxxxx
    

3. Naver 연동

연동 절차

  1. OAuth2 Client 와 Naver μΈκ°€μ„œλ²„μ™€μ˜ 연동을 톡해 인증/인가 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€
  2. 넀이버 API μ—μ„œ μ‹ κ·œ μ„œλΉ„μŠ€λ₯Ό μƒμ„±ν•œλ‹€ - https://developers.naver.com/main/
  3. application.yml μ„€μ •

    spring:
      security:
        oauth2:
          client:
            provider:
              naver:
                authorization-uri: https://nid.naver.com/oauth2.0/authorize
                jwk-set-uri: https://openapi.naver.com/v1/nid/verify
                token-uri: https://nid.naver.com/oauth2.0/token
                user-info-uri: https://openapi.naver.com/v1/nid/me
                user-name-attribute: response
            registration:
              naver:
                client-id: ad6x8jw3fzuq- xxxxxxxxxxxxxxxxxxxxx
                client-secret: dG4- xxxxxxxxxxxxxxxxxxxxx
                authorization-grant-type: authorization_code
                client-name: naver-client-app
                redirect-uri: http://localhost:8081/login/oauth2/code/naver
                scope: profile,email
    

4. Keycloak 연동

연동 절차

  1. OAuth2 Client 와 Keycloak μΈκ°€μ„œλ²„μ™€μ˜ 연동을 톡해 인증/인가 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€
  2. http://localhost:8080/
  3. application.yml μ„€μ •

    spring:
      security:
        oauth2:
          client:
            provider:
              keycloak:
                authorization-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/auth
                issuer-uri: http://localhost:8080/realms/oauth2
                jwk-set-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/certs
                token-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/token
                user-info-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo
                user-name-attribute: preferred_username
            registration:
              keycloak:
                authorization-grant-type: authorization_code
                client-id: oauth2-xxxxxxxxxxxxxxxxxxxxx
                client-name: oauth2-client-app
                client-secret: CQueEWXZ-xxxxxxxxxxxxxxxxxxxxx
                redirect-uri: http://localhost:8081/login/oauth2/code/keycloak
                scope: profile,email
    

5. Form 인증 + Kakao 연동

연동 절차

  1. Form 인증과 OAuth2 인증을 μ—°κ³„ν•˜μ—¬ μ„œλΉ„μŠ€ν•œλ‹€

     http.formLogin().loginPage("/login").loginProcessingUrl("/loginProc").defaultSuccessUrl("/").permitAll();
     http.exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"));
    
  2. 카카였 API μ—μ„œ μ‹ κ·œ μ„œλΉ„μŠ€λ₯Ό μƒμ„±ν•œλ‹€ - https://developers.kakao.com/
  3. application.yml μ„€μ •
    spring:
      security:
        oauth2:
          client:
            provider:
              kakao:
                issuer-uri: https://kauth.kakao.com
                authorization-uri: https://kauth.kakao.com/oauth/authorize
                token-uri: https://kauth.kakao.com/oauth/token
                user-info-uri: https://kapi.kakao.com/v2/user/me
                user-name-attribute: id
            registration:
              kakao:
                client-id: ad6x8jw3fzuq- xxxxxxxxxxxxxxxxxxxxx
                client-secret: dG4- xxxxxxxxxxxxxxxxxxxxx
                authorization-grant-type: authorization_code
                client-name: kakao-client-app
                redirect-uri: http://localhost:8081/login/oauth2/code/kakao
                scope: openid,profile,email
    

πŸ“– μ†ŒμŠ€

https://github.com/sk4cks/Spring-Security-Oauth2/tree/f539f23dcfeed196cfd60765b2e107c260973977

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°