username, clientId, registrationId
안녕하세요.
섹션 9. OAuth 2.0 Client - Social Login (Google, Naver, KaKao) + FormLogin 에서의 User 도메인에 대한 질문입니다.
username 에 대한 질문
폼 로그인에 사용되는 계정과 OAuth 2.0 로그인에 사용되는 계정을 추상화하는 과정에서
제공자 계정의 (변경가능한) 별명에 해당하는 값을 username으로 받는 것으로 보입니다.
하지만 클라이언트 자체 계정에서의 username 은 고유하기 때문에
Q1) 이를 동일한 속성을 갖도록하는게 맞는지 혹은 해도 무방한지
Q2) 이를 별도의 속성으로 받아도 괜찮은지 궁금합니다. (e.g. nickname)

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 에 적합해보이는데 이에 대한 의견을 듣고 싶습니다.
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;
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; // !
답변 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





