Как использовать делегированную учетную запись службы (которая уже прошла через получение JWT) для изменения общедоменных писем? - PullRequest
0 голосов
/ 03 апреля 2019

То, что я сейчас пытаюсь достичь, - это написать инструмент для обновления всех адресов электронной почты в моем домене с помощью заданной индивидуальной подписи, в которой будут обновляться данные на основе файла CSV, из которого он в настоящее время рисует. В конечном итоге я надеюсь получить всех пользователей в домене, получить сведения о каждом пользователе из Справочника, а затем обновить эти данные, не требуя файла CSV.

На данный момент, однако, возникает более фундаментальная проблема, даже после того, как я подготовил токен доступа после прохождения всего сложного потока, который создает JWT и получает токен доступа через отправку запроса POST конечной точке OAuth2 ( процесс не показан, но он сохранен как accessToken ниже), как мне применить этот токен доступа, созданный с использованием учетных данных моей предварительно подготовленной учетной записи службы, чтобы фактически изменить соответствующую подпись электронного письма, которое я в настоящее время редактирую? (адрес электронной почты ниже CURRENTEMAIL)

function updateSignature(contentToUpdate){
        gapi.auth.setToken(accessToken);
        // https://developers.google.com/gmail/api/v1/reference/users/settings/sendAs/patch 
        return gapi.client.gmail.users.settings.sendAs.patch ({
            //"auth": accessToken, 
            "userId": 'me',
            "sendAsEmail": CURRENTEMAIL,
            "resource": {
              "signature": contentToUpdate
            }
          }).then(function(response) {

                      console.log("Response", response);
                    },
        function(err) { console.error("Execute error", err); 
        });
    }

До сих пор я получал ошибки idpiframe_initialization_failed при попытке использовать идентификатор клиента учетной записи службы во время инициализации, поэтому я считаю, что это не то, что нужно делать с использованием ключа, и использование вышеописанного метода только сказало мне, что мне нужно отправляйте любые электронные письма, которые не являются моими в настоящий момент зарегистрированными (например, я joey@mydomain.com, в то время как мой измененный адрес электронной почты - testaccount@mydomain.com), а не одним из моих псевдонимов, который не имеет смысла в долгосрочной перспективе запустить. Кто-нибудь знает какие-либо другие способы решения этой проблемы?

Я также пытался изменить идентификатор пользователя на адрес электронной почты учетной записи службы, но это приводило только к ошибкам выполнения, когда указывалось, что в делегировании было отказано.

(index):400 Execute error 
{result: {…}, body: "{↵ "error": {↵  "errors": [↵   {↵    "domain": "gl…: "Delegation denied for (redacted)"↵ }↵}↵", headers: {…}, status: 403, statusText: null}
body: "{↵ "error": {↵  "errors": [↵   {↵    "domain": "global",↵    "reason": "forbidden",↵    "message": "Delegation denied for (redacted)"↵   }↵  ],↵  "code": 403,↵  "message": "Delegation denied for (redacted)"↵ }↵}↵"
headers: {date: "Wed, 03 Apr 2019 06:01:10 GMT", content-encoding: "gzip", server: "GSE", content-type: "application/json; charset=UTF-8", vary: "Origin, X-Origin", …}
result: {error: {…}}
status: 403
statusText: null
__proto__: Object

Я изучал эту тему в течение последних нескольких дней, и это единственный метод, который был задокументирован любыми способами, но он влияет только на псевдоним учетной записи gmail, в которой я в данный момент зарегистрирован (например, если я должен был войти в систему как joey@mydomain.com и изменить подпись testaccount@mydomain.com, пока он указан как псевдоним joey@mydomain.com, обновленная подпись отражается там, но не тогда, когда я фактически захожу как testaccount @ mydomain.com)

Я неправильно использую токен доступа или что я должен делать иначе?

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 04 апреля 2019

Разобрался, как это сделать.По-видимому, лучший способ игнорировать различные опции -limited-language - просто выполнять HTTP-запросы с использованием jquery.

Это особенно полезно, учитывая, что в настоящее время я не использую Node, а Python не 'это действительно служит моим целям, учитывая, что уже наполовину установлено, что мне нужно будет работать с файлом HTML, который в первую очередь содержит пользовательскую подпись.

В любом случае я решил эту проблему, отправив PATCHзапрос к

[insert google endpoint here]?access_token=[insert access token obtained via JWT flow]

Имеет смысл, так как все эти специфичные для языка API в основном просто выполняют http-запросы в фоновом режиме для нас.

Надеюсь, это поможет любому, кто может столкнуться ста же проблема.

...