• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

UsernamePasswordAuthenticationToken 생성 질문입니다.

23.04.13 00:42 작성 23.04.13 00:42 수정 조회수 733

0

new UsernamePasswordAuthenticationToken(accountContext.getAccount(), null, accountContext.getAuthorities());

아래처럼 토큰을 생성하신 이유가 궁금합니다.

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(accountContext.getAccount(),null, accountContext.getAuthorities());

강사님께서 다른 질문에 답변해주신걸 보면

1. pricipal 객체는 UserDetails 타입의 Wrapper 객체가 아닌 실제 객체(?)를 참조하는게 더 낫다.

2. credentials는 이미 우리가 만든 CustomAuthenticationProvider에서 비밀번호를 검증했으므로 null로 세팅했다.

라고 이해햇습니다.

그렇다면 역으로

1. 다음 필터에서 principal 객체는 유저의 이름만 필요하다고하면 유저이름만 세팅해도 무방한가요?

즉, 어플리케이션에서 필요로하는 principal 객체가 무엇이냐에 따라 다르게 세팅하면 되는게 맞나요?

2. 다음 필터에서 credentials 항목을 필요로 한다면, 해당 항목도 null이아닌 account객체에 있는 패스워드로 채우는게 맞나요?

답변 1

답변을 작성해보세요.

0

  1. 답변

    네 principal 객체는 사용자의 정보를 담은 객체를 저장하기 때문에 어떤 형식과 기준을 가지고 저장할지는 정책에 따라 결정하시면 됩니다.

  2. 답변

    스프링 시큐리티에서는 내부적으로 Authentication 객체에 있는 credentials 속성에 값을 저장하기 않고 null 로 설정하고 있습니다. 그러나 이유가 어떻게 되었던 이 부분은 반드시 그렇게 해야 한다는 것은 아닙니다. 꼭 필요로 하다면 값을 저장해도 됩니다. 다만 보안에 취약하지 않도록 적절한 처리는 필요할 수 있습니다. 객체에 null 이 들어가면 안되는 속성 말고는 자유롭게 설정이 다 가능하지만 일반적으로Authenication 객체같은 경우 이 객체의 전체 값을 클라이언트로 전달하는 경우도 있기 때문에 패스워드 같은 값은 제외하는 것이 안전합니다.