Basically we need a solution (PHP based or integration possible) that will enable a user to log into our Portal with their credentials (2-factor authentication) and then should be automatically/silently logged into our Google apps domain for that particular user? What are our options here? Should we be using SSO/SAML federation of some form, or automate the login process using Google OAuth2 API's etc?
1 回答
您可以使用 SAML2,但这是一项巨大的工作。我建议仅当您已经在使用 SAML2 登录用户时,才将您的 PHP 应用程序与 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,以便在用户通过身份验证时知道将用户发送到哪里,以及您的应用程序必须检查以确保没有人欺骗用户登录的安全令牌。
您必须通过Google Cloud Consoleclient_id
生成参数。首先创建一个项目,然后为您的应用程序生成“Web 应用程序”类型的凭据。注意提供正确的重定向 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":"jsmith@example.com",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926 }
现在您有了用户的电子邮件,将其存储在会话中,您就可以开始了!
请注意,此方法将向用户显示同意书。如果您希望同意表单消失,请将您的客户端 ID 添加到 Google Apps 控制面板中的安全 > 高级 > 管理 OAuth 客户端访问,范围email
和profile
.