我正在尝试为我的MVC应用程序对域中的所有用户进行身份验证。目前,我正在使用VSD-PROMETHEUS / Administrator用户进行测试。
我已尝试按照本answer中的建议,在控制器类中授权VSD-PROMETHEUS的用户组。
[Authorize(Roles = "VSD-PROMETHEUS\\Domain Users")]
这不起作用,浏览器仅提示我登录。
我也曾在web.config中尝试过
<authorization>
<allow roles="VSD-PROMETHEUS\Domain Users"/>
<deny users="*"/>
</authorization>
这也不成功
出于记录目的,我尝试仅对用户角色进行身份验证而不指定域,并且能够访问我的网站
[Authorize(Roles = "Users")]
当我仅指定用户名时也可以使用
[Authorize(User = "VSD-PROMETHEUS\\Administrator")]
如何从单个域(在本例中为VSD-PROMETHEUS)对所有用户进行身份验证?
答案 0 :(得分:0)
我通过创建自定义授权属性来完成这项工作。
using System;
using System.Web;
using System.Web.Mvc;
/// <summary>
/// Authorises User based on what domain they are on.
/// </summary>
public class AuthorizeDomainAttribute : AuthorizeAttribute
{
/// <summary>
/// List of domains to authorise
/// </summary>
public string[] Domains { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
// Get the domain part of the username
string userDomain = httpContext.User.Identity.Name.Substring(0, httpContext.User.Identity.Name.LastIndexOf('\\'));
// Check if the user is on any of the domains specified
foreach(string domain in this.Domains)
{
if (userDomain == domain)
{
return true;
}
}
// Otherwise don't authenticate them
return false;
}
}
然后在我的控制器上使用此属性。
[AuthorizeDomain(Domains = new[] { "VSD-PROMETHEUS")]