2014-10-27 82 views
1

基本上我们需要一个解决方案(基于PHP或集成可能),使用户能够使用凭据(双因素身份验证)登录到我们的门户网站,然后应该自动/静默登录到我们的谷歌应用程序域的特定用户?我们在这里有什么选择?我们是否应该使用某种形式的SSO/SAML联合,或使用Google OAuth2 API等自动执行登录过程?谷歌应用程序 - 自动登录域用户

+0

您是否试图将用户(自动)登录到他们的Google帐户(即登录到您的门户,然后登录到他们的Gmail)?在这种情况下,SAML是唯一的选择。 – nvnagr 2014-10-28 08:31:53

回答

0

您可以使用SAML2,但这是一个巨大的努力。如果您已经使用SAML2来登录用户,我建议将您的PHP应用程序与SAML2身份提供程序集成。

使用OAuth2进行登录过程要简单得多。 It is documented here,附带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 Console生成client_id参数。首先创建一个项目,然后为您的应用程序生成“Web Application”类型的证书。注意提供正确的重定向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 } 

现在你有用户的电子邮件,将其存储在会话,你是好去!

请注意,此方法将向用户显示同意书。如果您要让知情同意书消失,请在安全>高级>管理OAuth客户端访问中将您的客户端ID添加到Google Apps控制面板中,其范围为emailprofile

+0

非常好 - 非常感谢@David的详细回复!但是,有无论如何避免/绕过用户重定向(步骤1) - 如果我知道用户的谷歌电子邮件ID? (即他是我们的谷歌域的一部分)。另请注意,我们的Portal登录/凭据与谷歌域不同。 – Mack 2014-10-27 05:05:22

+0

如果你知道用户的电子邮件,为什么你要登录他?记录用户意味着让应用程序知道用户的ID。如果应用程序已经知道用户ID有什么意义? – David 2014-10-27 05:52:54

相关问题