1

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?

4

1 回答 1

0

您可以使用 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 客户端访问,范围emailprofile.

于 2014-10-27T04:49:04.973 回答