2008年3月10日 星期一

另人遺憾的 Google AuthSub API 有感

身為一個 Google Fans 及 Programmer, 對於參與開發的 Web Application , 總是極力希望能直接整合 Google Services. 甚而連 User Singup 都不用了, 直接使用 Google Account 或 OpenID 進行 Authenticate , 然後直接使用我們的服務..

然而 Google Account API 中的 AuthSub API 似乎不能把它拿來當 Account Identification 用. 因為它無法傳回 UID (username / hash or anythings).

如果我們要拿來識別自己的 local user, 看來只能使用 ClientLogin, 要使用者填入 username (gmail) / password ,.....
這...是怎樣, 在現在釣魚網站這麼多, 而又是一個新創網站而言, 要使用者填入它的 Google username / password 是幾乎不可能的吧...


建議不用改變太多, 至少擴充一下 AuthSubTokenInfo 多傳一行 user_hash or UID 應該沒有安全性上考量吧.. 查了一下 Groups , 很多開發者有和阿土伯相同的困擾, 就差最後一點功夫, 很遺憾的, Google 缺少了它....

現在我們的 Service 放棄了 Google Login 的功能, 阿土伯身為 GFans , 好不甘心呀~~~~

建議:
一. 不改變現有任何 API , 但對於同一個 Username 對於同一個 next 同一個 scope 操作, 回傳同一個
session token , 因為目前 session token 並不會失效, 所以我們可以 "暫時" 拿來當同一個使用者的識別之用.

二. 只改變 AuthSubTokenInfo , 目前有的三行資訊, 多加入一行 user_hash or anything 可以反映相同使用者的資訊都可...

Google Groups: http://tinyurl.com/2yr8hx

15 則留言:

lanma 提到...

大家來連署一下,請Google加這個功能啦..

Unknown 提到...

Dear lanma:
這是老問題了.. 算是提出來抱怨吧..
不過還是由衷希望能加入這個功能.

智雄 提到...

可以請先進寫一下使用方法嗎……

我看了authsub api,試了很久試不出來…我是想用一個iframe中,自動登入google map,使用它的功能

submit到AuthSubRequest後一直顯示要我登入帳號密碥……不是應該要傳回一個token嗎?

不過要傳出去的資料中,只有scope和next是必要值,沒有要求帳號和密碼,這也讓我很疑惑…

抱歉在這邊提問,可以給個解答嗎?感激不盡

Unknown 提到...

Dear 個人記事:
是的, 您呼叫 AuthSubRequest 是會看到 Google Account 的登入頁面, 而左邊則是您的服務相關資訊, 需要在此要求使用者完成帳號密碼後, 才會導回 next 頁面並傳給您 token.

智雄 提到...

非常感謝Rack Lin的解惑

那如果我想要自動登入帳號密碼,是否用另一種clientLogin的api?因為我是想寫死帳號密碼在程式裡自動登入google map,大家都沒這種需求嗎?真是抱兼打擾了

Unknown 提到...

Dear 個人記事:
是的, 如果您的需求可接受在自己這端填入帳號密碼,就能使用 ClientLogin 方式.

薛共和 提到...

可以由另一個網站切入 google ,這沒有問題阿;google 也不需要開放api 阿!

Unknown 提到...

Dear 喂~程式:
可否請您簡介一下您的切入作法? 謝謝.

lanma 提到...

插花一下,不是已經有Google App Engine裡面的User API可用?

薛共和 提到...

google切入很簡單阿! 不過有一個前提是你不能再同一個FRAME(在某些比較單純的CASE也許可以)
如果你懂RFC 2616,直接用SOCKET 把封包送到GOOGLE ,就知道是否有認證通過,我是因為要做SSO Forward,所以在apache server上寫一個reverse proxy server,這樣就可以讓任何已擁有google帳號的人,直接使用他自己的帳號,從我的portal 登入google(gmail)

可參考敝公司 http://www.program.com.tw 的portal產品,他裡面有一個sso engine專門處理這類跨越domain 的認證

基本上我個人比較不喜歡使用別人提供的api 來做這類的事,因為還需要為了某個特殊的功能去學特別的api,這個api又不能用在其他地方,但如果原理懂了,你自己可以對任何web做出登入的機制,基本上你在web上看的到,程式就能做的到,所以沒有必要依靠api

Unknown 提到...

Dear 喂~程式:
感謝您的解說你的 "切入" 方式..
您可能沒有看懂我在抱怨的部份, 請看本篇文章紅色的部份.
當然, 任何利用 Form-based Authentication 我們都能代使用者 POST, 然而, 本篇的重點在於 "不需要" 留下使用者的 username / password .
如果今天建置一個新的網站, 然後提供 Google SSO, 結果是要使用者留下 google account / password , 你認為這個 SSO 有人會使用嗎? 使用者不會害怕你會 keep 他的 username/password ?

另,如果使用者可以接受留下 username / password , google 有提供 ClientLogin API.

薛共和 提到...

歐!如果我能不需要帳號密碼;可以切入GOOGLE,那GOOGLE 可能要請我當安全顧問了,呵呵...

Form-based Authentication 不一定能夠很直接的切入(GOOGLE 是一個例子),跨DOMAIN的FRAME 也無法很直接的切入,通常這種SSO,都需要中間特殊的PROXY 來做中繼

某些SSO 採用授權的方式來處理認證的問題,但那必須子系統有支援這種模式認證,你無法讓一個使用UID/PASSWD 的系統再不經修改的狀況下,直接使用授權的方式通過認證,這可能就是要透過api才能進行跨系統的整合

Unknown 提到...

Dear 喂~程式:
本篇討論的主題, 和安全性無關.我們(網站服務提供站)真的可以不需要知道使用者的帳號密碼, 我們只是要"識別"有一個使用者登入.
無意冒犯, 但請您再看一下本篇文章的問題及抱怨, 以及相關類似技術所要解決的問題面向.
OpenID: http://en.wikipedia.org/wiki/OpenID
Yahoo BBAuth: http://developer.yahoo.com/auth/
Google AuthSub: http://code.google.com/apis/accounts/docs/AuthForWebApps.html

薛共和 提到...

是阿!那概念類似授權(我前一篇有提到,openid ... 這類認證方式最大的問題(與現有其他系統整合),是需要修改既有的系統,而且沒有共同的標準,所以要整合就必須一個個site分別去做

敝公司(http://www.program.com.tw)的portal 也支援類似openid這種模式(我是說我們自己有類似openid這種機制;供外部系統選擇另一種整合方式),只是對方的系統也需要配合私有的規格(api)修改原先認證的方式,對私人公司來說或許很容易,但是我們的客戶90%是大專教育市場,有絕大部分軟體是委外處理,他的難度高多了,因為每個廠商的能力不一,學校行政系統的決心不足,最後會選擇比較不好的模式

匿名 提到...

前人種樹後人乘涼,現在 Google 可以用 OpenID 了 :)