swagger ui 페이지가 아무에게나 노출되면 보안에 문제가 발생할 수 있다.
그래서 swagger 사용시에 접속권한이 있는 사용자만 접근 가능하도록 해야한다. 그 인증 방식중에는 여려가지 방식이 있는데 그 중 Oauth2 방식을 사용하는 법을 살펴보자.
우선 기본적인 swagger 설정이 되어 있어야 하고 그 부분은 이 곳에서 살펴보자.
https://rokking1.blog.me/221349422825?Redirect=Log&from=postView
해당 링크에 들어가서 보면 swagger.js에 정의했었던 SwaggerDefinition을 보면 필요한 정보들을 입력하는데 보안을 적용하기 위해서 이 옵션 중에 가장 상위에 Security Definitions와 Security Requirements object를 적용해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | swaggerDefinition: { // 정보 info: { title: 'node js test app', version: '1.0.0', description: 'Make For node js test.' }, "securityDefinitions": {}, "security": {}, "paths": { ... } } | cs |
먼저 securityDefinitions는 API에 접근할 수 있도록 제공해주는 security method이다. 이곳에 입력되는 각각의 security method에는 이름과 security method의 specification을 기입해야한다.
예를들면 API에 대해 OAuth2 인증방법을 모두 정의할 수 있다. 아래 예에서 인증 flow로 implicit을 설정하고 인증 url을 선언 해준다.
flow는 grant type이라고도 하며 인증 서버로 부터 access_token을 얻기 위한 api client의 시나리오를 의미한다. 그 중 내가 선언한 방식은 Implict로 직접적으로 accessToken을 사용해서 인증 할 때 사용하다. 이 방식은 API 클라이언트에 accessToken을 저장하지 못하는 경우에 자주 사용된다. 즉 별도의 백엔드 없이 별도의 순수 클라이언트 사이드에서 동작하는 앱일경우에 사용된다.
implicit 말고도 각각의 인증 방식은 이곳에 보면 잘 설명되어 있다. https://brunch.co.kr/@sbcoba/4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | swaggerDefinition: { // 정보 info: { title: 'node js test app', version: '1.0.0', description: 'Make For node js test.' }, "securityDefinitions": {}, "security": { "oauth": { "type": "oauth2", "authorizationUrl": "http://api.example.com/api/auth/", "flow": "implicit", "scopes": { "read:players": "read player data" } }}, "paths": { ... } } | cs |
authorizationUrl은 인증 서버로부터 access token을 가져오기 위해 사용된다. 그리고 scope 또한 지정할 수 있다.
참고자료
https://sookocheff.com/post/api/securing-a-swagger-api-with-oauth2/
http://blog.weirdx.io/post/39955
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#securityDefinitionsObject
https://apihandyman.io/writing-openapi-swagger-specification-tutorial-part-6-defining-security/
https://swagger.io/docs/specification/authentication/oauth2/
'web > node.js' 카테고리의 다른 글
node.js express에서 request 사용자 아이피 찾기 (0) | 2018.10.15 |
---|---|
node.js에서 aws s3 스토리지에 이미지 저장하기 (0) | 2018.10.06 |
node.js 애플리케이션 프로세스 관리 도구 매니저 (2) | 2018.10.06 |
request-promise를 통해 가져온 euc-kr 문자열 인코딩 문제 해결 (iconv) (6) | 2018.10.06 |
node.js로 구글 스프레드시트에 접속하여 데이터 가져오기 (0) | 2018.10.05 |