Open ID 的登出:易用性與安全性問題

之前在 Twitter 和 Irvin 討論過,後來又在 xditeptt2 個人板上面也討論過 PIXNET 的 implement 方法,但我一直都沒有講清楚(阿表達能力薄弱呀orz)所以試著在這裡用長篇幅表達看看:

Open ID 對許多使用者來說,是首次能將「登入認證」和「登入狀態」兩者拆開的全新體驗。因為是認證機制,所以要在易用性上確保使用者能認知 Open ID 幫他做了什麼,且他自己要做什麼以免身分遭到冒用

定義一下,「登入認證」就是那組帳號密碼(或是指紋、掌紋、聲音辨識,隨便),「登入狀態」則是使用者是否已經登入的判斷,在網頁上面就是 cookie。

Open ID 的設計讓使用者看起來1可以共用「登入認證」(即,用同一個身份登入不同的網站),甚至看起來2是直接複製「登入狀態」(因為許多 Open ID sp 的作法是如果已經登入 rp 來要認證的話就直接發 token,不顯示確認畫面)。

因為沒有 single sign-off 能力,當使用者登出 sp 的時候,rp 的「登入狀態」不會因此更新。反過來登出 rp 的時候當然不能讓 rp 去登出 sp(想像你去逛一下抓火狐然後按登出結果連 GMail 都登出了…),只是就以上的情況與 UI 暗示,使用者真的知道登出 PIXNET 主站的時候 murmur.tw 不會跟著登出嗎?

如果不知道,這就是個安全性問題。使用者去 PIXNET 發完部落格文章然後去 murmur 碎碎念一下,結果只按了 PIXNET 的登出卻不知道要按 murmur 的登出… 更何況 murmur 的首頁上只用了一個「使用痞客邦 PIXNET 帳號登入」的按鈕就直接用 OpenID 交換認證。

在我和 xdite 反應這件事情之後,PIXNET 在 sp 端輸入帳號密碼的畫面加上了[同時也登入痞客邦 PIXNET]的勾勾。雖說這個勾勾能讓使用者正確意識到 murmur 和 PIXNET 兩者的「登入狀態」是獨立的,但是因為 PIXNET 做的 Open ID sp 在已認證的狀態下會跳過這個畫面,所以大部分的時候是白搭,使用者根本看不到。

重新整理一次:

Open ID:

  • 共用登入認證,sp 端登入後 rp 可以直接拿 token
  • 不共用登入狀態,要分別登出

但使用者看起來:

  • 因為登入不用重新輸入認證,所以登入狀態好像是共用的
  • 那在 sp 登出的時候 rp 好像會一起登出
  • 實際上不會,所以這造成了安全性問題

這樣的暗示問題在 PIXNET 會比其他網站嚴重,因為使用者明知 murmur 或是 belovely 就是 PIXNET 的網站,要意識到同一家公司的不同網站「登入狀態」竟然是獨立的這還滿難的。畢竟我們都被 Google 或是 Yahoo! 跳來跳去的登入畫面養壞胃口了。

倒是我想不透除了背後從資料庫每次查詢認證以外,Google 怎麼從 google.com 把 blogger.com 的認證拿掉的;不同 domain 的 cookie 不是沒辦法存取嗎?會不會搞半天其實這是唯一的解法…

2 thoughts on “Open ID 的登出:易用性與安全性問題

  1. I know,本來要提在文章裡但是想說算了。
    因為觀察了 Google 的登出,它只是跑幾個 301 Redirect 就結束了,沒有用到 iframe。

Leave a Reply

Your email address will not be published. Required fields are marked *