API 인증 준비
API를 이용하려면 Developer Console에서 API 인증 정보를 확인해야 한다.
테넌트에 도메인이 여러 개 있으면 API를 호출할 도메인을 선택하여 인증 정보를 확인할 수 있다.
테넌트의 API 인증 정보는 테넌트 내의 모든 도메인에 적용할 수 있다.
API 요청 URL
NAVER WORKS Bot Platform API의 요청 URL 형태는 다음과 같다.
- https://apis.worksmobile.com/{API ID}/...
즉, API ID를 이용하여 도메인별로 독립적인 URL을 사용한다. API ID는 Developer Console에서 확인할 수 있다 .
그림 1 API ID 발급 예
API ID를 아직 발급받지 않았다면 Developer Console에서 발급을 클릭해 발급받는다. 발급받은 API ID는 다음과 같이 사용한다.
- https://apis.worksmobile.com/kr1wwTrYrbIot/...
서비스 API
서비스 API 컨슈머키
서비스 API 컨슈머키는 API 호출 시 헤더에 포함해야 하는 값으로, Developer Console에서 확인할 수 있다.
그림 2 서비스 API 컨슈머키 발급 예
서비스 API 컨슈머키를 발급받기 전에 Redirect URL 등록을 클릭해 Redirect URL을 등록한다.
- https가 포함된 URL을 입력해야 한다.
- 필요한 경우 하위 도메인도 등록해야 한다(예: https://하위도메인.고객사도메인).
- Redirect URL은 최대 100개까지 등록할 수 있다.
- 등록된 Redirect URL은 서비스 API Authorization Code를 발급받을 때 전달하는 redirect_uri 파라미터와 일치하는지 확인할 때 사용된다.
서비스 API 컨슈머키를 아직 발급받지 않았다면 발급을 클릭해 발급받는다.
- Step 1에서 컨슈머키로 활용할 서비스 API 사용 범위를 정할 수 있다. 특정한 용도로만 사용을 제한해야 한다면 API를 선택 적용하는 것을 권장한다. 사용 범위에 따라 사용할 수 있는 서비스 API는 서비스 API 분류에서 확인할 수 있다.
- Step 2에서 컨슈머키로 발급되는 토큰의 유효 기간을 정할 수 있다. 7~365일 이내의 값을 설정할 수 있다.
- 유효 기간을 자동으로 연장하도록 설정하면 이 컨슈머키로 발급된 토큰을 사용할 때마다 유효 기간이 연장된다.
- 서비스 API 컨슈머키는 최대 5개까지 발급할 수 있다.
발급받은 컨슈머키는 소스 코드 내에서 다음과 같이 사용한다.
PostMethod method = new PostMethod(url);
method.setRequestHeader("consumerKey", "LQwDde6x8eV4ROOCOdSW");
서비스 API Authorization Code 발급
서비스 API 호출 시 Access Token을 헤더에 포함해야 하는데, Access Token을 구하기 위해서 Authorization Code를 먼저 발급받아야 한다. Authorization Code를 발급받으려면 로그인이 필요하므로 아래 URL을 반드시 화면으로 호출해야 한다.
Request URL
- https://auth.worksmobile.com/ba/{API ID}/service/authorize
HTTP Method
GET
Request
아래 항목을 GET으로 전달한다.
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
client_id | String | Y | 서비스 API 컨슈머키(예: LQwDde6x8eV4ROOCOdSW) |
redirect_uri | String | Y | Authorization Code 발급 후 전달할 고객사의 URL. URL인코딩되어 있음. 서비스 API 컨슈머키를 발급받을 때 등록한 Redirect URL과 일치해야 한다. |
state | String | Y | CSRF를 방지하기 위한 클라이언트 측의 인증값 |
domain | String | N | 도메인명(Lite 상품인 경우 그룹명). SSO 사용 시 필수. |
Response
NAVER WORKS 로그인 페이지가 실행되고 그 화면에서 로그인에 성공하면, Authorization Code를 발급하여 Request의 redirect_uri로 전달한다.
NAVER WORKS에 이미 로그인되어 있는 상태면, 로그인 페이지가 실행되지 않고 바로 Authorization Code를 발급하여 Request의 redirect_uri로 전달한다.
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
code | String | Y | Authorization Code Authorization Code는 일회성이고, 유효 기간은 1시간이다. |
state | String | Y | Authorization Code 발급 요청 시 전달한 state값 |
오류 발생
잘못된 파라미터로 호출하거나 로그인할 수 없는 도메인을 사용하거나 내부 오류가 발생할 경우 오류페이지에 메시지를 노출한다.
서비스 API Access Token 발급
서비스 API 호출 시 헤더에 포함하는 Access Token을 발급받는다. 발급받은 Access Token은 소스 코드 내에서 다음과 같이 사용한다.
주의
- Authorization 값으로 'Bearer'를 반드시 명시해야 하며, 'Bearer'와 'Token' 사이에 공백(space)을 빠트리지 않도록 주의한다.
PostMethod method = new PostMethod(url);
method.setRequestHeader("consumerKey", "LQwDde6x8eV4ROOCOdSW");
method.setRequestHeader("Authorization", "Bearer AAAAr1xaQrD3iGx2eyQ0/U3mu4OBJzC0HYNF");
Request URL
- https://auth.worksmobile.com/ba/{API ID}/service/token
HTTP Method
GET/POST
Request
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
client_id | String | Y | 서비스 API 컨슈머키(예: LQwDde6x8eV4ROOCOdSW) |
code | String | Y | Authorization Code |
domain | String | N | 도메인명(Lite 상품인 경우 그룹명). SSO 사용 시 필수. |
Response
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
errorCode | String | Y | 성공/실패에 대한 응답 코드 |
access_token | String | Y | Access Token. API 호출 시 헤더에 포함하는 값 |
refresh_token | String | Y | Refresh Token |
expire_in | String | Y | Access Token의 유효 기간 |
Error Code
오류코드 | 설명 |
---|---|
00 | 성공 |
107 | 파라미터 오류 |
502 | code로 accessToken 발급 시 오류 |
99 | 알 수 없는 오류 |
서비스 API Access Token 갱신
서비스 API Access Token이 만료되었을 경우, Access Token을 갱신할 때 사용한다.
Refresh Token은 Access Token 발급 시에 같이 발급된다.
Request URL
- 서비스: https://auth.worksmobile.com/ba/{API ID}/service/token/refresh
HTTP Method
GET/POST
Request
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
client_id | String | Y | 서비스 API 컨슈머키(예: LQwDde6x8eV4ROOCOdSW) |
refresh_token | String | Y | Refresh Token |
Response
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
errorCode | String | Y | 성공/실패에 대한 응답 코드 |
access_token | String | Y | Access Token. API 호출 시 헤더에 포함하는 값 |
expire_in | String | Y | Access Token의 유효 기간 |
Error Code
오류코드 | 설명 |
---|---|
00 | 성공 |
107 | 파라미터 오류 |
502 | refreshToken으로 accessToken 갱신 시 오류 |
99 | 알 수 없는 오류 |
서버 API
서버 API 컨슈머키
서버 API 컨슈머키는 API 호출 시 헤더에 포함해야 하는 값으로, Developer Console에서 확인할 수 있다.
그림 3 서버 API 컨슈머키 발급 예
서버 API 컨슈머키를 아직 발급받지 않았다면 발급을 클릭해 발급받는다.
- Step 1에서 컨슈머키로 활용할 서버 API 사용 범위를 정할 수 있다. 특정한 용도로만 사용을 제한해야 한다면 API를 선택 적용하는 것을 권장한다. 사용 범위에 따라 사용할 수 있는 서버 API는 서버 API 분류에서 확인할 수 있다.
- Partner API를 사용하려면 Step 1에서 전체 카테고리를 선택해야 한다.
- Step 2에서 컨슈머키로 발급되는 토큰의 유효 기간을 정할 수 있다. 7~365일 이내의 값을 설정할 수 있다.
- 유효 기간을 자동으로 연장하도록 설정하면 이 컨슈머키로 발급된 토큰을 사용할 때마다 유효 기간이 연장된다.
- 서버 API 컨슈머키는 최대 5개까지 발급할 수 있다.
- 서버 API 컨슈머키 삭제 시 연결된 Server list(IP 방식, ID 방식)의 값이 함께 삭제된다.
발급받은 컨슈머키는 소스 코드 내에서 다음과 같이 사용한다.
PostMethod method = new PostMethod(url);
method.setRequestHeader("consumerKey", "dz0jtXyXc9Zo953HdjZA");
서버 API Server Token
서버 API Server Token은 API 호출 시 헤더에 포함해야 하는 값으로, Developer Console에서 확인할 수 있다.
고정 IP 방식과 ID 등록 방식의 2가지 발급 방식이 있다.
Server Token(고정 IP 방식)
Server List(고정 IP 방식)에서 추가를 클릭하면 다음과 같이 IP를 등록하고 token을 발급받을 수 있는 화면이 실행된다.
그림 4 Token 발급 화면
- 서버명에는 이 서버를 구분할 수 있는 이름을 입력한다.
- Key 선택에는 연결할 서버 API 컨슈머키를 선택한다. 토큰 발급 후 다른 서버 API 컨슈머키로 변경할 수 없으므로 주의한다.
- IP에 API를 사용할 실제 서버의 IP를 입력한 후 발급을 클릭하면 token이 발급된다. IP에는 반드시 실제 서버의 IP를 입력해야 API 인증을 통과할 수 있다.
- 글로벌 IP를 여러 개 등록하거나 IP 범위를 지정할 수는 없다.
IP 등록 및 token 발급이 완료되면 다음과 같이 Server List에 항목이 나타난다.
그림 5 고정 IP 방식 Token 발급 예
IP를 클릭하면, 상세 화면이 나타나고, 그 화면에서 token을 가져올 수 있다.
Server Token(ID 등록 방식)
ID 등록 방식의 Server Token은 Developer Console에서 발급받은 서버 ID를 파라미터로 전달해
JWT(JSON Web Token RFC-7519)를 이용한 two-legged OAuth 2.0 API를 호출하면 발급받을 수 있다.
서버 ID 발급 및 비밀키 다운로드
- Server List(ID 등록 방식)에서 추가를 클릭하면 다음과 같이 token을 발급받을 수 있는 화면이 실행된다.
- 서버명을 입력하고 연결할 서버 API 컨슈머키를 선택하면 32자리 서버 ID가 발급된다.
- 이 서버 ID의 비밀키를 다운로드해서 보관한다.
그림 6 ID 등록 방식 서버 ID 추가 예
서버 ID는 다음과 같다.
f7eee8dbddd5430a96086068ab8b47d0
다운로드한 비밀키는 다음과 같은 형식이다.
-----BEGIN RSA PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCePC4qTZPJVBeo
IXTxkJx+Ny2Dg6mUSy5ec53Ennf6omFBctFZynKsG7/aJ4XFbkPBQskP4U9BBvSL
6iBurLgQ7uAbXbRzqbso5+lLJH9Asw0kkkMSJggRY5jaQwfp4l63Ll3LEC0vrbjL
SW4WFgPPBL1FyeHP9g06nkLINTHy++1csYXJXZqjkxNLYnx1Cdwj6+4L4q3HDqIn
IxNzryPaZgOj54I851IZhoy2JgOjMyouRl40pjWBUEh/N4ijoqxCfC3ZXlQmb+a0
A8fYyEhVmlL6mBMdgWdj9RiECXyy0Clmv5ZdTEzt4U7O482/nPmRh5stNyfx9QF9
oEfDmx2xAgMBAAECggEAUJqHSbVK2vujMVoZoBPyI7knzh57e7bwX9y1OTsgEuQ0
dopuajbeQx2/lPkdA30vtnq2wQgcvxsz5zHUY4xIFxgXwNjy2xhS5nt8M3Lb/7E1
uLNoxw3ofjMl4cjTdyiA5v8PeCk9W1Q7FhLJqSZ9ui7H240DIlRMWNfVXPb8ArHR
AjCB6gMIZhYDtQxq76mKxcVZgHnBB9I8dHcjvD+wfbGyX4H0RzTzCMNC4JrTKSIt
y51GMma+jhZ86vcwPQs6bHPBrEbZOw1ZWVMHJOc40lkGj0KzU9jjhguXr6BITLtz
HRrRFgdghpwdYTrUshLpCxJkK/I8UBUnXsAdISl7IQKBgQD155+FlO0Iy3htNS7E
J/uHuC7ExEK01utHgKOoP0pSXmDBmUkAitr0xbvhpnxEEk6bBZdIdhuF/HeXRcJU
T310PIRvIvtRq6bcK31UeelQKMRnp1I0ltj9J/+cutmScN9CbdqY2D9JoXCpk3h/
grhvlmjr68lINtzU8GxSMhffiwKBgQCkuy2TS4eOZnDTxD3nUpqsJugrwBW/IydP
ENhubhhIVUtBDPp/arFPDRJqfqgvjgeoY60L7mpo7uBWa4vwghFJBNDtRj2rKysK
HTI3zaz9QT/7FtYyxCgFY2lijDVv1RVIM91V+aregYfdgeer4HI54Kcv2eNZ2rz0
on6G809fMwKBgFC/DhK/JFaO+aximkivGFkokbLq/zyClh+UjijhH3aMpxjrTJ1w
+xUFGPyvvn5bxJQC8fpJTiBhFqQFtBobQAa7GIGl6wCWbOQ/I5hpr8Myn8uplcTP
A9GdIMJGWMtNZQJbMDygRafX6zbDxf2Y3xdFPI67jgy4dys1B1y2NkChAoGAcTnO
y61gkTpMVuJOAk++zJE5h8jRqb0J6ciUWuMFgcJOpXm8PBQjp0g+3kAMbhNbpBxO
9yJ6tYFrZTsqxrdAFkZfLJfZD2vue1cyCzUtsC1HQtihhedZ8sovx3LD0AhQRn6P
peaj0aiKsG/3wyXUnX+SqstC/6Hfuu5ttWhLqA0CgYBTNRjoRdAJcKzlkdO5Pt/d
Mm/NffywAmsaCrEigGHGs2Kgcz8D2ZrqU8SMUQJODIddAtA7IWHORIvbCIvd2ZHT
k6DEtV+QtGpXZSsIwi6Dl62oive4nZ/9yGxWYRIXugvvVMcJVGQdH+INz5/9X30/
j0+0lyfdNTYtuXlMebHUag==
-----END RSA PRIVATE KEY-----
Server Token 발급을 위한 API 호출
Server Token을 발급받으려면 다음과 같은 과정을 실행해야 한다.
그림 7 Server Token 요청 sequence diagram
1. JWT 생성 - RFC-7519
JWT는 다음과 같은 형식을 만족해야 한다.
{header BASE64 인코딩}.{JSON Claim set BASE64 인코딩}.{signature BASE64 인코딩}
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9
.eyJpc3MiOiI0NmM0ZjI4MWY4MTE0OGM5Yjg0NmM1OTI2MmFlNTg4OCIsImlhdCI6MTQ5MjUwNDY3MiwiZXhwIjoxNDkyNTA2NDcyfQ
.aICZ8qvYFKSJT6VdrmEcs6siCHaCgFkqpVs5VALKhf98sZjguppp-bOy9MpNlNepfSF0IyrdG3JavHLUYBz1NEVVZJwEm39f7gODmnt-_kGfDo1YtOqnclP1gM8oiObF2AH2Eneh3XuyeVeZbKAZmp6I_ZOf8AGayVVui61CsDPbUIPZSKUnbW1-vlXboTlojxJhvHznpYSNanHSrg5Nht2VO5sOeclEgPqg3J8Y6XOT60u8Morv5wHUy8a0QyO0yWCT5OJdXeVj94qfDAM15a1Puw9PfQOPm7QhOarvCJ8cOSqo9PHluq9-KZ1WXmfxSo-_itTb8y2YRT3kd21maQ
header에 RSA SHA-256 알고리즘을 명시해야 한다.
{"alg":"RS256","typ":"JWT"}
이 값을 BASE64 인코딩하면 다음과 같다.
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
JSON Claim set의 정보는 다음과 같다.
파라미터 | 설명 |
---|---|
iss | Developer Console에서 발급받은 서버 ID |
iat | JWT 생성 시간. Unix time으로 나타내며, 단위는 초(sec)이다. |
exp | JWT 만료 시간. Unix time으로 나타내며, 단위는 초(sec)이다. |
예를 들어 다음과 같은 상황일 때
- 서버 ID: 46c4f281f81148c9b846c59262ae5888
- JWT 생성 시간: 2017-04-18 17:37:52
- JWT 만료 시간: 2017-04-18 18:07:52 (30분 후 만료)
JSON 형식으로 나타내면 다음과 같다.
{
"iss":"46c4f281f81148c9b846c59262ae5888",
"iat":1492504672,
"exp":1492506472
}
이 값을 BASE64 인코딩하면 다음과 같다.
eyJpc3MiOiI0NmM0ZjI4MWY4MTE0OGM5Yjg0NmM1OTI2MmFlNTg4OCIsImlhdCI6MTQ5MjUwNDY3MiwiZXhwIjoxNDkyNTA2NDcyfQ
header와 Claim set을 .으로 조합하면 {header BASE64 인코딩}.{JSON Claim set BASE64 인코딩}은 다음과 같다.
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI0NmM0ZjI4MWY4MTE0OGM5Yjg0NmM1OTI2MmFlNTg4OCIsImlhdCI6MTQ5MjUwNDY3MiwiZXhwIjoxNDkyNTA2NDcyfQ
2. JWT 전자 서명(signature) - RFC-7515
전자 서명은 JWS(JSON Web Signature RFC-7515) 규약을 따른다.
앞서 생성했던 JWT header와 body의 byte array를 Developer Console에서 다운로드한 비밀키로 RSA SHA-256 알고리즘(header에서 정의한 RS256)을 사용하여 암호화하고 BASE64 인코딩한다.
위에서 만들어진 {header BASE64 인코딩}.{JSON Claim set BASE64 인코딩}을 전자 서명하여 BASE64 인코딩하면 {signature BASE64 인코딩}은 다음과 같다.
aICZ8qvYFKSJT6VdrmEcs6siCHaCgFkqpVs5VALKhf98sZjguppp-bOy9MpNlNepfSF0IyrdG3JavHLUYBz1NEVVZJwEm39f7gODmnt-_kGfDo1YtOqnclP1gM8oiObF2AH2Eneh3XuyeVeZbKAZmp6I_ZOf8AGayVVui61CsDPbUIPZSKUnbW1-vlXboTlojxJhvHznpYSNanHSrg5Nht2VO5sOeclEgPqg3J8Y6XOT60u8Morv5wHUy8a0QyO0yWCT5OJdXeVj94qfDAM15a1Puw9PfQOPm7QhOarvCJ8cOSqo9PHluq9-KZ1WXmfxSo-_itTb8y2YRT3kd21maQ
최종적으로 완성된 JWT {header BASE64 인코딩}.{JSON Claim set BASE64 인코딩}.{signature BASE64 인코딩}은 다음과 같다.
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiI0NmM0ZjI4MWY4MTE0OGM5Yjg0NmM1OTI2MmFlNTg4OCIsImlhdCI6MTQ5MjUwNDY3MiwiZXhwIjoxNDkyNTA2NDcyfQ.aICZ8qvYFKSJT6VdrmEcs6siCHaCgFkqpVs5VALKhf98sZjguppp-bOy9MpNlNepfSF0IyrdG3JavHLUYBz1NEVVZJwEm39f7gODmnt-_kGfDo1YtOqnclP1gM8oiObF2AH2Eneh3XuyeVeZbKAZmp6I_ZOf8AGayVVui61CsDPbUIPZSKUnbW1-vlXboTlojxJhvHznpYSNanHSrg5Nht2VO5sOeclEgPqg3J8Y6XOT60u8Morv5wHUy8a0QyO0yWCT5OJdXeVj94qfDAM15a1Puw9PfQOPm7QhOarvCJ8cOSqo9PHluq9-KZ1WXmfxSo-_itTb8y2YRT3kd21maQ
이렇게 만들어진 JWT를 아래 Token 요청에서 assertion 파라미터로 전달한다.
참고
- JWT를 만들 때 사용할 수 있는 라이브러리가 있으므로 직접 만들지 말고 라이브러리를 사용하는 것을 권장한다.
- JAVA의 경우 다음과 같은 라이브러리를 사용할 수 있다.
https://github.com/jwtk/jjwt
https://github.com/auth0/java-jwt
https://bitbucket.org/b_c/jose4j/wiki/Home
https://bitbucket.org/connect2id/nimbus-jose-jwt/wiki/Home
3. NAVER WORKS 인증 서버로 Token 요청 - RFC-7523
Request URL
- https://auth.worksmobile.com/b/{API ID}/server/token
HTTP Method
POST
content-type : application/x-www-form-urlencoded; charset=UTF-8
Request
아래 항목을 POST로 전달한다.
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
grant_type | String | Y | URL 인코딩된 String값. urn:ietf:params:oauth:grant-type:jwt-bearer |
assertion | String | Y | JWT |
POST /b/jp1PrJVEbjpFi/server/token HTTP/1.1
Host: auth.worksmobile.com
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiI0NmM0ZjI4MWY4MTE0OGM5Yjg0NmM1OTI2MmFlNTg4OCIsImlhdCI6MTQ5MjUwNDY3MiwiZXhwIjoxNDkyNTA2NDcyfQ.aICZ8qvYFKSJT6VdrmEcs6siCHaCgFkqpVs5VALKhf98sZjguppp-bOy9MpNlNepfSF0IyrdG3JavHLUYBz1NEVVZJwEm39f7gODmnt-_kGfDo1YtOqnclP1gM8oiObF2AH2Eneh3XuyeVeZbKAZmp6I_ZOf8AGayVVui61CsDPbUIPZSKUnbW1-vlXboTlojxJhvHznpYSNanHSrg5Nht2VO5sOeclEgPqg3J8Y6XOT60u8Morv5wHUy8a0QyO0yWCT5OJdXeVj94qfDAM15a1Puw9PfQOPm7QhOarvCJ8cOSqo9PHluq9-KZ1WXmfxSo-_itTb8y2YRT3kd21maQ
Response
파라미터 | 타입 | 설명 |
---|---|---|
access_token | String | Server Token |
token_type | String | Bearer |
expires_in | String | Server Token의 유효 기간 유효 기간은 24시간(86400초)이며 이 시간이 지나면 자동으로 만료된다. 단, Developer Console에 Server API Consumer Key의 '토큰 자동연장'이 설정되어 있고 24시간이 지나기 전에 Server API를 사용했다면 사용한 시점부터 24시간만큼 자동 연장된다. |
{
"access_token":"AAAA/KM+LBNADalmequDgJsBc6pt9o+c2VydmVySWQ+vDbccdzZjec5Hy+dWnUz79laysFBlEg1MmzLuu/6/4l61R4yZTWlGrYcv2KjPPS4JfmYGDctUa95bxP+/YLGk+bVTPt/SjhLCpFnJnrltTmkMLPgrrGxDWM1gJ1tM8y4oBBJWfccN45SfjINOG9wwSAdF7r7+XykkmrcF9AGL1c7hufaVJAl6/ErtkidUXkdW3Dd5QYHm97XOj5n1pWmtJ4+IrAlsKqGqKlUcvRRMHes06s6FD+4pUv7JXnuWnx6/BVqaloeDFCU3vD4jfUOn2UQNIJakvcxknwiCqvoNtcjUzQ58oQ4IG0YWNltI=",
"token_type":"Bearer",
"expires_in":86400
}
주의
- 발급받은 access_token을 24시간 안에 사용하지 않으면 자동으로 만료되므로 서버 ID 발급 방식의 경우 꼭 하루에 한 번은 토큰을 발급받아야 한다.
- access_token을 발급받을 때 발급받은 시점과 토큰 정보를 같이 저장하고, Server API를 사용할 때 이 토큰의 유효성을 확인(24시간이 지나지 않았는지)하는 것을 권장한다.
- 유효 기간 내여도 access_token을 재발급받으면 기존 토큰은 자동으로 만료된다.
오류 발생
응답값으로 access_token이 없으면 오류가 발생한다.
잘못된 파라미터로 호출하거나 만료된 JWT를 이용하는 등 정상적이지 않은 상황에서는 다음과 같은 형태의 response를 반환한다.
{
"message":"jwt already expired",
"detail":"JWT expired at 2017-04-19T13:57:58Z. Current time: 2017-04-19T14:27:52Z,
a difference of 1794480 milliseconds. Allowed clock skew: 0 milliseconds.",
"code":"31"
}
Server Token의 사용
발급받은 토큰은 소스 코드 내에서 다음과 같이 사용한다.
주의
- Authorization 값으로 'Bearer'를 반드시 명시해야 하며, 'Bearer'와 'Token' 사이에 공백(space)을 빠트리지 않도록 주의한다.
PostMethod method = new PostMethod(url);
method.setRequestHeader("consumerKey", "dz0jtXyXc9Zo953HdjZA");
method.setRequestHeader("Authorization", "Bearer AAAA5IdUiCj5emZowcf49VRu7qbb548g6aGE");