Closed raccoon-mh closed 3 months ago
@innodreamer (cc. @powerkimhub, @seokho-son, @dongjae)
개발하기에 앞서서 이대로 추진해도 괜찮을지 최종 검토 및 조율이 필요할 것 같습니다.
우선 package mcimw 로 아래와 같이 echo 및 buffalo에서 PoC 테스트 하였습니다. 필요한 기능 및 향상 이번 릴리즈 이후로 일정 조율 따로 드리겠습니다.
mcimw.AuthMethod = mcimw.EnvKeycloak
mcimw.GrantedRoleList = []string{}
app.Any("/**", echo.WrapHandler(http.HandlerFunc(mcimw.BeginAuthHandler)))
app.GET("/alive/protected", mcimw.EchoMcimw(func(c echo.Context) error {
return c.String(http.StatusOK, "alive")
}))
mcimw.AuthMethod = mcimw.EnvKeycloak
mcimw.GrantedRoleList = []string{}
api.Use(mcimw.BuffaloMcimw)
api.GET("/{targetController}", GetRouteController)
api.POST("/{targetController}", PostRouteController)
@yunkon-kim @seokho-son @dogfootman
MC-IAM-MANAGER 내에서 미들웨어 필수 함수 하기 3개에 대하여 패키지화 예정, 미들웨어는 각 프레임워크에서 직접 개발 및 echo, buffalo 등 golang 프레임워크 기반 미들웨어 예제 제공 예정
공용키 주입 공통 함수
공용키를 통한 토큰 검증 함수
토큰 정보 키 기반 반환 함수
@yunkon-kim @seokho-son @dogfootman
https://github.com/raccoon-mh/iamtokenvalidatorpoc 위 레포지토리에서 iamtokenvalidator 패키지 PoC 퍼블리싱 진행했습니다. PoC가 어느정도 진행되고, MC-IAM-MANAGER 에서 진행하는 쪽으로 하는게 좋을 것 같습니다.. 의견 부탁드립니다..!
https://github.com/raccoon-mh/mc-iam-manager-tokenValidator-middleware-PoC Echo Framework 에서는 위 레포지토리 예제처럼 사용할 수 있을 것으로 보입니다.
아래는 echo 미들웨어 예제 입니다.
// 공용키 설정
func init() {
// mc-iam-manager certs endpoint is require, this endpoint is v0.2.0..
err := iamtokenvalidatorpoc.GetPubkeyIamManager("https://example.com:5000/api/auth/certs")
if err != nil {
panic(err.Error())
}
}
// token 의 valid를 확인
func isTokenValid(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
accesstoken := strings.TrimPrefix(c.Request().Header.Get("Authorization"), "Bearer ")
err := iamtokenvalidatorpoc.IsTokenValid(accesstoken)
if err != nil {
return c.String(http.StatusUnauthorized, "Authorization is not valid..")
}
c.Set("accesstoken", accesstoken)
return next(c)
}
}
// usrRole을 컨텍스트에 Set
func setUserRole(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
accesstoken := c.Get("accesstoken").(string)
claims, err := iamtokenvalidatorpoc.GetTokenClaimsByIamManagerClaims(accesstoken)
if err != nil {
return c.String(http.StatusUnauthorized, "Authorization is not valid..")
}
c.Set("realmAccess", claims.RealmAccess.Roles) // IAM manager 기준 현재 제공하고 있는 Role 위치. 커스텀 Claims 사용가능
return next(c)
}
}
@raccoon-mh (cc. @seokho-son @dogfootman)
공유해주신 Pkg 및 예제를 활용하여, https://github.com/cloud-barista/cb-tumblebug/pull/1627 개선을 진행하겠습니다. (Echo Web Framework의 공식 JWT 미들웨어에 적용 및 테스트 예정)
PoC에서 활용하신 Go version이 1.22.3으로 파악되는데요. 우선, 개발하신 패키지에서 1.22.3이 필수인지 문의드립니다.
추가로, PublicKey 획득을 위한 URL 엔트포인트로 지난번 온라인 회의에서 공유해주신, MC-IAM-MANAGER 엔트포인트를 활용할 예정입니다. 혹시 다른 엔드포인트를 사용해야할 경우, Slack DM 주시기 바랍니다.
@yunkon-kim
해당 패키지 1.22.3 버전 사용은 필수가 아닙니다. go.mod 수정하여 다시 올리겠습니다.
현재 태그가 v0.0.0으로 잡히는데, v0.2.1 로 맞추겠습니다.
MC-IAM-MANAGER 엔트포인트는 지난 회의에서 드렸던 엔드포인트 활용하시면 되겠습니다.
소스코드 기반 배포는 금주 내에 문서 최신화 드리겠습니다.
@raccoon-mh 확인 감사합니다!
현재 태그가 v0.0.0으로 잡히는데, v0.2.1 로 맞추겠습니다.
관련하여 말씀드립니다.
https://github.com/raccoon-mh/iamtokenvalidatorpoc 을 대상으로 통합 및 테스트를 진행하고 있습니다. Go vesion을 맞춰주시면, latest main을 활용하면 될 것 같습니다.
@yunkon-kim
우선 해당 저장소로 진행하시는건가요?
PoC 패키지 테스트용으로 잠시 해놓았던 것이라, 통합하여 TB 메인 테스트로 사용하기에 부적절 할 수 있어보입니다.
진행중이시라면, https://github.com/raccoon-mh/iamtokenvalidatorpoc 를 대상으로 테그 및 go 버전 수정 하겠습니다.
-- 현재 진행중인 커밋은 다음과 같습니다. 915e5de292523efe96f08fb943589aebcff6bd62 582963e45e7a480fb16c0472333d6458d99a675d
@raccoon-mh
위에서 PoC 진행 후, IAM-Manager에 적용하신다고 말씀해주셔서 개인 저장소 버전으로 진행하는 것으로 이해했었습니다.
TB 에 통합 및 테스트를 위한 대상을 말씀해 주시는 것이 좋을 것 같습니다.
@yunkon-kim
혼선을 드려 죄송합니다...
PoC 테스트 만을 위해 해당 저장소를 제공하는 것으로 했고, TB 통합을 위해서는 M-CMP/mc-iam-manager 내부 패키지를 사용하는 것이 바람직할 것 같습니다.
테스트를 위한 준비는 끝났고, 문제 없을시 MC-IAM-MANAGER 에서 제공하는 패키지로 경로 변경하심 좋을 것 같습니다...
번거로우시다면, 현재 MC-IAM-MANAGER 패키지 테그 문제가 해결 된 이후 다시 언급드리겠습니다. go version 및 태그를 정리중입니다.
@raccoon-mh (cc. @dogfootman @seokho-son @powerkimhub @innodreamer)
온라인 회의에서 기존 사항들을 검토 하였고, 다음과 같이 진행하는 것으로 협의되었습니다.
iamtokenvalidator.GetPubkeyIamManager("https://example.com:5000/api/auth/certs")
iamtokenvalidator.Keyfunction
iamtokenvalidator.GetTokenClaimsByIamManagerClaims(accesstoken)
Role 및 Authorization(인가)관련한 기능 및 메커니즘에 대해서는, 이후에 협의가 필요한 사항으로 남겨 놓았습니다.
아래 내용을 참고하시기 바랍니다. (혹시 다르게 설명드린 부분이 있으면, 정정하여 주시기 바랍니다.)
@raccoon-mh (cc. @dogfootman @seokho-son @powerkimhub @innodreamer)
먼저, 적극적으로 공통 기능과 Pkg를 개발 및 지원해 주셔서 감사드립니다.
MC-IAM-MANAGER에서 제공되는 JWT 관련 공통 기능 및 pkg를 활용하여, CB-Tumblebug에 Echo용 JWT Middleware 적용 및 테스트를 완료하였습니다.
자세한 내용은 아래 PR을 참고하시기 바랍니다.
생각보다 많은 시간이 소요되었지만 유의미한 시간이었다고 생각됩니다. 공통 기능 및 Pkg 개발, 외부에서 pkg 참조를 위한 메커니즘 및 Challenging 포인트 등을 확인할 수 있었기 때문입니다.
이후, 실제로 사용하면서 몇 차례 추가 보완이 있을 것으로 예상합니다. 전체 서브시스템으로 확대 적용 시기를 정하실 때, 이점 참고하시면 될 것 같습니다.
M-CMP 내에서 사용가능한 미들웨어 패키지 개발
대상 지원 프레임워크
필수 요구 사항
환경설정