728x90
Authentication
public void dashboard(Authentication authentication) {}
- oauth2Login() 로 인증을 받게 되면 Authentication 은 OAuth2AuthenticationToken 타입의 객체로 바인딩된다
- principal 에는 OAuth2User 타입 혹은 OidcUser 타입의 구현체가 저장된다.
- DefaultOAuth2User 는 /userInfo 엔드포인트 요청으로 받은 User 클레임 정보로 생성된 객체이다
- DefaultOidcUser 는 OpenID Connect 인증을 통해 ID Token 및 클레임 정보가 포함된 객체이다
@AuthenticationPrincipal
public void dashboard(@AuthenticationPrincipal OAuth2User principal or OidcUser principal) {}
- AuthenticationPrincipalArgumentResolver 클래스에서 요청을 가로채어 바인딩 처리를 한다.
- Authentication를 SecurityContex로부터 꺼내어 와서 Principal 속성에 OAuth2User 혹은 OidcUser 타입의 객체를 저장한다
Test
파라미터
@GetMapping("/user")
public OAuth2User user(Authentication authentication) {
//파라미터를 통해 받아오는 경우
//OAuth2AuthenticationToken authentication1 = (OAuth2AuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
OAuth2AuthenticationToken authentication2 = (OAuth2AuthenticationToken) authentication;
OAuth2User oAuth2User = authentication2.getPrincipal();
return oAuth2User;
}
- 2가지 방식으로 받을 수 있다.
- SecurityContextHolder에 Authentication을 참조해서 가지고 올 수 있다.
- 파라미터로 받아 가지고 올 수 있다.
- 받아온 값을 OAuth2User 타입으로 변경하여 반환한다.
애노테이션
@GetMapping("/oauth2User")
public OAuth2User oAuth2User(@AuthenticationPrincipal OAuth2User oAuth2User) {
System.out.println("oAuth2User = " + oAuth2User);
return oAuth2User;
}
@GetMapping("/oidcUser")
public OidcUser oidcUser(@AuthenticationPrincipal OidcUser oidcUser) {
//기본적으로 OidcUser 같은 경우에도 OAuth2User를 상속받기 떄문에 OAuth2User 로 받을 수 있지만 명확하게 oidc를 받는다는것을 명시하기 위해 사용하는것이다.
System.out.println("oidcUser = " + oidcUser);
return oidcUser;
}
- 애노테이션을 통해 2가지 방식으로 받을 수 있다.
- Openid 방식일 경우에는 2가지 모두 가능하지만, 아닐 경우 oauth2User URI로 받는 방식만 가능하다(null 반환)
- OAuth2User 같은 경우 OidcUser을 부모타입이기 때문에 OAuth2User로 둘 다 받을 수 있지만 명시적이지 않다.
728x90
'스프링 시큐리티 OAuth2 > OAuth2LoginConfigurer 초기화 이해' 카테고리의 다른 글
| API 커스텀 구현 - OAuth2AuthorizationRequestResolver (0) | 2023.01.24 |
|---|---|
| API 커스텀 구현 -Authorization BaseUrl & Redirection BaseUrl (0) | 2023.01.24 |
| OAuth2 로그인 구현 - OpenID Connect 로그아웃 (0) | 2023.01.23 |
| OAuth2 로그인 구현 - UserInfo 엔드포인트 요청하기 (0) | 2023.01.22 |
| OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개 (0) | 2023.01.17 |