2014-10-27 122 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