오늘은 프로젝트 중

[swagger] jwt Bearer 토큰이 header에 undefined 되어서 오류가 날 때

이도토리 2021. 8. 12. 11:26

처음엔 정말 외계어같던 swagger 내용들도 서서히 차츰차츰 이해가 되어가고 있다.

영어 문서와 숱한 외국인들의 stackflow 대화를 엿보면서 겨우겨우 완성 중인 api-docs.

 

가장 복병이었던 것이 authorization으로 jwt 토큰 보안을 구현해내는 일이었다.

open api 버전이나 swagger 버전이 업그레이드 되면서 계속 docs를 짜는 구조나 단어들이 바뀌어서

해외 블로그나 다른 자료들을 봐도 제대로 따라잡기가 어려웠다.

또한 yaml로 된 자료가 많아서 

yaml json converter 웹사이트까지 활용해가면서 만들었음 ^_ㅠ

https://onlineyamltools.com/convert-yaml-to-json

 

Transform YAML into JSON - Online YAML Tools

Free, quick and easy online utility that converts YAML to JSON in your browser. There are no ads or downloads. Simply enter YAML and get JSON. Created by developers for developers.

onlineyamltools.com

 

그래도 swagger 공식문서가 꽤나 잘되어 있어서,

parameter / header / query / body 부분은 공식문서를 잘 참고해서 만들었다.

 

 

https://swagger.io/docs/specification/authentication/bearer-authentication/

 

Bearer Authentication

OAS 3 This guide is for OpenAPI 3.0. Bearer Authentication Bearer authentication (also called token authentication) is an HTTP authentication scheme that involves security tokens called bearer tokens. The name “Bearer authentication” can be understood

swagger.io

 

마지막 복병이었던 jwt.

securityschemes도 잘 짜고 다 잘 한 거 같은데 왜 안될까 싶었는데

정말 허무하게도 앞에 Bearer 를 붙이고 한 칸 띄어서, 값이 전달이 안 됐던 거였다.

Bearer 떼고 그냥 토큰 내용 적자 마자 Curl에서도 그렇고 슝슝 빠르게 전송 잘 됨.. so 허무 and 다행..

 

    securitySchemes: {
      BearAuth: {
        name: "authorization",
        type: "http",
        scheme: "bearer",
        in: "header",
        bearFormat: "JWT",
      },
    },

=> 해당 내용은 components 안에 적어준다.

떡하니 bearer shceme라고 적혀 있구나. 알아서 떼어주는 거였어..

 

그리고 컴포넌트 바깥에

    security: {
      BearAuth: [],
    },

적용해주면 전체 api 한정으로 header token을 저장해서 authorization 정보를 보유한 채 테스트 가능하고,

각 테스트마다 적용해주고 싶으면 위 내용을 각 path 안에 적어주면 된다.

 

 

이 자료가 나처럼 헤매고 있는 swagger 어린양에게 도움이 되길 바란다.,.