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数组是否包含Role名称为“ADMIN”且本身属于Application名称为“Equipment Inventory”的对象。

或者也许最好去掉applications表格并有更多的角色,例如,“ equipment_inventory_admin”、“ equipment_inventory_readonly”、“ job_tracker_admin”等。

更重要的是规范化Application实体还是简化表结构?也许在所有打字之后,我刚刚回答了我自己的问题,但我们非常欢迎您提出意见或建议。

4

3 回答 3

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>

于 2009-01-29T22:39:55.220 回答
1

绝对将身份验证与授权分开。(看起来你正在这样做;“用户”表属于身份验证,其余 + user.id 属于授权)

密码:您没有明文存储它们,是吗?存储 MD5 哈希(+以防止攻击)会更安全。

Kerberos有可能吗?(也许它可以适应作为传输层在 HTTP 上工作)

于 2009-01-29T23:04:51.160 回答
0

就我个人而言,我倾向于在标准化方面犯错。至少根据我的经验,一些额外的模块会被添加。根据需要在应用程序和全新表中添加额外的行要容易得多,然后编辑现有模式并必须更新所有相关的数据访问代码。

编辑:再看一遍,您可以合并角色表和角色用户表。它可能是定义角色以及用户如何为每个应用程序访问它们的地方。

于 2009-01-29T20:59:07.390 回答