CloudScript에서 웹후크 호출하기

CloudScript의 잘 알려지지 않은 기능 중 하나는 REST(표준 Representational State Transfer) 호출을 사용하여 웹 API 엔드포인트에서 웹후크 호출을 수행할 수 있다는 것입니다.

참고 항목

가능하면 최신 CloudScript 함수를 사용하여 웹훅을 호출하는 것이 좋습니다.

그러면 타이틀이 기본 정보 서비스를 호출할 수 있지만, 귀하가 소유한 끝점으로 커뮤니케이션을 확보하기 위해 더욱 복잡한 시나리오(예: OAuth 사용) 가능하게 합니다.

이 자습서에서는 안전하지 않거나안전한 시나리오 CloudScript에서 Webhook 호출을 만드는 방법을 설명합니다.

참고 항목

아웃바운드 CloudScript 호출에 사용되는 IP 주소를 허용 목록에 추가해야 하는 경우 개발자 포털의 API 기능 페이지에서 'PlayFab 고정 IP 접두사 및 주소' 섹션을 참조할 수 있습니다.

REST 호출로서 CloudScript에서 웹후크 호출의 구조는 간단합니다. 지정할 요소들:

  • URL 끝점.
  • REST 메소드(게시, 받기, 올리기, 또는 삭제).
  • 헤더는 필수입니다.
  • 콘텐츠 타입(가장 일반적으로는 응용 프로그램/JSON).
  • 콘텐츠 자체(본체).

예컨대, 서버측 논리의 버전 번호를 받기 위한 기본 웹 API 호출은 아래 제공된 예처럼 보일 수도 있습니다.

// CloudScript
var url = "http://api.yoursite.com/playfab_call/GetVersion";
var method = "post";
var contentBody = "";
var contentType = "application/json";
var headers = {};
var responseString =  http.request(url,method,contentBody,contentType,headers);

반응의 본체는 스트링파이 형식으로 반환되므로 귀하는 그 후에 그것을 스크립트의 나머지 부분에 사용할 수 있습니다.

이 사례에서 우리는 버전을 쿼리하고 있었으므로 귀하는 여기 제공된 것처럼 log에 반응을 작성할 수 있을 것입니다.

// CloudScript
log.info(responseString);

CloudScript 실행 끝에서 클라이언트에 대한 반응은 아래 제공된 이 예처럼 보일 수 있습니다.

//HTTP Response
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "FunctionName": "MyScript",
        "Revision": 23,
        "FunctionResult": true,
        "Logs": [
        {
            "Level": "Info",
            "Message": "{\"version\": 3}"
        }],
        "ExecutionTimeSeconds": 0.4309841,
        "MemoryConsumedBytes": 29608,
        "APIRequestsIssued": 0,
        "HttpRequestsIssued": 1
    }
}

그러나 통신해야 하는 보안서비스가 있는 경우 ID를 설정하기 위해 먼저 자격 증명을 해당 서비스와 교환해야 합니다.

OAuth 솔루션의 경우, 그것은 클라이언트 ID 및 암호를 사용하여 소지자 액세스 토큰을 요청하는 것을 의미합니다. 이는 특정 OAuth 구현에 따라 다르지만 호출은 다음 예제와 같이 표시될 수 있습니다.

//CloudScript
var url = "https://api.yoursite.com/playfab_call/request_token";
var method = "post";
var contentBody = "grant_type=client_credentials";
var contentType = "application/x-www-form-urlencoded";
var headers = {};
headers["client_id"] = clientId;
headers["client_secret"] = clientSecret;

var tokenResponse =  http.request(url,method,contentBody,contentType,headers);

적절한 응답이 제공되면 그 때 응답에서 bearer_access_token 구문 분석을 할 수 있습니다(다시 말하지만 이 OAuth 구현의 세부 사항에 따라 달라지지만 이 형식의 인증에 대한 매우 일반적인 패턴임).

//CloudScript
var parsedData = JSON.parse(tokenResponse);
var bearer_access_token = parsedData["access_token"];

그러면 귀하는 bearer_access_token을 제공함으로써 OAuth 보안 기능을 호출할 수 있을 것입니다.

//CloudScript
var url = "https://api.yoursite.com/playfab_call/do_action";
var method = "post";
var contentBody = customActionBody;
var contentType = "application/json";
var headers = {};
headers["authorization"] = "Bearer " + bearer_access_token;

따라서 이 경우의 기본 패턴은 호출을 위해 고유 소지자 액세스 토큰을 얻은 다음 그것을 사용해 해당 호출을 확보하기 위해 귀하가 응용 프로그램의 클라이언트 ID 및 암호를 사용하는 것입니다.

보시다시피 이러한 호출은 모두 중간자 공격을 방지하기 위해 SSL을 사용해 이루어질 것입니다.

CloudScript에서 HTTP 호출을 사용하여 타이틀을 위해 필요한 다른 웹 API를 호출할 수 있습니다. 그러면 타이틀 기능을 PlayFab이 직접 제공하는 것 이상으로 확장할 수 있으므로 귀하 자신의 맞춤 서비스를 만들어 사용하거나 심지어 다른 것에 액세스할 수 있는 옵션이 생깁니다.

이 모두가 CloudScript 내에서 발생하므로 그것은 그러한 호출을 하기 위한 서버 권한 컨텍스트를 제공합니다. 즉, CloudScript에서 필요한 보호 기능을 통해 플레이어가 부정 행위를 하거나 피해야하는 기능과 데이터에 액세스하는 것을 방지할 수 있습니다.