Как я могу передать определенную учетную запись электронной почты для авторизации нашего приложения G-Suite Marketplace? - PullRequest
0 голосов
/ 08 сентября 2018

У нас есть приложение на G-Suite Marketplace, которое может быть установлено только с помощью учетных записей администратора G-Suite (для Установка домена ).
Перед тем как перенаправлять наших клиентов, чтобы установить наше приложение, мне нужно, чтобы эти условия выполнены:

  1. Мне нужно знать адрес электронной почты учетной записи администратора, которая собирается авторизовать наше приложение в домене клиента (чтобы я мог привязать это письмо к нашему идентификатору клиента, , тогда как я все еще могу *)
  2. Я хотел бы перенаправить нашего клиента для установки нашего приложения без необходимости многократного входа в систему с этой учетной записью администратора
  3. При получении вызова из Marketplace (на Универсальное расширение для навигации , настроенное в приложении), мне нужно знать адрес электронной почты учетной записи администратора, которая только что авторизовала приложение (что затем мне следует иметь возможность вычесть клиент-ID в наших записях, благодаря (1))

* пока я все еще могу - при перенаправлении на наше приложение я теряю контекст нашего клиента: когда рынок вызывает универсальное навигационное расширение (настроенное с помощью домен , который установил наше приложение на универсальное расширение для навигации URL - http://our -marketplace-endpoint? domain = $ {DOMAIN_NAME}), я больше не знаю, какой клиент ID (в нашей системе) авторизовал наше приложение в своем домене G-Suite, поэтому я больше не могу связывать эти два (наш-идентификатор-клиента <> google-domain).

Возможно ли это? Или я должен рассмотреть другой подход для достижения тех же целей?

Я обнаружил, что использование любого из них было в некотором роде полезным, в основном только для OAuth-учетной записи администратора и велит рынку использовать эту учетную запись для авторизации нашего приложения (заменил реальные значения на APP_ID , APP_NAME , CLIENT_ID ):

Но я все еще не мог понять, как мне выполнить все условия, которые я изложил выше - просто для обеспечения лучшего пользовательского опыта.

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

Что касается (3), я также попытался получить авторизационное письмо, используя следующий фрагмент кода:

oauth_app = OAuth().remote_app(
    'google',
    consumer_key=gconfig[top_domain]['consumer_key'],
    consumer_secret=gconfig[top_domain]['consumer_secret'],
    request_token_params={
        'scope': 'https://www.googleapis.com/auth/userinfo.email',
    },
    base_url='https://www.googleapis.com/oauth2/v2/',
    request_token_url=None,
    access_token_method='POST',
    access_token_url='https://accounts.google.com/o/oauth2/token',
    authorize_url='https://accounts.google.com/o/oauth2/auth')

oauth_app._tokengetter = lambda: session.get('google_token')
resp = oauth_app.get('https://www.googleapis.com/oauth2/v2/userinfo',
                     token=session['google_token'])

Но это хранится сбой с 401 Несанкционированное:

 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "authError",
    "message": "Invalid Credentials",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Invalid Credentials"
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...