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 정책 설정

- Transport : HTTP 호출 ( Extended Settings : pg_oauth2_isHTTPS = false ) / 추후 요건에 따라 https 호출 필요시 설정 변경
- 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 )
