Integrating OpenID & Clickpass Authentication in your Rails Application
OpenID is a service, framework, and protocol that is revolutionizing the realm of user authentication and identity services. Started in 2004 by Brad Fitzpatrick, OpenID is now a mature framework supported by major Internet organizations such as AOL, Google, IBM, Microsoft, VeriSign, and Yahoo. It offers a distributed, reliable, and open way for web sites to authenticate their users and saves web developers from the need to write yet another piece of authentication code.
要在每個使用過的網站建立新的帳號,感到疲累嗎?您總是避免上新網站,是否因為每個網站都要求您建立帳號和密碼? 您是否在電腦螢幕旁貼了一堆密碼提示?
OpenID 是一種開放技術標準,可解決所有這類問題。透過 OpenID 技術,您可以使用您的 OpenID 帳號隨意在不同的網站上登入或註冊!
在實作這個功能之前,我們需要安裝ruby-openid這個Ruby Gem以及acts_as_authenticated和restful_authentication這兩個Rails Plugin。
接下來我們要先建立openid的資料表並在現有的Users資料表中添加一個identity_url欄位。建立一個遷移檔來新增資料表,然後編輯這個遷移檔:
$ ruby script/generate migration CreateOpenidAuthentication
接下來再來建立一個UserOpenid模型,然後編輯這個新的遷移檔:
然後編輯UserOpenid Model:
接下來編輯#{RAILS_ROOT}/config/routes.rb,設定相關的路徑映射:
註:這裡面的controller必須視你自己的project來作設定,若配置錯誤將無法連線到OpenID Server端取得認證。
接下來建立一個OpenidsController並編輯內容:
$ ruby script/generate controller Openids
再來我們需要修改AccountController,在裡面添加一些處理OpenID登入的方法:
接下來編輯app/views/account/openid_login.html.erb視圖,讓使用者可以透過OpenID登入網站,添加下面的內容:
再來編輯app/views/openid/new.html.erb視圖,這是讓使用者添加OpenID帳號的頁面:
要在每個使用過的網站建立新的帳號,感到疲累嗎?您總是避免上新網站,是否因為每個網站都要求您建立帳號和密碼? 您是否在電腦螢幕旁貼了一堆密碼提示?
OpenID 是一種開放技術標準,可解決所有這類問題。透過 OpenID 技術,您可以使用您的 OpenID 帳號隨意在不同的網站上登入或註冊!
在實作這個功能之前,我們需要安裝ruby-openid這個Ruby Gem以及acts_as_authenticated和restful_authentication這兩個Rails Plugin。
接下來我們要先建立openid的資料表並在現有的Users資料表中添加一個identity_url欄位。建立一個遷移檔來新增資料表,然後編輯這個遷移檔:
$ ruby script/generate migration CreateOpenidAuthentication
接下來再來建立一個UserOpenid模型,然後編輯這個新的遷移檔:
然後編輯UserOpenid Model:
接下來編輯#{RAILS_ROOT}/config/routes.rb,設定相關的路徑映射:
註:這裡面的controller必須視你自己的project來作設定,若配置錯誤將無法連線到OpenID Server端取得認證。
接下來建立一個OpenidsController並編輯內容:
$ ruby script/generate controller Openids
再來我們需要修改AccountController,在裡面添加一些處理OpenID登入的方法:
接下來編輯app/views/account/openid_login.html.erb視圖,讓使用者可以透過OpenID登入網站,添加下面的內容:
再來編輯app/views/openid/new.html.erb視圖,這是讓使用者添加OpenID帳號的頁面:
最後在#{RAILS_ROOT}/app/views/users/show視圖中添加下面的內容,用來顯示使用者已認證過的OpenID帳號:
現在使用者已經可以透過OpenID帳號來登入網站,接下來我們還可以使用Id Selector和Clickpass的服務來擴充我們的OpenID登入功能。首先我們要到 https://www.idselector.com/ 去使用OpenID申請一個帳號,然後只要將代碼貼到OpeniD的登入頁面即可,這裡我將下面的代碼貼到Application Layout中:
再來我們可以為Rails應用程式添加Clickpass登入功能,首先我們需要到 http://www.clickpass.com/ 申請帳號,然後切換到 Developer 控制台,輸入網站資料:
再來我們需要設定 OpenID 負責新增帳號的位置:
1. trust root 輸入你的網站網址
2. begin_openid_login 輸入http://你的網址/account/openid_authenticate 這個路徑
3. OpenID parameter label 輸入 openid_url
4. submission method 選擇 GET 方法
儲存設定之後,就可以把它提供的 button 語法貼到我們的#{RAILS_ROOT}/app/views/account/openid_login.html.erb 視圖裡面了。
再來我們需要設定 OpenID 負責整合帳號的位置:
這裡的 begin_add_openid_to_user URL 我們要輸入config/routes.rb檔案裡面所設定的http://你的網址/users/add_openid路徑,而 user_id label 只要輸入 Username 即可。另外底下的 callback url 也要設定為 http://你的網址/users/add_openid。
儲存設定以後,再將下面顯示的 button 語法貼到 app/views/openid/new.html.erb 視圖中;如此一來就完成 Clickpass 的整合了!
這是二年前做的東西了,以上的實作過程都是用我自己的Rails Project作為例子,概念僅供參考,若有需要請依照你自己的專案視圖作相關的配置。(OpenID登入可以在localhost作測試,Clickpass則需要連線到相對應的網域名稱才能作登入測試)。
下面是一些 OpenID 的相關資源 :
OpenID 網站
Yahoo! OpenID
OpenID for Rails
8 OpenID Resources for Rails Developers
Railscasts - OpenID Authentication
Authlogic and OpenID on Rails
OpenID and Rails: Authentication 2.0