Существует требование Marketplace: если домен Google Apps for Work администратор устанавливает наше приложение для своего домена, после этого администратор и любые пользователи из своего домена не должны видеть экран аутентификации области при доступе к нашему приложению. Действие установки приложения для домена должно неявно делегировать полномочия на уровне домена для служебной учетной записи, связанной с нашим приложением.
Чтобы добиться такого поведения, я пытаюсь выполнить делегирование полномочий сервисному аккаунту работать от имени, то есть выдавать себя за пользователя, вошедшего в систему.
Фрагмент кода ниже показывает различные попытки заставить это работать. Единственное, что работает, — это передать адрес электронной почты суперпользователя домена в качестве параметра «sub» (AKA prn) при создании JWT. Однако это, по сути, повышает привилегии обычного пользователя домена до уровня суперпользователя, что не является желаемым эффектом.
var client = new googleapis.auth.JWT(
'<serviceaccount>@developer.gserviceaccount.com',
'localhost.pem',
null,
["https://www.googleapis.com/auth/admin.directory.user.readonly"],
// null - // 403 not auth
// {'userId' : '[email protected]'} // 403 not auth
// {'userId' : 'me'} // 403 not auth
// "[email protected]" // works!
// "{[email protected]}" // not a valid email error
// 'me' // invalid impersonation prn email address
);
Принимает ли Google какой-либо другой идентификатор, кроме адреса электронной почты человека, которого вы хотите выдать за другого, например специальное значение «я»?
Такое ощущение, что мы сталкиваемся здесь с проблемой курицы и яйца. По сути, мы не хотим жестко кодировать адрес электронной почты (особенно адрес электронной почты администратора), поэтому создается впечатление, что мы должны сделать вызов API. Но мы не можем сделать вызов API, не выдавая себя за пользователя.