JWT를 가지고 포스트맨 테스트 방법 및 유의사항을 정리하고자 한다.
유저가 로그인 할때의 엔드포인트는 다음과 같다.
@RestController
@RequiredArgsConstructor
public class LoginController {
private final CustomerRepository customerRepository;
private final PasswordEncoder passwordEncoder;
...
@RequestMapping("/user")
public Customer getUserDetailsAfterLogin(Authentication authentication) {
List<Customer> customers = customerRepository.findByEmail(authentication.getName());
if (customers.size() > 0) {
return customers.get(0);
} else {
return null;
}
}
}
/user
라는 엔드포인트로 접근할 때 Authentication
으로 받기 때문에 엔티티 클래스로 받는다고 생각할게 아니기에 Body에 JSON으로 데이터를 넣어주어 보내면 안된다.
이런 식으로 보내면 안된다는 것이다. 그럼 어떻게 보내주어야 하는가?
현재 나는 id를 email로 대신하여 보내며 pwd와 함께 보내고 있다. 이를 Body에 Json으로 보내는게 아니라 email:pwd
를 Base64
로 인코딩하여 헤더에 넣어주어 보내야 한다.
happy@example.com:12345
를 인코딩 하면 aGFwcHlAZXhhbXBsZS5jb206MTIzNDU=
가 된다.
Authorization
이라는 이름으로 값은 aGFwcHlAZXhhbXBsZS5jb206MTIzNDU=
로 헤더에 넣어주면 된다.
그리고 Send로 보내면 서버에선 happy@example.com
이라는 이메일을 가진 사용자의 정보를 출력하고, 헤더엔 JWT 토큰 값을 보내준다.
토큰 값을 요청마다 넣어주는 방법도 있지만 이는 복잡하다.
그렇다면 인증을 요구하는 엔드포인트에서 자동으로 토큰을 넣어주는 방법은 무엇일까?
포스트맨에 들어가 Environments
에 Globals 변수를 설정해주자
나는 token
이라는 Variable로 Type
은 default으로 추가해주었다.
테스트 시에 Authorization
탭에 Type을 API Key
를 선택하여 Key와 Value, Add to를 채워준다.
Key는 Authorization
, Value는 {{token}}
, Add to는 Header
로 설정한다.
그렇게 하면 Headers를 확인해보면 Authorization
이라는 이름으로 아까 봤던 JWT 값이 value에 들어가 있는 것을 확인할 수 있다.
그리고 Send를 눌러 요청을하면 정상적이게 값이 반환되는 것을 확인할 수 있다.