ASP的Active Directory身份验证.净MVC
本文关键字:MVC 身份验证 Directory Active ASP | 更新日期: 2023-09-27 17:49:28
我有一对表在我的数据库中指定哪些用户(取决于你的AD用户名)实际上可以使用当前的ASP。. NET MVC 2应用程序,我正在构建。
我的问题是如何(或更可能是在哪里和在哪里我把它?在主页上??)我写一个方法,得到AD用户的HTTP上下文中,并验证它对数据库,看看你是否可以实际使用的应用程序?如果你能……它的想法是在会话对象中编写几个键,其中包含我需要的信息(角色,全名等)。
我很困惑,我应该如何做到这一点,如果它实际上是正确的方式…请记住,我在我的应用程序中有一个管理部分和非管理部分。
任何想法吗?
编辑:请记住,我不关心通过表单验证用户。所有我想检查的是,如果根据我的数据库和你的AD用户名,你可以使用我的应用程序。如果你可以写到会话,以消灭我需要的信息。否则就抛出一个错误页面。
这是我到目前为止实现的,这是要走的路吗?第二种方法是什么?(对不起,我对c#有点陌生)我想做的是,如果你没有被授权,它实际上是抛出一个视图…
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized)
{
var canUse = this._userRepo.CanUserUseApp(httpContext.User.Identity.Name);
if (!canUse)
{
isAuthorized = false;
}
}
return isAuthorized;
}
您可以激活并使用Windows (NTLM)身份验证,然后编写一个自定义[Authorize]
属性,您可以在其中获取当前连接的AD用户并执行额外的检查,以确定他是否被授权对您的数据存储使用应用程序。然后你可以用这个自定义属性来修饰需要授权的控制器/动作。
更新:
下面是一个自定义属性的示例:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized)
{
// The user is authorized so far => check his credentials against
// the custom data store
return IsUserAllowedAccess(httpContext.User.Identity.Name);
}
return isAuthorized;
}
private bool IsUserAllowedAccess(string username)
{
throw new NotImplementedException();
}
}
然后:
[MyAuthorize]
public class FooController: Controller
{
public ActionResult Index()
{
...
}
}
用下面的代码创建一个名为AdminAttribute的类
<>之前[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]AdminsAttribute: AuthorizeAttribute{公共AdminsAttribute (){这一点。角色= "MSH''GRP_Level1,MSH''Grp_Level2";}}之前<>之前公共类HomeController: Controller{(管理员)public ActionResult Level1(){ViewBag。消息="欢迎使用ASP。净MVC !";返回视图();}