У нас есть приложение на G-Suite Marketplace, которое может быть установлено только с помощью учетных записей администратора G-Suite (для Установка домена ).
Перед тем как перенаправлять наших клиентов, чтобы установить наше приложение, мне нужно, чтобы эти условия выполнены:
- Мне нужно знать адрес электронной почты учетной записи администратора, которая собирается авторизовать наше приложение в домене клиента (чтобы я мог привязать это письмо к нашему идентификатору клиента, , тогда как я все еще могу *)
- Я хотел бы перенаправить нашего клиента для установки нашего приложения без необходимости многократного входа в систему с этой учетной записью администратора
- При получении вызова из 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"
}
}