Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the JWT auths middleware and sample API #1627

Merged
merged 8 commits into from
Jul 15, 2024

Conversation

yunkon-kim
Copy link
Member

@yunkon-kim yunkon-kim commented Jun 13, 2024

Show and discuss

Please, do not merge this PR

MC-IAM-MANAGER(m-cmp/mc-iam-manager#18) 에서 미들웨어 패키지를 공동 개발 및 개선하는 것에 대해 논의하기 위한 Draft PR을 오픈하였습니다. (일부는 TB에 일부는 IAM에 반영 예정 입니다.)

Public Key 공유 및 IAM-MANAGER에 직접 테스트를 수행하는 것이 어렵다고 판단되어,
Local에 Keycloak 배포한 후, CB-Tumblebug에 우선 적용 및 테스트를 진행한 사항 입니다.

PR은 아래 항목을 포함하고 있습니다.

  • Add JWT auth middleware and related functions
  • Add a sample API
  • Update setup.env
  • Update .gitignore
  • Add a jwt_auth.yaml template

Sample

예시 1 - Token 없이 요청
image

예시 2 - Token과 함께 요청 -> 토큰에서 추출한 정보 리턴
image

@innodreamer @raccoon-mh @seokho-son (cc. @powerkimhub @MZC-CSC @dev4unet)

@yunkon-kim yunkon-kim added the hold Need to hold merge label Jun 13, 2024
@seokho-son
Copy link
Member

@raccoon-mh 안녕하세요.

  • MC-IAM-MANAGER other Framework Middleware Pkg m-cmp/mc-iam-manager#18 (comment) 에서 echo 미들웨어 PoC도 진행해주신 것으로 보여서, 본 PR의 리뷰를 부탁드려볼까 합니다. 혹시 소스코드상 디테일까지 보실 필요는 없고, 메커니즘상 이슈가 되는 사항과, 현재 mc-iam-manager 과 연동 테스트 진행하는 방향성도 함께 살펴봐주시면 감사하겠습니다. :)

@raccoon-mh
Copy link
Member

@raccoon-mh 안녕하세요.

  • MC-IAM-MANAGER other Framework Middleware Pkg m-cmp/mc-iam-manager#18 (comment) 에서 echo 미들웨어 PoC도 진행해주신 것으로 보여서, 본 PR의 리뷰를 부탁드려볼까 합니다. 혹시 소스코드상 디테일까지 보실 필요는 없고, 메커니즘상 이슈가 되는 사항과, 현재 mc-iam-manager 과 연동 테스트 진행하는 방향성도 함께 살펴봐주시면 감사하겠습니다. :)

현재 iam manager는 링크에서 확인해보실 수 있습니다.

연동을 위해 Tumblebug 은 사용할 계정과 역할을 알아야 합니다. 이번 릴리즈에는계정 생성 혹은 매니징은 제외하고 기본 계정과 역할들로 매니징 됩니다.
docker 로 올리실 경우 링크 와 같은 계정이 생성되며 연동 테스트를 진행하실 수 있습니다.

@seokho-son
Copy link
Member

@yunkon-kim 활용 오픈소스 관련해서, github.com/gookit/goutil 가 꼭 필요한지도 문의 드립니다. :)

@yunkon-kim
Copy link
Member Author

@seokho-son 네, 체크해보고 공유 드리겠습니다.

@seokho-son
Copy link
Member

@all-contributors please add @raccoon-mh for review

Copy link
Contributor

@seokho-son

I've put up a pull request to add @raccoon-mh! 🎉

@yunkon-kim
Copy link
Member Author

@seokho-son

코드상으로 확인해 봤습니다. 간단한 기능이라서 내부 함수로 구현한 이후에, 해당 패키지를 제외하는 방향으로 진행 하겠습니다 :-)

@seokho-son
Copy link
Member

@yunkon-kim 해당 PR 마무리를 위해서 혹시 도와드려야 할 사항이 있을까요? :)

@yunkon-kim
Copy link
Member Author

온라인 회의에서 의견 조율 및 Quick 통합 추진 예정입니다.

  • 일시: 7/3(수) 14시 ~ (2시간 이내)

@seokho-son
Copy link
Member

@raccoon-mh 안녕하세요. @yunkon-kim 님과 논의한 사항을 다이어그램으로 그려보았습니다.

여기서, CB-TB가 생각하는 아이디얼한 형상은 1번인데, 현재 IAM 및 Web콘솔에서는 2번과 같은 형상 및 예제를 제공해주신 것이 아닌가 싶습니다.
미리 한번 살펴봐주시면 좋을 것 같네요.
(@yunkon-kim 님 혹시 그림상 의도가 다른 부분이 있다면 알려주시고요 ㅎㅎ)

@raccoon-mh
Copy link
Member

@raccoon-mh 안녕하세요. @yunkon-kim 님과 논의한 사항을 다이어그램으로 그려보았습니다.

여기서, CB-TB가 생각하는 아이디얼한 형상은 1번인데, 현재 IAM 및 Web콘솔에서는 2번과 같은 형상 및 예제를 제공해주신 것이 아닌가 싶습니다. 미리 한번 살펴봐주시면 좋을 것 같네요. (@yunkon-kim 님 혹시 그림상 의도가 다른 부분이 있다면 알려주시고요 ㅎㅎ)

작성해주신 다이어그램 살펴봤습니다. 저희가 추구하는 형상 또한 1번이 맞으며, IAM v0.1.2 프리 릴리즈에서 각 SP 가 미들웨어를 구축 할 수 있도록, 공개키 certs 엔드포인트를 제공하고 있습니다. 이번 web 콘솔에서 또한 자체적으로 미들웨어를 가져가면서 어느정도 유저 워크스페이스 등 제한이 가능할 것으로 보이나, 2번 형상에서 그려주신 것처럼 TB 에서 SP 등으로 요청시 토큰에 대한 Validation을 검사 하는 등 토큰 검사에 대한 범위 및 횟수에 대해서는 논의가 필요해 보입니다.

@yunkon-kim
Copy link
Member Author

@seokho-son

직관적인 다이어그램을 그려주셔서 감사합니다.
SP에서도, "Handle API call", "Validate(/Decode) the token (using the IAM Public Key)"를 수행해야 하기에 수정해 놓았습니다. (Discussion 수정 완료)

@raccoon-mh
전체적인 내용에 대해서 공감합니다 ^^
세부 사항을 이해해보고 차이를 좁히기 위한 차원으로 두 가지 질문을 드립니다.

  1. 말씀주신 공개키 Certs 엔드포인트는 공개키를 반환하는 IAM-Manager의 API로 이해해도 괜찮을까요?
  2. 토큰 Validation 검사와 관련하여, 현재 두 가지 포인트로 해석 될 수 있을 것 같습니다. 어느 쪽에 두고 계신지 문의드립니다.
    • Middleware 상에서 공개키를 가지고 토큰을 검증(예, Validate/decode)하는 과정
    • IAM-Manager의 API(?)를 활용한 검증 과정

@powerkimhub
Copy link
Member

@raccoon-mh

  • 현재 추진 방법이 전체 대상 CSP들에 적용 가능한지요?
    • OIDC 방식이든, 다른 방식이든 MC-IAM을 통한 전체 flow 측면에서.
  • 참고: 대상 CSP

@seokho-son
Copy link
Member

@powerkimhub 현재 논의되고 있는 사항은 cb-tb api 를 요청한 사용자가 vaild한지 확인하는 방법 및 인터랙션 형태에 대한 것이고,

oicd 등 csp credencial 관련된 내용과 살짝 다른 류의 디스커션인 것 같긴 합니다. 말씀하신 관점에서 논의는 길게 진행된다면 신규로 디스커션을 파서 논하는 것이 좋을 것 같습니다.

@yunkon-kim
Copy link
Member Author

관련 코드를 iam package로 모듈화 진행하였습니다. 패키지 명을 iamauth중에 고민하였고, 우선 iam으로 적용해 놓은 상태 입니다. 예정된 온라인 회의에서 의견 수렴 후 변경할 예정입니다.

@yunkon-kim
Copy link
Member Author

미들웨어 수정과 관련한 협의 사항: m-cmp/mc-iam-manager#18 (comment)

@yunkon-kim
Copy link
Member Author

yunkon-kim commented Jul 8, 2024

Test 결과를 공유드립니다. (예정사항: 참조 pkg 변경)

@yunkon-kim
Copy link
Member Author

yunkon-kim commented Jul 12, 2024

@seokho-son

MC-IAM-MANAGER v0.2.7과 연동 및 테스트 완료하였습니다.

  • 지원해주신 데모 및 테스트 용 MC-IAM-MANAGER HOST를 활용하여 테스트 완료하였습니다.
  • JWT auth 활용을 위해서는 setup.env에서 export AUTH_MODE=jwt 로 설정해야합니다.
  • 테스트용 API 및 테스트 결과는 아래를 참고하시기 바랍니다.
    • Call GET /api/auth/login to get a JWT Token
    • 인증 전
      • image
    • 인증 후
      • image

setup.env에서 환경변수, Dockerfile, 등에서 아래와 같이 Key가 변경되었습니다. 참고 바랍니다. (이후 docker-compose.yaml에 반영 예정)

  • ENABLE_AUTH -> AUTH_ENABLED

@yunkon-kim yunkon-kim removed the hold Need to hold merge label Jul 12, 2024
@yunkon-kim yunkon-kim marked this pull request as ready for review July 12, 2024 04:48
.gitignore Outdated
Comment on lines 53 to 57
!conf/cloud_conf.yaml
!conf/log_conf.yaml
!conf/setup.env
!conf/store_conf.yaml
!conf/template-*
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yunkon-kim 해당 설정 파일들이 ignore 되지 않게 처리하는 패턴이 맞나요? 혹시 의도하신 것일까요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seokho-son
다시 보니 Ignore 되도록 하는 것이 맞겠네요. 원래대로 돌려놓겠습니다.

* Add JWT auth middleware and related functions
* Add a sample API
* Update `setup.env`
* Update `.gitignore`
* Add a `jwt_auth.yaml` template
* Remove `github.com/gookit/goutil` pkg
* Encounter a build error due to Alpine Linux using `glibc`-specific functions 'pread64', 'pwrite64', and type 'off64_t'
* Replace with golang 1.21.6-bookworm (Debian 12.6)
* Install necessary packages for SQLite support and build requirements
Copy link
Member

@seokho-son seokho-son left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!!

@seokho-son seokho-son merged commit c1d8afa into cloud-barista:main Jul 15, 2024
3 checks passed
@yunkon-kim
Copy link
Member Author

@seokho-son

아래와 같이 개선되었습니다.

  • 최신 upstream main로 Rebase
  • 패키지 및 Go 버전 검토 -> 빌드 및 적상 동작 확인
  • (CI, 컨테이너 이미지 빌드 실패 해결) CB-Tumblebug 바이너리 빌드 스테이지의 베이스 이미지 변경
    • go-sqlite3 package 버전을 공식 안정화 버전으로 변경이 있었음
    • 이로 인해, Host의 라이브러리(예, sqlite3-binding.c ) 참조 이슈 발생함
    • Alpine 사용시 발생하는 알려진 이슈였고, Debian 이미지로 변경하여 해결
  • 환경 변수 등에서 ENABLE_AUTHAUTH_ENABLED로 변경

(테스트 완료) MapUI에서 MCIS 생성 및 삭제 테스트 수행 -> 정상적으로 완료됨

(의견)
go-sqlite3가 CB-Tumblebug 빌드 환경에 영향을 받는 것으로 보입니다(예, sqlite3-binding.c 참조 이슈).
따라서, 현재 적용된 공식 안정화 버전 github.com/mattn/go-sqlite3 v1.14.16 사용에 이슈가 없을지 조금더 지켜볼 필요가 있겠습니다.

@yunkon-kim yunkon-kim deleted the 240613-14 branch July 30, 2024 00:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants