伊爾特系統(Ilt System),是透過使用者清單(List of User)、群組關係樹(Tree of Group Relationship)、辨識標籤(Identity Tag)組成的會員管理系統,取這三元素的頭字母為I-L-T,所以稱為伊爾特(Ilt)。
git clone <本專案git位址>
本專案到指定資料夾composer update
,更新vendor。(註1)app/config/app.php
,將 url
參數修改為本專案的根目錄,並且更新 key
參數的值。(註1)app/config/database.php
,修改資料庫連線參數。(註1)app/config/hybridauth.php
,修改 base_url
參數,以及providers的 id
與 secret
。(註2)app/config/mail.php
,修改Email Sever的相關參數。(註1)php artisan migrate
,建立資料表。app/config/app.php
,將 debug
參數改為 false
。本專案是使用hybridauth模組作為OAuth登入的後端程序,只要編輯 app/config/hybridauth.php
的參數,就可以實現多種OAuth的登入方式,至於有支援哪些OAuth Provider,可到 Hybridauth 官網查詢,本文就不多在這邊贅述。
在前端部分,本專案是使用基於 Bootstrap 和 Font Awesome 的 Social Buttons for Bootstrap ,作為前端社交按鈕的框架。若要新增首頁OAuth登入的按鈕,請參照該框架的說明文件,編輯 app/views/portal/login.blade.php
檔案,新增相對應的按鈕即可。
本專案的OAuth Provider是Fntsrlike參照網路上的說明自行刻造的小型OAuth Provider架構,相對於完整的規範可能會有許多缺失,會在日後其他部分皆完工後,在強化他的安全性與流程。若是有任何想法也歡迎到本專業網站開Issue或是進行Pull Request,感謝大家。
有關於這部分的程式碼,請檢閱 app/routes.php
與 app/controllers/OAuthController.php
這兩個檔案,與其相對應的Models分別是 app/models/OAuthAccessToken.php
與 app/models/OAuthClient.php
,資料表結構請參考本架構的Schema app/database/migrations/
與 app/models/OAuthAccessToken.php
。
GET Request
,並附上下列資料,其中任一資料若是有誤皆會報錯,並引導使用者到錯誤說明頁面:
client_key
做Client辨識。scope
作為權限要求的範圍。(註1)redirect_uri
,請求本程式在完成認證程序後,轉移到該URI。(註2)User
是否已經登入本專案網站,若沒登入,導向登入頁面引導登入,並在登入後導向回本認證程序。User
是否曾認可該 Client 的權限需求(包括Scope是否相同),若否則導向認可頁面,詢問使用者是否同意,同意則進入下一階段,若不同意則導向錯誤說明頁面。token
透過 GET Request
發送到 Client 指定轉移的URI,使 Client 獲取該 token
。(註3、註4、註5)token
後,即會像本架構的Resource Server程序,附上下列資料,透過後端(PHP)的方式,利用 GET Request
方法索取資源。
token
,即前部分所獲得的token,作為索取資源與範圍的辨識。client_key
,作為 Client 的辨識,若是與 token
當初指定的 Client 不同,則會報錯,回饋相關錯誤訊息給 Client 。client_secret
,辨識 Client 的合法性,此 secret key 絕對不能外留給該 Client 管理員與開發者以外的人員,否則會造成資安漏洞。scope
指定的資源給予 Client,完成程序。token
後,會存在該 Client(或是用Session、或是用Cookies 等相關儲存方式,端看 Client 的程式設計。token
時,會將以下資料記載資料庫中,以作為Resource Server程序的安全檢驗:
token
對 Client 俱有專一性。token
對 User 俱有專一性。token
的有效期限。若是過期, Client 需要另外要求新的 token
。Scope
,則會另外產生新的 token
,並使原有的token過期、無效。