Authorization Code Type의 OAuth 토큰 발급 API 구현

  • API 명세서




1. 서비스 구현

  • 패키지 구성

  • Authorization_Code
    • docs
      • ERROR : 에러 호출 시 JSON 변환 전 Response
      • RESPONSE : 성공 호출 시 JSON 변환 전 Response
    • srvc (호출 순서)
      • codeAuthorize (1) : pub.apigateway.oauth2:authorize 호출 ( authorize -> OAuth_Approval.html 페이지 호출하는 서비스 ) -> approve 호출 -> return 값 Setting
      • approve (2) : OAuth_Approval.html 상 [approve] 버튼 클릭 시 실행되는 서비스 ( 토큰발급 서비스로 Redirect )
      • getToken (3) : 토큰 발급 서비스 (pub.oauth:getToken 서비스)


  • codeAuthorize
스왑 된 헤더 값 (oauthheader) 을 받아 Client id / Client Secret 을 얻은 후 그 값을 이용하여 authroize 서비스 수행 -> pipeline Drop ( 페이지 html 리턴 값) 후 approve 서비스 호출

  • approve

approve 서비스 호출
method : get
auth : Basic / Administrator / manage
content-type : application/json

header 값으로 oauthheader 값을 넘겨 주어야 함 (getToken 호출 시 Authorization 헤더 중첩 오류 / permission Anonymous 설정해도.. 오류가.. 남..)

  • getToken
oauthheader 값으로 얻은 Client id 값과 Client Secret 값으로 getToken


  • 헤더 스왑을 위한 Set Header 서비스 ( swapHeader )





2. API Gateway 설정


  • API 정책 설정

  1. Transport : HTTP 호출 ( Extended Settings : pg_oauth2_isHTTPS = false ) / 추후 요건에 따라 https 호출 필요시 설정 변경


  1. Request Processing : IS service 호출 / Header Transformation

빈 값 헤더를 추가하는 서비스 ("oauthheader" 헤더 추가)


oauthheader <-> authorization 헤더 swap
authorization = Basic QWRtaW5pc3RyYXRvcjptYW5hZ2U= ( Basic + BASE64Encode(Administrator + ":" + manage) )



  • Keystores / Truststores 등록


  • Port 등록 (HTTPS 호출 용)


  • OAuth Scope 설정



  • Scope Mapping 설정
=> 토큰만 발급되면 되는 것인지? / 해당 토큰으로 GW에서 인증처리가 필요한것인지 확인 필요
=> 인증 처리가 필요 할 시 , API Scope 변경 필요 (인증처리가 필요한 API 대상으로 Scope 변경)

  • Application 설정
Redirect URIs
http://192.168.1.143:5555/invoke/NICE_CBAPI_TEST.Authorization_Code.srvc:approve -> pub.apigateway.oauth2:authorize 실행시 redirect uri
http://192.168.1.143:5555/invoke/NICE_CBAPI_TEST.Authorization_Code.srvc:getToken -> secure.apigateway.oauth2:approve 실행시 redirect uri
설정 필요 https 시 설정 변경






3. API 호출 테스트


Authorization
Username : Client Id 값
Password : Client Secret 값
=> Postman에서 자동으로 Authorization 헤더 등록 Basic + BASE64encode ( client_id + ":" + client_secret )