gpt4 book ai didi

asp.net-mvc - HttpContext.Current.Request.LogonUserIdentity.Groups 返回不同的结果

转载 作者:行者123 更新时间:2023-12-02 10:53:53 26 4
gpt4 key购买 nike

我正在尝试使用 Windows 身份验证在 MVC Intranet 应用程序中的特定 Controller 上使用 MVC Authorize 属性。 IIS 7.5 设置为仅使用 Windows 身份验证,并且 web.config 中的匿名访问处于关闭状态。我已通过域身份验证,但是,在 Controller 上执行任何操作时,仍然会提示我输入凭据。我检查了我的浏览器设置 (IE9),它被设置为使用我当前的 Windows 凭据自动登录。

我尝试创建一个自定义授权属性类来查看发生了什么。在 AuthorizeCore 中,我使用 httpContext 检查了我的用户名和组成员身份。我发现我所属的 System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups 中缺少一个组。一旦authorizecore 返回 false 并且出现凭据提示,我将提供当前登录时使用的相同凭据,然后 AuthorizeCore 再次运行。这次,找到了所有适当的组,并且基础 AuthorizeCore 当然授权了用户,一切正常。这是我创建的自定义授权类

public class MyAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool chk = httpContext.User.IsInRole("mydomain\\heavyequipadmin");

// this is just to see what AD groups are provided for the current user
ArrayList groups = new ArrayList();
foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
{
groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount)).ToString());
}

// just run the base method to Authorize
return base.AuthorizeCore(httpContext);
}
}

我的整个 Controller 上的属性是:

[MyAuthorize(Roles = "mydomain\\HeavyEquipAdmin")]

另一件事,web.config 中的角色管理器是:

 <roleManager defaultProvider="AspNetWindowsTokenRoleProvider" />

对于它的工作原理,有什么我不明白的地方吗?我只是希望我的身份验证/授权由 AD 处理。我对 MVC 相当陌生,并且诚实地配置了任何身份验证/授权方案。我确实下载了 MVC 3 的源代码来查看 AuthorizeAttribute 类的代码,看看是否有一些对我有意义的内容。如有任何建议,我们将不胜感激!

最佳答案

匿名鼠标用户在这里发挥作用:如果在 IIS 上允许匿名用户,则 System.Web.HttpContext.Current.Request.LogonUserIdentity.Name 会采用在 IIS 中配置为匿名的用户。否则它需要当前登录的用户。

关于asp.net-mvc - HttpContext.Current.Request.LogonUserIdentity.Groups 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com