Azure上的用户授权

时间:2011-11-10 15:22:42

标签: c# session authentication cookies azure

我正在重新编写一个网站,用于天蓝色。每个用户都拥有许多对象的所有权,并拥有许多权限。这些共同决定了他们有权做什么。问题是,如何存储这些信息。我想自己使用自定义逻辑进行身份验证。

出于性能原因,我想在登录后为每个用户缓存这些授权列表。有人可以给我一个如何存储&安全有效地访问此会话信息。

修改

我查看了App Fabric Access Control,但这似乎有些过分,因为我不得不创建一个单独的身份验证站点,这似乎没有意义。虽然基于声明的身份验证是否有意义?如果有的话,你会怎么做?

以传统方式将用户名保存在cookie中然后用每个请求重新查询表存储以获取权限等更有意义吗?如何存储用户名在Azure中工作?

成本是一个很重要的因素,因为它是一个非常小的网站(按照azure标准),但我希望少数用户能够获得高性能。

2 个答案:

答案 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的会话提供程序。您的选择是:

  • AppFabric缓存(你不想使用,因为它太贵,太公平了)
  • Azure存储会话提供程序。 Don't use this。这是一个有趣的实验,但它只是示例代码,它很慢并且在生产中无法很好地应对。
  • SQL Server会话提供程序。

如果用户的权限在登录时不会更改,则可以将他们的权限存储在会话中。这可能足够快。但是,对于使用会话的每个请求,需要从SQL读取此信息,这是开销。

如果您想加快速度,可以在会话中存储用户ID,并在需要时将权限加载到静态字典(键入用户ID)。这些物品需要在一定时间或不使用后过期。