본문 바로가기

프로젝트/마이플랜

Postman 에서 응답 헤더의 액세스 토큰을 요청 헤더에 자동 설정 되도록 하려면?

반응형

 

불필요한 언급없이 간략하게 그 과정을 설명합니다. 이제 부터 블로그 글을 작성할 때 불필요한 서두 이런 것을 최대한 줄이고, 설명도 간략화하여 보는 입장에서 바로 확인할 수 있는 형태로 작성해볼까 합니다. 

 

step0 | 환경설정

환경변수 폴더 설정

스크립트를 통해 환경변수를 추가하기 전에 선행되어야 하는 환경설정을 우선 실시합니다.

 

Environments 탭으로 들어가서 해당 프로젝트 이름으로 환경변수를 보관하는 폴더를 하나 만들어줍니다. 저의 경우 myplan  으로 작성하였습니다.

 

 

그 후 해당 폴더를 해당 프로젝트에서 사용하는 환경변수로 지정해줍니다(모자이크 처리된 부분은 신경쓸 필요 없습니다).

 

환경변수 탭에서 우측 상단에 보면 프로젝트와 환경변수의 특정 폴더를 연결할 수 있는 옵션이 있습니다.

스크립트 콘솔 출력 보기(디버깅)

상단 메뉴에서 View > Show Postman Console 을 클릭합니다. 이후 부터는 향후 스크립트 탭에서 작성되는 console.log로 출력된 토큰 값과 헤더 내용을 쉽게 확인할 수 있습니다. 이를 체크하면서 정상적으로 코드가 실행되고 있는지 디버깅하면 됩니다. 

 

step1 | 응답 헤더에서 액세스 토큰 추출 및 저장

이제 Scripts 탭에서 Post-response 탭을 선택 후 아래 코드를 추가 합니다. 

// 응답 헤더에서 "Authorization" 또는 토큰 키를 가져옴
const accessToken = pm.response.headers.get("Authorization");


// 토큰이 있는 경우만 처리
if (accessToken) {
    // Bearer 토큰 형식이 포함되어 있다면 분리
    const token = accessToken.replace("Bearer ", "").trim();

    // 환경 변수에 저장
    pm.environment.set("accessToken", token);
    console.log("Access Token:", token); // 디버깅용 로그
} else {
    console.warn("Authorization header not found in response.");
}

 

이후 정상적으로 환경변수에 저장되는 지 api 요청을 보낸 후 확인해봅니다.

 

환경변수 탭으로 이동 후 아래와 같이 설정이 되었다면 성공입니다.

 

step2 | 추출한 토큰을 다음 요청 헤더에 설정

이제 서버로 accessToken 을 사용하여 요청을 보내는 API 로 이동해서 동일한 Scripts 탭의 Pre-request 로 들어간 후 아래 코드를 추가합니다.

// 환경 변수에서 액세스 토큰 가져오기
const accessToken = pm.environment.get("accessToken");

// 토큰이 존재하면 헤더에 추가
if (accessToken) {
    pm.request.headers.add({
        key: "Authorization",
        value: `Bearer ${accessToken}` // Bearer 토큰 형식
    });
    console.log("Authorization header added:", `Bearer ${accessToken}`);
} else {
    console.warn("Access token is not set in the environment.");
}

 

그럼 후속 요청을 통해서 환경변수에 있는 액세스 토큰이 정상적으로 요청 헤더의 Authorization 의 값으로 설정되는지 확인해보겠습니다.

 

다행히 오류없이 정상적으로 환경변수에서 토큰을 읽어왔고, 이를 요청 헤더에 설정하였습니다.

 

다만 현재 문제가 한 가지 있는데, Postman의 요청 헤더에는 이렇게 추가한 정보가 보이지 않습니다. 그러나 이는 설정이 실패한 것이 아니라 postman의 실행순서에 의해서 보이지 않는 것일뿐 정상적으로 헤더에 추가된 상태입니다.

 

이를 쉽게 확인하는 방법은 서버에서 요청 헤더 정보를 읽어보는 겁니다. 저의 경우 스프링부트를 사용하고 있기 때문에, 컨트톨러에서 @RequestHeader 이노테이션을 사용하여 출력해보았습니다.

    @PostMapping
    public void addPlan(@RequestBody PlanDTO planDTO, @RequestHeader Map<String, String> headers){
        System.out.println(planDTO.toString());
        System.out.println(headers.toString());

    }

 

정상적으로 콘솔에 표시가 되고 있음을 확인할 수 있었습니다.

(선택) 토큰 갱신 처리

만약 액세스 토큰이 만료되면, Tests 스크립트에서 새로 요청하여 갱신하는 방식으로 추가 처리할 수 있습니다. 이에 대한 정보는 구글의 타 블로그를 통해서 쉽게 찾아볼 수 있으므로 추가적인 언급은 하지 않겠습니다. GPT 이런 곳에 물어보셔도 좋구요.

 

간략하게 말씀드리면, 다음 단계를 따를 수 있습니다.


Step 1: /auth/token 요청 → 응답 헤더에 Authorization: Bearer <token> 포함.
Step 2: 해당 토큰이 저장되어 /api/resource 등 후속 요청에서 자동으로 추가.

반응형