По сути, нам нужно решение (на основе PHP или возможная интеграция), которое позволит пользователю входить в наш Портал со своими учетными данными (двухфакторная аутентификация), а затем должен автоматически / негласно входить в наш домен приложений Google для этого конкретного пользователя? Какие у нас есть варианты? Должны ли мы использовать федерацию SSO / SAML какой-либо формы или автоматизировать процесс входа в систему с помощью API Google OAuth2 и т. Д.?
Вы можете использовать SAML2, но это огромное усилие. Я бы порекомендовал интегрировать ваше PHP-приложение с провайдером идентификации SAML2, только если вы уже используете SAML2 для входа в систему.
Процесс входа в систему с OAuth2 намного проще. Здесь задокументировано, с примерами в PHP.
В основном вам нужно перенаправить пользователя на URL-адрес, например так:
https://accounts.google.com/o/oauth2/auth?
client_id=424911365001.apps.googleusercontent.com&
response_type=code&
scope=openid%20email&
redirect_uri=https://yourapp/oauth2callback&
state=security_token%3D138r5719ru3e1%26url%3Dhttps://yourapp/pagewheretheusermustbesentback&
openid.realm=yourdomain.com&
hd=yourdomain.com
state
Этот параметр подробно описан в документации, он предоставляет как URL-адрес перенаправления для вашего приложения, чтобы узнать, куда отправлять пользователя, когда он аутентифицирован, так и токен безопасности, который ваше приложение должно проверить, чтобы убедиться, что никто не обманывает пользователя при входе.
Вы должны сгенерировать client_id
параметр через Google Cloud Console. Сначала создайте проект, а затем сгенерируйте учетные данные типа «Веб-приложение» для вашего приложения. Обратите внимание на предоставление правильного перенаправления URI.
Когда пользователь принимает аутентификацию, он перенаправляется на https://yourapp/oauth2callback
с code
параметр, который вы используете для получения информации о пользователе, включая электронную почту. Это делается с помощью запроса POST:
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
code=the_code_you_got_when_the_user_was_redirected
client_id=424911365001.apps.googleusercontent.com&
client_secret=yourclientsecret&
redirect_uri=https://yourapp/oauth2callback&
grant_type=authorization_code
Ответ будет выглядеть так:
{"iss":"accounts.google.com",
"at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified":"true",
"sub":"10769150350006150715113082367",
"azp":"1234987819200.apps.googleusercontent.com",
"email":"[email protected]",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926 }
Теперь у вас есть электронная почта пользователя, сохраните ее в сеансе, и все готово!
Обратите внимание, что этот метод покажет пользователю форму согласия. Если вы хотите, чтобы форма согласия исчезла, добавьте свой идентификатор клиента в Панель управления Служб Google в разделе Безопасность> Дополнительно> Управление клиентским доступом OAuth с областями действия. email
а также profile
,
Других решений пока нет …