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 발급 예

    그림 1 API ID 발급 예

    API ID를 아직 발급받지 않았다면 Developer Console에서 발급을 클릭해 발급받는다. 발급받은 API ID는 다음과 같이 사용한다.

    • https://apis.worksmobile.com/kr1wwTrYrbIot/...

    서비스 API

    서비스 API 컨슈머키

    서비스 API 컨슈머키는 API 호출 시 헤더에 포함해야 하는 값으로, Developer Console에서 확인할 수 있다.

    ALT

    그림 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 컨슈머키 발급 예

    그림 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 발급 화면 그림 4 Token 발급 화면

    • 서버명에는 이 서버를 구분할 수 있는 이름을 입력한다.
    • Key 선택에는 연결할 서버 API 컨슈머키를 선택한다. 토큰 발급 후 다른 서버 API 컨슈머키로 변경할 수 없으므로 주의한다.
    • IP에 API를 사용할 실제 서버의 IP를 입력한 후 발급을 클릭하면 token이 발급된다. IP에는 반드시 실제 서버의 IP를 입력해야 API 인증을 통과할 수 있다.
    • 글로벌 IP를 여러 개 등록하거나 IP 범위를 지정할 수는 없다.

    IP 등록 및 token 발급이 완료되면 다음과 같이 Server List에 항목이 나타난다.

    고정 IP 방식 Token 발급 예

    그림 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 추가 예

    그림 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을 발급받으려면 다음과 같은 과정을 실행해야 한다.

    1. JWT 생성 - RFC-7519
    2. JWT 전자 서명(signature) - RFC-7515
    3. NAVER WORKS 인증 서버로 Token 요청 - RFC-7523

    그림 7 Server Token 요청 sequence diagram

    그림 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");