我正在重新编写一个网站,用于天蓝色。每个用户都拥有许多对象的所有权,并拥有许多权限。这些共同决定了他们有权做什么。问题是,如何存储这些信息。我想自己使用自定义逻辑进行身份验证。
出于性能原因,我想在登录后为每个用户缓存这些授权列表。有人可以给我一个如何存储&安全有效地访问此会话信息。
修改
我查看了App Fabric Access Control,但这似乎有些过分,因为我不得不创建一个单独的身份验证站点,这似乎没有意义。虽然基于声明的身份验证是否有意义?如果有的话,你会怎么做?
以传统方式将用户名保存在cookie中然后用每个请求重新查询表存储以获取权限等更有意义吗?如何存储用户名在Azure中工作?
成本是一个很重要的因素,因为它是一个非常小的网站(按照azure标准),但我希望少数用户能够获得高性能。
答案 0 :(得分:1)
好吧,您可以使用Azure App Fabric缓存来存储会话信息。可以将ASP.Net配置为将其用作其会话状态的后备存储,就像普通的自定义会话状态提供程序一样。
MSDN上的这篇文章向您展示了如何配置它:
http://msdn.microsoft.com/en-us/library/windowsazure/gg278339.aspx
从您的代码中,您只需使用正常的ASP.Net方式来获取/设置状态。
请注意 - 它可能很昂贵(128 MB缓存每月45美元)。
答案 1 :(得分:1)
如果您希望以合理的可用性运行,则需要使用两个实例运行您的站点。如果您正在运行两个实例,则需要使用不是默认InProc的会话提供程序。您的选择是:
如果用户的权限在登录时不会更改,则可以将他们的权限存储在会话中。这可能足够快。但是,对于使用会话的每个请求,需要从SQL读取此信息,这是开销。
如果您想加快速度,可以在会话中存储用户ID,并在需要时将权限加载到静态字典(键入用户ID)。这些物品需要在一定时间或不使用后过期。