【问题标题】:How to populate user(Identity) roles for a Web application when roles are stored in a SQL Server database当角色存储在 SQL Server 数据库中时,如何为 Web 应用程序填充用户(身份)角色
【发布时间】:2015-03-31 18:36:37
【问题描述】:

我有一个基于 C# 的 asp.net 应用程序,它执行基于表单的身份验证,并且还需要授权。

这是User 表的简化版本(SQL Server)

UID   UName PasswordHash Userroles
----------------------------------------------
1      a    GERGERGEGER   Proivder;Data Entry
2      b    WERGTWETWTW   HelpDSK; UserNamager
...
...

我对身份验证部分非常熟悉。但是对于授权,我不确定最好的方法是什么:

我知道一旦用户获得授权,您就可以使用 Identity 对象来获取他/她的信息。

问题是我选择在每个页面上读取登录用户的角色,而不是每次调用该数据库表来获取它们?

【问题讨论】:

标签: c# asp.net sql-server vb.net


【解决方案1】:

我不确定这是一个 SQL Server 问题。这是一个 ASP.NET 问题。

ASP.NET 表单身份验证允许应用程序定义一个“主体”,该主体(除其他外)包含一个称为“角色”的字符串数组。您可以一次(当用户登录时)从数据库中填充角色,然后将主体序列化到表单身份验证票证中,该票证将成为浏览器上的加密 cookie。 ASP.NET 使用每个 http 请求对 cookie 进行解码,并通过 HttpContext.User 将其提供给您的 ASP.NET c# 代码。然后它可以从上下文中检索角色,而无需再次与数据库对话。

存储角色类似于this:

string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
    1,
    userId,  //user id
    DateTime.Now,
    DateTime.Now.AddMinutes(20),  // expiry
    false,  //do not remember
    roles, 
    "/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
                                   FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);

【讨论】:

  • 您可以一次性从数据库中填充角色。如何?假设我从数据库中获得了角色。如何填充这个主体?以及如何将其序列化为身份验证票?
  • 这个话题太宽泛了。您首先需要了解表单身份验证,并且有几个步骤可以对其进行编码和配置。我建议您开始 here 并在您有具体问题时返回 StackOverflow。
  • 我非常熟悉身份验证。我注意到我的问题是关于授权而不是身份验证。
  • 您的问题与基于角色的授权有关,我提供了一种解决方案,可以以安全的方式为在 Web 上下文中运行的代码提供角色。不知道你还需要什么。
猜你喜欢
  • 2017-07-07
  • 1970-01-01
  • 2023-03-06
  • 2023-04-07
  • 1970-01-01
  • 2017-03-13
  • 2013-07-21
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多