【发布时间】:2014-01-06 23:11:04
【问题描述】:
我之前也问过类似的问题,但我认为它不太对:
How to create users and store them in a database and link them to windows authentication logins
我有一个客户希望设置以下身份验证/授权方案:
- 他们想要一个 Intranet 站点
- 所有用户必须通过 Windows 身份验证才能查看应用程序 (ASP.NET MVC 4.0)
- 用户的角色(授权)将由管理员在应用程序中定义,更具体地说,管理员将有权访问名为“管理用户”的页面,在该页面中他可以从 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