swagger api 보안 oauth2 설명
web/node.js

swagger api 보안 oauth2 설명

반응형

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/



반응형