Кто может взаимодействовать с Google Directory API?

Вопрос кажется очень простым, но в документации это не очень ясно. Я использую OAuth 2.0 для авторизации запросов, но, в конце концов, только администраторы могут использовать API, обычные пользователи получат сообщение об ошибке. Я что-то упустил в своей конфигурации или просто обычным пользователям не разрешено использовать API каталога? Насколько я могу судить, это невозможно, но я вижу много причин, по которым это должно быть. Например, в своих приложениях я хотел бы обрабатывать разрешения на основе OU пользователя. К сожалению, я не смог найти способ сделать это, потому что каждый вызов API должен быть авторизован аутентифицированным пользователем. Но что, если этот пользователь не является администратором?

Например, если я попытаюсь выполнить этот пример API как обычный пользователь я получаю следующую ошибку:

«Не авторизован для доступа к этому ресурсу / API».

В то время как с учетной записью администратора я могу успешно получить результат JSON.


person raz3r    schedule 30.06.2014    source источник
comment
Организационное подразделение, см. здесь.   -  person raz3r    schedule 30.06.2014
comment
Вы говорите о приложении Google Apps Marketplace?   -  person MeLight    schedule 30.06.2014
comment
Приложение Google App Engine.   -  person raz3r    schedule 30.06.2014


Ответы (2)


Имеет смысл, что только администратор домена может использовать Directory API (который является подмножеством Admin SDK) — только администратор домена имеет доступ ко всем данным пользователя.

Вы можете получить доступ к API каталога для соответствующего домена, используя учетную запись службы, которая предоставит вам полный доступ, который был предоставлен администратором домена при разрешении вашего приложения. И после этого вы решите на своей стороне сервера, какие функции вы хотите предоставить «обычным» пользователям, а какие — только администраторам.

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

person MeLight    schedule 30.06.2014
comment
Вам не нужно использовать учетные записи служб или добавлять приложение в домен. Просто выполните поток oauth, чтобы сохранить токен обновления администратора. Администратор входит на страницу этого сервлета один раз во время развертывания. - person Zig Mandel; 30.06.2014
comment
Срок действия токена не истекает через некоторое время? Кроме того, что вы имеете в виду, когда вам нужно найти способ реализовать учетную запись службы? - person raz3r; 30.06.2014
comment
Я не уверен в том, как описал @ZigMandel - никогда не шел по этому пути. Что мы делаем, так это получаем разрешения от администратора, а затем используем их для всех пользователей, фильтруя то, что получают обычные пользователи. Этот документ должен помочь: developers.google.com/admin-sdk/directory. /v1/направляющие/делегирование - person MeLight; 30.06.2014
comment
Я хочу сказать, делегирование не нужно. Когда у вас есть токен обновления администратора для этой области, приложение получает доступ. - person Zig Mandel; 30.06.2014

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

Чтобы быстро попробовать или пропустить реализацию потока oauth и просто жестко закодировать токен обновления, перейдите на страницу https://developers.google.com/oauthplayground/
там добавьте нужную область видимости, например https://www.googleapis.com/auth/admin.directory.user
следуйте до шага 2, где вы получите токен обновления.
Конечно, шаги 1 и 2 должны быть e делается из учетной записи администратора, которая имеет доступ к необходимым вам разрешениям. перейдите к шагу 3, чтобы доказать, что это действительно работает, вызвав нужный API.

person Zig Mandel    schedule 30.06.2014
comment
Какие последствия для безопасности? Что может случиться? Единственная проблема, которую я вижу, это если кто-то найдет способ украсть закрытый ключ. - person raz3r; 01.07.2014
comment
вы правы, последствия для безопасности примерно одинаковы. Но при добавлении областей в домен требуется более сложная установка с участием суперадминистратора и дает вам возможность олицетворять больше пользователей, возможно, читая данные их личных учетных записей (зависит от добавленных областей), в то время как мое предложение требует разрешения только для одной учетной записи. который пользователь может увидеть в своих настройках безопасности и отозвать, и не делегирует доступ другим пользователям в домене. - person Zig Mandel; 01.07.2014
comment
Не могли бы вы привести пример потока сервера oauth2? Ни с одним API я не могу найти его в документации Google. - person raz3r; 02.07.2014