References




📌 결론
  • Authorization Code Type + Refresh Code Type
    • Atlassian 에서 Authorization Code 타입 만 지원, Access Token 을 Refresh 해서 사용





💡 OAuth2.0 연동 분석


✔️ Authorization Code Workflow

Authorization Code Flow (Auth Server : Atlassian - 3rd parth app : webMethods)

Callback URL = authorization code 를 리턴 받아 getToken 호출을 요청 할 IS 서비스의 호출 URL.
해당 Callback URL 은 Atlassian App에서 설정해야 한다.



STEP 1. GET Auth Code
Request Parameter
Value
audience
client_id
"YOUR_CLIENT_ID", iPaOgsUv9ArBZJOlvSHxvXXCUdfe2MjB
scope
각 Scope는 공백으로 구분 , OAuth 2.0 (3LO) 및 Forge 응용 프로그램에 대한 Jira 범위 (atlassian.com) → Scope 확인 필요
redirect_uri
https://YOUR_APP_CALLBACK_URL , API Server 에서 Response (auth code) 를 받아 Access Token 요청 (IS Service)
state
(보안) → 선택 사항일 것으로 예상, 확인 필요
response_type
code
prompt
consent


STEP 2. GET Access Token
Request Header
Value
Content-type
aplication/json

Request Body (JSON)
Value
grant_type
authorization_code
client_id
"YOUR_CLIENT_ID", iPaOgsUv9ArBZJOlvSHxvXXCUdfe2MjB
client_secret
"YOUR_CLIENT_SECRET", ATOAkV2IyW2fOoXoMz-iXwBkr1qtOjDARUoCejkaQPWPQwlZJrFSp1_GVH6JwdHSE7A972DD482C
code
"YOUR_AUTHORIZATION_CODE" , STEP 1. Response
redirect_uri
"https://YOUR_APP_CALLBACK_URL" , Access Token 처리 할 IS Service
  • Request Body Example
    • Content-Type : application/json
{

"grant_type": "authorization_code",

"client_id": "YOUR_CLIENT_ID",

"client_secret": "YOUR_CLIENT_SECRET",

"code": "YOUR_AUTHORIZATION_CODE",

"redirect_uri": "[https://YOUR_APP_CALLBACK_URL"](https://your_app_callback_url%22/)

}




POSTMAN 테스트 (Authorization Code 타입)
  • OAuth2.0 호출 시도 시 Atlassian 계정 정보 (앱 관리자) 필요
  • [의문점] Redirect URL 을 dev-skbioscience.com = Gateway 9072 로그인 화면으로 설정
    • Redirect 는 Gateway 로 가야 하지만 화면은 Atlassian 화면이 호출 됨 😒
    • /authorize 호출 시 302 세 번 → 자동으로 Callback URL (Redirect URL) 을 헬스체크 하여 Atlassian Auth 화면으로 Redirect 하는 듯 함.
    • context 값이 무엇을 의미하는지는 모르겠음 context (JWT 토큰) 값만 동일하면 (표준에 맞지 않는 방식인 듯 함, 확인 필요..)
POSTMAN 설정 1

POSTMAN 설정 2
Configure Options
Value
Auth URL
https://auth.atlassian.com/authorize? 또는 ?promt=consent&
Access Token URL
Client ID
iPaOgsUv9ArBZJOlvSHxvXXCUdfe2MjB
Client Secret
ATOAkV2IyW2fOoXoMz-iXwBkr1qtOjDARUoCejkaQPWPQwlZJrFSp1_GVH6JwdHSE7A972DD482C
Scope
read:me read:account read:confluence-space.summary read:confluence-props read:confluence-content.all read:confluence-content.summary read:confluence-content.permission read:confluence-user read:content:confluence read:content-details:confluence read:space-details:confluence read:comment:confluence read:user:confluence read:space:confluence read:jira-work read:jira-user read:avatar:jira read:project.avatar:jira read:dashboard:jira read:issue:jira read:issue-meta:jira read:comment:jira read:field:jira read:issue-details:jira read:issue-type:jira report:personal-data offline_access
(’offline_access’ Scope 를 추가해서 호출해야 Refresh Token 응답)

Audience


Atlassian 앱 화면 (Callback URL 은 Gateway로 되어있으나 이쪽으로 호출 됨)

발급 된 Access Token 과 Refresh Token

OAuth 2.0 (Authorization Code) 전체 호출 Console 화면 (context 확인..)


STEP 3. 사이트의 클라우드 ID 가져오기


Request Header
Value
Authorization
Bearer {Access_Token}
Accept
application/json
→ Response 의 id = cloud id 값 → API 호출 Endpoint 설정에 사용



STEP 4. Refresh Token
Request Body (JSON)
Value
grant_type
refresh_token
client_id
"YOUR_CLIENT_ID", iPaOgsUv9ArBZJOlvSHxvXXCUdfe2MjB
client_secret
"YOUR_CLIENT_SECRET", ATOAkV2IyW2fOoXoMz-iXwBkr1qtOjDARUoCejkaQPWPQwlZJrFSp1_GVH6JwdHSE7A972DD482C
access_token
"발급 받은 Access Token"
refresh_token
"발급 받은 Refresh Token"




Get Space API 호출 (I/F 개발)






💡 SK 바이오사이언스 I/F 개발 방안
  • COMMON I/F
    • [I/F #1] authorize 호출
    • [I/F #2] getToken 호출 (grant_type = authorization_code 일 때)
      • 에러 처리 방안 확인 필요 (첫 호출 토큰 분실 시)
    • [I/F #3] getToken 호출 (grant_type = refresh_token 일 때)
      • 3600 초 = 1시간 마다 Schedule 설정
  • SPACE 관련 API 호출





💡 SK 바이오사이언스 I/F 개발 상세 (12/09 기준)



[COMMON I/F] Refresh Token (Batch 주기는 - 3600 expired in 값에 맞춰)
  • Response (JSON) String을 그대로 Caching


[COMMON I/F] Util 서비스 - Get Token From Cache

  • 캐시에 저장 된 Response 값 (Access Token) 을 불러와 Cloud ID 호출
  • Cloud ID 값이 변하지 않는 값이라면 SEQ #2 는 삭제 (문의 필요)


[ATL_IF0001] Get Space
→ 호출 방법 Postman Collection 참고
[GET] /wiki/rest/api/space
Request Parameter 값에 따라 분기처리 후 호출


[ATL_IF0002] Get Space with SpaceKey
[GET] /wiki/rest/api/space/{spaceKey}
IF0001 과 동일한 패턴으로 구현