inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티 OAuth2

username, clientId, registrationId

해결된 질문

585

감채

작성한 질문수 18

1

안녕하세요.
섹션 9. OAuth 2.0 Client - Social Login (Google, Naver, KaKao) + FormLogin 에서의 User 도메인에 대한 질문입니다.

 

  1. username 에 대한 질문

     

    폼 로그인에 사용되는 계정과 OAuth 2.0 로그인에 사용되는 계정을 추상화하는 과정에서

    제공자 계정의 (변경가능한) 별명에 해당하는 값을 username으로 받는 것으로 보입니다.

     

    하지만 클라이언트 자체 계정에서의 username 은 고유하기 때문에
    Q1) 이를 동일한 속성을 갖도록하는게 맞는지 혹은 해도 무방한지
    Q2) 이를 별도의 속성으로 받아도 괜찮은지 궁금합니다. (e.g. nickname)

     

     

 

 

  1. id + username 에 대한 질문


    "sub" 혹은 "id" 로 매핑되어있는 값을 id라는 필드에 넣도록 구현되어있는데

     

    public class NaverUser extends OAuth2ProviderUser {
    
        @Override
        public String getId() {
            return (String)getAttributes().get("id"); // !
        }
    
    public class GoogleUser extends OAuth2ProviderUser {
    
        @Override
        public String getId() {
            return (String)getAttributes().get("sub"); // !
        }

    네이버 문서에 아래와 같은 내용이 있습니다.

    위 설명에 따르면 네이버를 기준으로 id가 클라이언트 자체 계정에서의 username 과 동일한 역할을 하는 것으로 보입니다.


    Q3) 따라서 1번 질문과 반대로 id 필드에 저장되는 값이 오히려 username 에 적합해보이는데 이에 대한 의견을 듣고 싶습니다.

 

 

 

  1. clientId 에 대한 질문

     

    User 클래스에 String ci (clientId) 필드가 포함되어 있는데,
    Q4) 이는 외부 설정파일로부터 설정하는데 저장해야할 필요가 있나요? 지워도 무방한가요?

     

    public class User {
    
        private String registrationId;
        private String id;
          private String ci; // !
        private String username;
        private String password;
        private String provider;
        private String email;
        private String picture;
        private List<? extends GrantedAuthority> authorities;

     

 

 

  1. registrationId 에 대한 질문

     

    registrationId 가 provider(google...) 를 의미하는 것으로 보이는데,

    Q6) FormLogin 클래스에 registrationId, provider 두 필드가 모두 존재합니다.
    하나는 지워도 무방한가요?

     

    public abstract class OAuth2ProviderUser implements ProviderUser {
    
        @Override
        public String getProvider() {
            return clientRegistration.getRegistrationId(); // !
        }
    public class FormUser implements ProviderUser {
    
          private String registrationId; // !
        private String id;
        private String username;
        private String password;
        private String email;
        private boolean isCertificated;
          private String provider; // !

 

 

 

spring-boot java oauth spring

답변 1

1

정수원

네 아주 꼼꼼한 질문 감사드립니다

1번

  • 말씀 하신대로 username 은 유니크한 값이 들어가는 것이 맞습니다. 다만 사용자명을 별도로 화면에 출력하기 위한 용도로써의 속성도 필요한데 그것은 nickname 이라는 속성을 별도로 두면 될 것 같습니다.

2번

  • 네 맞습니다. id 는 고유한 아이디의 역할을 합니다. username 에 넣어서 활용하시면 되고 id 는 DB 의 시퀀스로 대체해도 괜찮습니다.

3번

  • ci 는 일반적으로 주민번호를 해시한 고유값으로 사용됩니다. 여기에서는 본인인증 이후 받게 되는 값으로 ci 속성을 넣었는데 해당 예제에서는 그렇게 중요한 것이 아니니 무시하셔도 됩니다.

4번

  • 사실 FormUser 에서는 RegistrationId 와 provider 둘 모두 필요하지 않는 속성입니다. 통일성을 위해 넣긴 했지만 필수가 아닌 옵션으로 생각하시면 됩니다. 다만 OAuth2 인증과 구별되는 무엇인가를 넣는 속성으로 활용하신다면 해당 속성에 임의의 값을 설정하는 것도 괜찮습니다.

authorization-server 라이브러리 질문이 있습니다.

0

78

1

loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생

0

81

2

JWT 조회 에 대한 질문

0

76

1

password grant 방식 에러 응답

0

96

3

FormLoginConfigure에서 생성하는 필터

0

79

2

현업에서 springboot를 3.5.5 를 사용해서 공부중인데...

0

288

2

Jdbc 관련 강의 및 깃헙 문의

0

78

1

OAuth2AuthorizedClient 이해 및 활용 강의 내용 질문

0

209

1

UserInfo 엔드포인트 요청 실습

0

75

1

RFC 문서에서의 AccessToken 발급 방식 궁금한점

0

151

1

강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁드려요

0

140

2

OIDC SSO 관련 질문 입니다.

0

131

1

AuthenticationEntryPoint 강의 누락 문의

0

123

1

cors설정방법

0

116

1

jwt decoder 토큰 검증 시 질문

0

222

1

클라이언트에서 userinfo 엔드포인트 호출 시 질문

0

187

2

JOSE 구성요소의 api에 관한 질문

0

141

2

스프링 부트 3버전으로 따라가시는 분들 참고하세요

1

532

1

CustomOAuth2AuthenticationFilter 구현 중 질문

0

146

2

AuthenticationManager 생성시점

0

118

1

FormLogin과 Oauth2Client 둘 중 사용하는 시점

0

128

1

postman userinfo 엔드포인트 질문

0

136

2

강의 수강신청하고 듣기 전입니다 질문있습니다.

0

115

1

인증 코드를 통해 발급 받은 토큰의 관리

0

200

1