【问题标题】:How do you use Attributes with Windows Authentication / Authorisation when there isn't a roles table?当没有角色表时,如何将属性与 Windows 身份验证/授权一起使用?
【发布时间】:2014-01-06 23:11:04
【问题描述】:

我之前也问过类似的问题,但我认为它不太对:

How to create users and store them in a database and link them to windows authentication logins

我有一个客户希望设置以下身份验证/授权方案:

  1. 他们想要一个 Intranet 站点
  2. 所有用户必须通过 Windows 身份验证才能查看应用程序 (ASP.NET MVC 4.0)
  3. 用户的角色(授权)将由管理员在应用程序中定义,更具体地说,管理员将有权访问名为“管理用户”的页面,在该页面中他可以从 Windows 用户名列表中进行选择,添加名字和姓氏并选择他是否是管理员。其结果是用户输入 SQL 数据库。

我知道您添加的 Windows 身份验证方法:

<authentication mode="Windows"></authentication>
<authorization>
  <deny users="?" />
</authorization>

Web.config 文件并从 Windows 身份验证下拉菜单中选择“启用”。这当然涉及登录到 Windows 的要求......但现在是为了授权。

对我来说真正的问题是我还知道在 c# ASP .NET 中默认提供的令人敬畏的授权属性。为了澄清,一个示例用法是:

public class AdminController : Controller
{
    [Authorize(Roles="Admin")]
    public ActionResult Index()
    {
        return View();
    }
}

嗯,问题就在这里。我还没有定义谁是和谁不是“管理员”,或者就此而言是“成员”、“作者”……但我们现在暂时不考虑自定义角色(嗯,即兴角色)。

为了进一步澄清,我想我会有一个 User_Roles 表

UserName          | Role   | RelatedProfileID
---------------------------------------------
DOMAIN\John.Smith | Admin  | ~    
DOMAIN\Bob.Yazoo  | Member | ~

RelatedProfileID 与包含该用户的 FirstName 和 LastName 条目的 Profile 表相关。

所以当用户进来时,我会在我的数据库中查找他们的用户名...找出他们的角色并根据他们的角色在网站上显示元素。在控制器级别,我会添加属性标签,例如:

public class NonsenseController : Controller
{
    [Authorize(Roles="Admin")]
    public ActionResult OnlyAdmins()
    {
        return View();
    }

    [Authorize(Roles="Member")]        
    public ViewResult OnlyMembers()
    {
    }
}

提前谢谢大家!

在一堆热切的 stackoverflowalites 来回答我的问题之前,只需要再澄清一点。

  • 其中一位管理员(我的主要客户联系人)是将用于此 Intranet 站点的数据库的管理员...

他希望能够将经过 Windows 身份验证的用户添加到 SQL 数据库中,这反过来可能会导致身份验证问题;他可能会将其中一个 Windows 用户的数据库角色更改为完全管理员...但在应用程序中,忘记将该用户的角色更改为“管理员”...您如何看待这个特殊问题问题的上下文?

【问题讨论】:

    标签: c# authentication attributes authorization asp.net-mvc-5


    【解决方案1】:

    总结一下:

    • 您要使用 Windows 身份验证
    • 授权由角色定义,配置为sql数据库
    • 您希望能够使用授权属性。

    这篇文章应该解释你需要的一切:http://weblogs.asp.net/scottgu/archive/2006/07/23/Recipe_3A00_-Implementing-Role-Based-Security-with-ASP.NET-using-Windows-Authentication-and-SQL-Server.aspx

    编辑:19/12/2013 - 获取用户列表

    获取用户列表 sql 成员资格提供程序。您有两种选择:

    【讨论】:

    • 我已经设法让它工作......但现在有点困惑......当你到达这样的部分时:Roles.AddUserToRole(@"JIMMYT1988\jimmyt1988", "Admin") ;我现在在 aspnet_Users 数据酶表中看到我的数据库有一个用户......但是当我调用 Membership.GetAllUsers 它返回一个空列表?有什么想法吗?
    • 您在 aspnet_Membership 表中有条目吗?
    • 不,这就是问题所在。 Membership.CreateUser 方法要求我提供密码……然而,这是一个 Intranet 应用程序……所以我真的不需要密码……但我仍然需要获取当前拥有的所有用户的列表访问应用程序或至少已分配到角色的人。我认为我使用了错误的类集,但我不知道正确的类是什么。
    • 基本上(从您发给我的文章开始):我想为 Windows 授权用户创建角色并将该 user_role 关系存储在数据库中(DONE),现在我想获得一个列表所有有权访问该应用程序的用户。
    • 您将无法为此使用 sql 成员资格提供程序。您有两个选择 - 编写代码从 AD (codeproject.com/Articles/18102/…) 获取信息,或者您可以尝试使用 ActiveDirectoryMembershipProvider (msdn.microsoft.com/en-us/library/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2010-11-25
    • 2020-11-16
    • 2023-02-22
    • 2020-05-23
    • 2019-10-04
    相关资源
    最近更新 更多