Использование пользовательских библиотек из скрипта приложений в App Maker: проблема авторизации - PullRequest
0 голосов
/ 20 февраля 2019

Я использую этот код в скрипте Apps

function getUserObjByEmail(email){

    // Same as using AdminDirectory class.
    var apiUrl = "https://www.googleapis.com/admin/directory/v1/users/"+email+"?fields=id";
    var token = ScriptApp.getOAuthToken();
    var header = {"Authorization":"Bearer " + token};
    var options = {
        "method": "GET",
        "headers": header
    };

    var response = JSON.parse(UrlFetchApp.fetch(apiUrl, options));
    return response;
}

, который я запускаю как функцию из проекта App Maker.Когда я пользуюсь приложением, все идет гладко, поскольку у меня есть роль администратора (думаю, не уверен), но проблема возникает, когда другие обычные пользователи в нашем домене начинают использовать развернутое приложение создателя приложений.Я проверил журналы сервера и его полное это сообщение:

Exception: Request failed for 
https://www.googleapis.com/admin/directory/v1/users/email@domain.com?fields=id 
returned code 403. 
Truncated server response: { "error": { "errors": [ { "domain": "global",
"reason": "forbidden", "message": "Not Authorized to access this
resource/api" ... (use muteHttpExceptions option to examine full response)

Есть идеи, как это исправить?Я вручную добавил необходимые области для библиотеки сценариев приложений и добавил следующее:

"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/admin.directory.user"

1 Ответ

0 голосов
/ 20 февраля 2019

Причина, по которой это происходит, в том, что у вас есть права администратора, в противном случае вы получите то же сообщение об ошибке.Другие пользователи не имеют прав администратора, поэтому они получают ошибку.Чтобы решить эту проблему, вы можете либо развернуть приложение, выполняющее его как разработчика, либо использовать учетную запись службы для олицетворения администратора и выполнения процесса.

Относительно первого подхода вы можете найти больше информации здесь https://developers.google.com/appmaker/security/identity.

Что касается второго подхода, вы можете использовать следующую библиотеку сценариев приложения https://github.com/gsuitedevs/apps-script-oauth2#using-service-accounts

Более того, если вам не требуется получать информацию о пользовательских схемах, то вы можете просто использовать каталогмодель и это должно работать для всех пользователей.Проверьте ссылку здесь: https://developers.google.com/appmaker/models/directory

...