淺談 Tomcat 身份認證機制 - 認證機制的基本元素
最近看別人寫的程式, 剛好看到那個程式使用了 Tomcat 內建的身份認證機制, 因此也花了點時間把這部份了解一下. Tomcat 我已經使用了很久了, 雖然最近都是使用 C# .Net 為主, 但是以前 SOHO 的時候大部份都還是以 Tomcat 為主. 不過雖然大概知道 Tomcat 有提通了身份認證的機制, 不過以前我倒是都沒有好好的使用過。
以前最主要都是自己來寫 Authentication 以及 Authorization 的部份. 自己寫的好處是可以比較容易做到細微的控制, 缺點當然就是得要重頭來建構. 所以一開始我先從最基本的 Authentication 以及 Authorization 來說起:
Authentication 就是身份認證. 一般來說這部份就是我們在網路上常見的輸入帳號, 密碼方式. 系統會根據你輸入的帳號密碼, 去查詢你的資料是否正確. 當然後端會有著一個 repository 存放著所有的帳號密碼資料. 這個 repository 可以是文字檔, XML 格式, Database, LDAP 等等. 但是不管怎樣的 repository, 裡面一定會有著兩個最基本的欄位, 帳號跟密碼.
Authorization 簡單來說就是在你通過認證以後, 你有甚麼樣子的權限. 一般我們會使用所謂的 role-based 的方式來定義權限. 例如在 windows 系統裡面會有所謂的 Administrator role, 假如你是 Administrator role 的成員, 那你就可以擁有 Administrator 的權限. 另外往往我們也會允許 multi-roles 的情況, 也就是說一個人可以有多個 role; 並且同時具備這幾個 role 的權限.
假設我們現在的後端有著一個資料庫來存放所有的帳號資料, 根據上面的兩個需求, 我們可以很簡單的劃出 Database Schema tables. 假設我們把帳號/密碼是存放在 User table, role 資訊放在 role table, 那就會有下列的 table 結構:
上面的 User table 還可以存其他的使用者資料 (Email, Phone, Address 等等). UserRoles table 用來做 User 跟 Roles 之間的多對多定應. 同樣的 Roles table 也可以存其他的 Role 相關資訊.
(上面我使用的 Visio 來繪製的; 對應的 Database 是 SQL Server. 若是使用其他的 Database (MySQL, PostgreSQL 等等), 也是同樣的結構.)
當系統有了上述的結構, 我們就可以開始建構 role-based 認證. 雖然上面是以資料庫為例子, 但是就算使用其他的 repository (XML, LDAP 等), 也會有類似的架構. 只是使用 ER Model 來呈現, 可以讓整個架構比較容易了解. 上述的東西可以簡稱為 Realm, 目前 Tomcat 提供了 DataSourceRealm, JDBCRealm, JNDIRealm 以及 MemoryRealm. 另外你也可以自己去 implement 其他種的 Realm. (這幾種方式應該都可以望文生義吧)
Blogger Beta 比之前的 Blogger 好用多了,所以把以前寫過的文章都轉來這邊好了。
沒有留言:
張貼留言