/// <summary>
        /// Method for a server to validate a client provided EntityToken. Only callable by the title entity.
        /// </summary>
        public async Task <PlayFabResult <ValidateEntityTokenResponse> > ValidateEntityTokenAsync(ValidateEntityTokenRequest request, object customData = null, Dictionary <string, string> extraHeaders = null)
        {
            var requestSettings = apiSettings ?? PlayFabSettings.staticSettings;
            var entityToken     = request?.AuthenticationContext?.EntityToken ?? authenticationContext.EntityToken;

            if (entityToken == null)
            {
                throw new PlayFabException(PlayFabExceptionCode.EntityTokenNotSet, "Must call GetEntityToken before calling this method");
            }

            var httpResult = await PlayFabHttp.DoPost("/Authentication/ValidateEntityToken", request, "X-EntityToken", entityToken, extraHeaders, requestSettings);

            if (httpResult is PlayFabError)
            {
                var error = (PlayFabError)httpResult;
                PlayFabSettings.GlobalErrorHandler?.Invoke(error);
                return(new PlayFabResult <ValidateEntityTokenResponse> {
                    Error = error, CustomData = customData
                });
            }

            var resultRawJson = (string)httpResult;
            var resultData    = PluginManager.GetPlugin <ISerializerPlugin>(PluginContract.PlayFab_Serializer).DeserializeObject <PlayFabJsonSuccess <ValidateEntityTokenResponse> >(resultRawJson);
            var result        = resultData.data;

            return(new PlayFabResult <ValidateEntityTokenResponse> {
                Result = result, CustomData = customData
            });
        }