api/token 세션 시작및 종료를 위한 권한 토큰 가져오기 api/register 유저 등록 api/start_session 게임 준비 api/end_session 게임 종료 api/start_game 게임 시작 Bearer Authentication란? API에 접속하기 위해서는 access token을 API 서버에 제출해서 인증을 해야 합니다. 이 때 사용하는 인증 방법이 Bearer Authentication 입니다. 이 방법은 OAuth를 위해서 고안된 방법이고, RFC 6750에 표준명세서가 있습니다. 사용법 예를들어 api 서버가 server.example.com이고, 접근해야 하는 path가 resource이고, access token이 mF_9.B5f-4.1JqM라면 아래와 같이 헤더 값을 만들어서 전송하면 됩니다. GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer mF_9.B5f-4.1JqM 예제 각 언어별 사용법은 아래와 같습니다. Web browser JavaScript ajax를 위해서 도입된 fetch api를 이용한다면 아래와 같이 하면 됩니다. // header 정보를 추가합니다. var myHeaders = new Headers(); myHeaders.append("Authorization", "Bearer mF_9.B5f-4.1JqM"); fetch('https://server.example.com/resource',{ "headers":myHeaders }).then(function(res){ // 서버의 응답이 json인 경우 아래의 코드를 통해서 js의 객체로 변환된 결과를 얻을 수 있습니다. return res.json(); }).then(function(data){ // json으로 변환된 결과를 출력합니다. console.log(data); }); Node.js Node.js에는 fetch api가 없습니다만, node-fetch를 통해서 fetch api와 동일한 코드로 서버에 접속할 수 있습니다. https://github.com/bitinn/node-fetch Python3 import requests, json URL = "https://server.example.com/resource" response = requests.get(URL,headers={"Authorization":"Bearer mF_9.B5f-4.1JqM"}) print(json.loads(response.text)) php composer를 이용해서 Guzzle을 설치합니다. # Install Composer curl -sS https://getcomposer.org/installer | php php composer.phar require guzzlehttp/guzzle 'https://server.example.com' ]); $response = $client->request('GET', '/resource',[ 'headers'=>[ 'Authorization' => 'Bearer mF_9.B5f-4.1JqM' ] ]); print((string)$response->getBody()); print_r(json_decode($response->getBody(), true)); ?> curl curl 'https://server.example.com/resource' -H 'authorization: Bearer mF_9.B5f-4.1JqM' -----------관리자 token 발행 http://127.0.0.1:5000/champs/api/token curl -X 'POST' \ 'http://127.0.0.1:5000/champs/api/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=&username=관리자아이디&password=관리자비번&scope=&client_id=&client_secret=' Response body (API 호출 토큰 반환) { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTY2NDkxODc2N30.5AhU7cr9Kp-N04Acc5TtGkMy34sGMyAeI_YjdziNcKQ", "token_type": "bearer" } --------- 유저아이디 등록 http://127.0.0.1:5000/champs/api/register curl -X 'POST' \ 'http://127.0.0.1:5000/champs/api/register' \ -H 'accept: application/json' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTY2NDkxODg5Mn0.9cov4mkfLzMkMFRsvs_TlIlTTAEWlky74fTrcSMegtQ' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'id=등록하려는유저아이디&password=등록하려는유저비번&nickname=player' Response body(유저 실행 토큰 반환) Download { "result": "success", "detail": "가입을 축하 드립니다", "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbl9wbGF5ZXIyIiwiaG9zdCI6IjEyNy4wLjAuMSIsImV4cCI6MTg0NDkwMDkyM30.AxndtOibn5VCd1wDglQc5GANbIdk494Cd7lH2sugVZA", "token_type": "bearer" } ---------유저 세션시작 ( 크레딧 설정 ) http://127.0.0.1:5000/champs/api/start_session curl -X 'POST' \ 'http://127.0.0.1:5000/champs/api/start_session' \ -H 'accept: application/json' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTY2NDkxODg5Mn0.9cov4mkfLzMkMFRsvs_TlIlTTAEWlky74fTrcSMegtQ' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'username=유저아이디&credit=유저크레딧' Response body ( 유저 토큰 반환 ) Download { "result": "success", "credit": 10000, "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbl9wbGF5ZXIyIiwiaG9zdCI6IjEyNy4wLjAuMSIsImV4cCI6MTg0NDkwMTE3OX0.YJXKBF21nV16HHnepuE-SY2NFRHHCt5bbWwUqBRlmns", "token_type": "bearer" } ------------- 유저 게임시작 curl -X 'GET' \ 'http://127.0.0.1:5000/champs/api/start_game?session_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbl9wbGF5ZXIyIiwiaG9zdCI6IjEyNy4wLjAuMSIsImV4cCI6MTg0NDkwMTE3OX0.YJXKBF21nV16HHnepuE-SY2NFRHHCt5bbWwUqBRlmns' \ -H 'accept: application/json' Response body 페이지 컨텐츠 반환 ----------- 유저 세션 종료 (크레딧 반환) Curl curl -X 'POST' \ 'http://127.0.0.1:5000/champs/api/end_session' \ -H 'accept: application/json' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTY2NDkxODg5Mn0.9cov4mkfLzMkMFRsvs_TlIlTTAEWlky74fTrcSMegtQ' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'username=유저아이디' Response body Download { "result": "success", "credit": 10000, "stack": 0 } 테스트 아이디 : csdeveloper1 1. start_session 호출시 credit 값은 유저보유머니로 넘기면 되나요? 보유 머니가 모자랍니다. 알을 더 충전 하세요. 이렇게 옵니다. 2. game_start 호출시 아래와 같이 응답이 옵니다. 어떻게 하나요?(You need to enable JavaScript to run this app) React App
테스트 아이디 : csdeveloper1 1. end_session에서 권한 없는 요청 이렇게 나옵니다. 세션 종료를 할 수 없습니다. 2. end_session을 호출하지 못하면 어떻게 되나요? 3. end_session 리턴값 중 stack는 무엇을 의미하나요? start_session에서 받은 access_token 값으로 start_game에 session_token 토큰값으로 해서 호출했습니다. 게임은 잘 들어가지나, 게임화면에서 표시되는 금액이 보내고 받은 credit 하고 맞지 않습니다. 확인해주세요. 1. 홀덤 start_session 호출시 credit 값은 뭔가요? 2. register 계속 호출하는 것외에 가입여부 파악할 방법이 있나요? 3. token 호출관련 - 유저마다 호출해야 하나요? - api 호출시마다 호출해서 토큰을 새로 받아야 하나요? 4. 베팅결과는 어떻게 받아야 하나요(콜백방식인지 아니면 저희가 호출을 해야 하나요)? 5. api 호출 순서 및 흐름을 설명해 주셨으면 합니다. 아래 응답들 어떻게 해야 하나요(값들은 넘겼습니다.)? 6. start_session 보유머니 모자른다고 나오는데, 관리 사이트서 뭘해야 하나요? 7. game_start Method Not Allowed 8. end_session Not authenticated