Как закодировать секреты приложения и токены для аутентификации Facebook в скриптах Google, не имея учетных данных в скрипте?

У меня есть сценарий, который можно успешно получить из Facebook oAuth API:

function getToken() {
  var appId = "XXXXXX"; 
  var clientSecret = "XXXXXXXXXXXX";
  var url = "https://graph.facebook.com/oauth/access_token?client_id="+appId+"&client_secret="+clientSecret+"&grant_type=client_credentials";
  var response = UrlFetchApp.fetch(url);
  var queryResult = response.getContentText(); 
  var token = queryResult.slice(13);
  return(token);
}

Вопрос в том, что я предпочитаю не иметь свои appId и clientSecret в теле моего скрипта, так что есть ли способ, где я могу это закодировать, не имея моих учетных данных в виде обычного текста?


person turtlepower    schedule 23.11.2016    source источник
comment
Маркер доступа приложения никогда не должен использоваться в клиентском коде. Если вам нужно использовать токен доступа к приложению, вам нужно сделать это на стороне сервера. Если вместо этого вы можете использовать токен доступа пользователя, позвольте пользователям сначала войти в систему и использовать свой токен.   -  person CBroe    schedule 23.11.2016


Ответы (2)


Вручную введите ключи и секрет в редактор сценария как «Свойство сценария» (Файл> Свойства проекта> Свойства сценария), а затем получите к ним доступ в коде с помощью Служба свойств.

Например, вы можете вручную добавить:

property:APP_ID, value:'XXXXXXXX'

Затем войдите в него в коде с помощью

var appId = PropertiesService.getScriptProperties().getProperty('APP_ID')

Этот метод работает, если вы хотите поделиться скриптом где-нибудь, например, на Github, или если вы только предоставили доступ для просмотра скрипту, и в этом случае свойства скрипта не видны (вы не должны видеть SP в этот скрипт. Если вы предоставите доступ на редактирование другим пользователям, они смогут видеть SP, но тогда вы можете использовать свойства пользователя.

person Andrew Roberts    schedule 23.11.2016
comment
Спасибо! Может ли пользователь затем перейти к свойствам проекта - ›свойствам скрипта, чтобы увидеть его? - person turtlepower; 23.11.2016
comment
Обновил мой ответ, чтобы добавить варианты использования. - person Andrew Roberts; 23.11.2016

Для этого вам необходимо установить последнюю версию facebook SDK, которая использует пространство имен и защищенные методы для получения данных facebook с помощью графического API. Ниже приведен пример, над которым я работал:

require_once ROOT . '/vendor/Facebook/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
class FacebookComponent extends Component
{
    public $app_id;
    public $app_secret;
    public $default_graph_version;

    public function __construct()
    {
    $this->app_id = "XXXXXXXXXXXXXXX";
    $this->app_secret = "XXXXXXXXXXXXXXXXXXXXX";
    $this->default_graph_version = "v2.5"; // For Offerz-develop app

    }
    public function getFacebookConn(){
    $app_id = $this->app_id;
    $app_secret = $this->app_secret;
    $fb = new \Facebook\Facebook([
        'app_id' => $app_id,
        'app_secret' => $app_secret,
        'default_graph_version' => 'v2.5',
    ]);
    return $fb;

    }
    }
person Vishal J    schedule 23.11.2016
comment
вы все еще жестко запрограммировали секреты и использовали неправильный язык. - person Zig Mandel; 23.11.2016