2008-05-08

讓自己的 Blog 網址變成 OpenID

話說剛寫了篇 OpenID 介紹的文章(前言請看這一篇),有提到 OpenID 是個「網址」,背後其實是「伺服器對伺服器」之間的相互驗證機制,為「支援 OpenID 登入」的網路服務和「提供 OpenID 註冊識別」服務兩造伺服器之間的溝通。很多人自己架設網站、或申請了 Blogger、Wordpress 等很有彈性的 Blog 系統,也都搞了個屬於自己的網域或網址,既然 OpenID 是網址格式、又有類似網路名片的應用,那,想要用 OpenID 登入別人服務的時候,能不能直接使用自己的網域、或 Blog 的網址,那不是更好記、更方便嗎?沒問題!大多提供註冊的 OpenID 服務商都有支援類似「轉址」的服務(專有名詞是 Delegation、「委任」),只要在網站或 Blog 首頁頁面檔裡加入一段程式碼,註明自己的 OpenID、服務商伺服器和相關資訊,當你想要登入支援 OpenID 的服務時,就敲自己的網域或 Blog 網址,該服務商會透過你的網址、解析那段檔頭程式去瞭解你的 OpenID 服務商,逕自完成兩造伺服器之間相互識別的機制!能夠拿自己的網址當 ID,這個 Idea 實在是太美妙了啊(中間會跳出服務商要求輸入你 OpenID 密碼的頁面確認是你本人,也可以透過保留 cookie 的方式來簡化步驟)~

這裡介紹「兩種」讓你的網址變成 OpenID 的方法。第一種比較通用,如果你已經擁有一個 OpenID,而你的網站和 Blog 也允許你去「編輯」首頁的檔頭(或是模板),只要在原始碼裡加上一段說明「委任」關係的程式碼,你的網址就可以透過該委任關係變成一個 OpenID。這段說明委任關係的程式碼會因為你 OpenID 供應商的不同而不大一樣,我以修改 Blogger 的模板、並用MyOpenID 這個 OpenID 的供應商當範例,實際狀況請依照個人使用環境的不同去調整。

首先進到版面配置、修改 HTML 原始碼,一樣在 <head> </head> 兩個標籤的區段內填入 MyOpenID 要求的委任識別碼(不同服務商內容請參閱其官方文件調整):

<link rel="openid.server" href="http://www.myopenid.com/server" />
<link rel="openid.delegate" href="http://帳號.myopenid.com/" />
<meta http-equiv="X-XRDS-Location" content="http://帳號.myopenid.com/xrds" />

這樣存檔後就搞定了(真簡單)!以後,當你要用自己的網址去登入 OpenID 時,就會跳出 MyOpenID 要求你輸入密碼、並且允許該網站來識別的詢問,確認(或紀錄密碼)後就能完成登入了。

第二種方法,如果你是 Blogger 的使用者、而且還沒申請 OpenID ,那就不用再另外註冊啦!因為 Blogger 提供給你的 Blog 網址(或你用自訂網域),其實就內建 OpenID 的功能!因為從另一個角度來看,個人的 Blog、不就是一種「個人識別」的工具嗎?所以拿 Blog 網址直接當 OpenID 識別網址,這樣只是剛好而已啦!我找了一下相關的說明文件,官方只找到這一篇,說什麼要在 Blogger in Draft 才能啟用,還要手動修改樣板、貼程式碼之類的。不過實際上,該設定好像已經偷偷變成正式版、而且嵌入現有的管理介面了。請到「設定」->「OpenID」的頁面看一下,應該會看到你的 Blog 網址「已經」是 OpenID URL !所以,當你在支援 OpenID 需要「識別」才能使用的網站,直接敲自己 Blogger 的 Blog 網址當做「帳號」,就可以登入囉!(當然,如果你硬要用其他供應商的 OpenID 來識別也 OK,套用以上說的第一種方法照樣行得通!)

其實,第二個方法之所以能運作,看 Blog 的原始碼就知道原因了。因為有一行程式(Blogger 自己服務的 Delegation)被系統預設自動加入,所以使用者才不需要用去手動修改樣板。該行如下,可以檢查看看自己 Blog 有沒有這一行(應該是只能用在 Blogger 吧):

<link rel="openid.server" href="http://www.blogger.com/openid-server.g" />

回應: 3