2009-01-29 69 views
1

我正在設計一個RESTful Web應用程序,它將爲其他幾個應用程序提供一個身份驗證系統。其他應用程序將通過HTTP查詢此應用程序,並取回描述經過驗證的用戶的XML。批評我的認證系統數據庫模式?

認證的應用程序需要保持跟蹤哪些用戶允許做什麼的應用程序。

我正在制定數據庫模式。以下是我的初始設計。 (假定每個表都有一個id列。)

applications # The various client apps that will query this auth system. 
------------ 
name 

users   # Table simplified for discussion 
----- 
username 
password 
email 

roles 
----- 
name 
application_id 

roles_users 
----------- 
role_id 
user_id 

的想法是說,有人試圖在「設備清單」的應用程序執行管理功能。因此「設備庫存」會對授權系統說「讓用戶使用用戶名xxx和密碼yyy」。然後它會查看返回的(通過ActiveResource)User對象並檢查其roles數組是否包含名稱爲「ADMIN」的Role,該名稱本身屬於名稱爲「Equipment Inventory」的Application對象。

或許這將是更好的消除applications表,並有更多的角色,例如「equipment_inventory_admin」,「equipment_inventory_readonly」,「job_tracker_admin」等

什麼是更重要的,標準化的應用程序實體或簡化表結構?也許畢竟這種打字我剛剛回答了我自己的問題,但意見或建議將是最受歡迎的。

回答

1

架構看起來神志清醒, 你會送

<login><username>abc</username><password>xyz</password><app>51</app></login>

,你回來

<auth> <user> <username>abc</a> <lastlogin>123456464</lastlogin> </user> <app> <name>Equipment Inventory</name> <version>3.1.5e</version> </app> <roles> <role>admin</role> <role>manager</role> <role>dataentry</role> </roles> </auth>

<auth><error type="1"></auth>

0

我個人傾向於在正常化方面犯錯。至少在我的經驗中,某些類型的附加模塊會被添加到線下。根據需要添加額外的應用程序和全新表格,然後編輯現有的模式並更新所有相關的數據訪問代碼更容易。

編輯:第二次看,你可以合併角色表和roles_users表。它可能是一個定義角色以及用戶如何爲每個應用程序訪問它們的地方。

+0

我不會合並這些表,這是一種多對多的關係。 – 2009-01-29 22:32:12

1

絕對將授權與驗證分開。 (看起來像你這樣做;「用戶」表屬於身份驗證,其餘+ user.id屬於授權)

密碼:你沒有將它們存儲在明確的,是嗎?存儲MD5哈希(+ salt以防止攻擊)會更安全。

Kerberos可能嗎? (也許它可能適用於通過HTTP作爲傳輸層)

+0

MD5散列不再被認爲是安全的。我建議使用SHA-256或SHA-512。 – 2009-01-30 00:12:18