微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

active-directory – User.IsInRole(“fake group”)导致“主域和受信任域之间的信任关系失败”

我有一个MVC 3应用程序,使用 Windows身份验证和声明使用WIF 4.5.

通过AD组中的成员资格(当前)控制对应用程序的访问:

<deny users="?" />
<allow roles="domain\somegroup" />
<deny users="*" />

除AD组外,我们还需要添加自定义角色. (此应用程序正在从Forms转换为Windows身份验证)

为了支持这些自定义角色(直到它们在AD中管理),我们将它们添加为ClaimTypes.GroupSid声明给用户,以便使用[Authorize(“ADMIN”)]和User.IsInRole(“ADMIN”)的现有代码继续功能

Application_PostAuthenticateRequest(object sender,EventArgs e)
{
    var identity = ClaimsPrincipal.Current.Identity as WindowsIdentity;
    var roles = userDAL.GetRoles(identity.Name);
    foreach(var role in roles)
    {
        identity.AddClaim(new Claim(ClaimTypes.GroupSid,role));
    }
}

这一切都按预期工作.

除非当前用户不是某个自定义角色(如ADMIN)的成员,并且该角色在AD中也不存在

我们在Controller Action Methods上使用[Authorize(“ADMIN”)],以及根据场景使用User.IsInRole(“ADMIN”)的各种实例.在那些发生错误并且应用程序爆炸的情况下.

AD基础架构正处于升级/迁移过程中.我不知道那里的所有细节,但我知道有一些域,据说它们之间有信任,基础设施人员已经提到这些信任关系正在运行.

所以我想我想知道两件事:

>这似乎不是我们的代码应该处理的东西.那么域名真的可能出现什么问题?我可以找出信任关系失败的“可信”域名吗?
>解决这个问题的最佳方法是什么?我不喜欢编写辅助方法的想法. Authorize()子类只是为了捕获此异常.

请转到inetmgr,站点,认网站,站点名称,iis组,双击身份验证,禁用匿名身份验证,然后重置应用程序池.

当Windows无法解密web.config文件中“authorization,allow roles”标记下定义的角色时,就会发生这种情况.用于测试注释掉web.config文件中的自定义角色标记.混合表单身份验证和Windows身份验证时,似乎会出现此问题.魔术发生在Global.asax文件Application_PostAuthenticateRequest方法中,当使用Forms身份验证时,您可以将User.Identity强制转换为FormsIdentity,然后从FormsIdentity Ticket创建自定义身份,然后从自定义身份创建自定义原则,然后您将能够将CustomPrincipal附加到当前用户和当前主体,即.

Dim fIdent As FormsIdentity = CType(User.Identity,FormsIdentity)
Dim ci As New CustomIdentity(fIdent.Ticket) 
Dim cp As New CustomPrincipal(ci)
HttpContext.Current.User = cp : Thread.CurrentPrincipal = cp

对于IIS,您希望启用Forms身份验证和匿名身份验证,其他所有内容都应禁用.使用Windows身份验证时,Global.asax文件Application_PostAuthenticateRequest方法可以直接从User.Identity创建自定义原则,即.

Dim cp As New CustomPrincipal(User.Identity)
HttpContext.Current.User = cp : Thread.CurrentPrincipal = cp

在这种情况下,IIS设置应该是Windows身份验证,并且启用ASP.Net模拟并禁用其他所有内容.

将这些身份验证方法混淆会导致“主域和受信任域之间的信任关系失败”错误,因为如果您的Application_PostAuthenticateRequest方法由于某种原因未实现CustomPrinciple,那么Windows将尝试使用内置的IsInRole函数来检查对域角色的角色,而不是使用您的CustomPrinciple代码隐藏文件后面的自定义IsInRole.

这是一篇有用的文章链接

http://www.codeproject.com/Articles/8819/Authorize-and-authenticate-users-with-AD
https://msdn.microsoft.com/en-us/library/ff647405.aspx
https://support.microsoft.com/en-us/kb/306359

原文地址:https://www.jb51.cc/windows/364971.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐