【发布时间】:2014-04-26 10:17:27
【问题描述】:
我有一个 MVC 3 应用,使用带有 WIF 4.5 声明的 Windows 身份验证。
对应用程序的访问(当前)通过 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 中
我们在控制器操作方法上使用[Authorize("ADMIN")],以及根据场景使用User.IsInRole("ADMIN") 的各种实例。在那些发生错误并且应用程序崩溃的情况下。
AD 基础架构正在进行升级/迁移。我不知道那里的所有细节,但我知道有一些域,据说它们之间存在信任,基础设施人员向我暗示这些信任关系已经建立并运行。
所以我真的想知道两件事:
这看起来真的不是我们的代码应该处理的事情。那么,域名到底有什么问题呢?我可以找出信任关系失败的“受信任”域吗?
解决此问题的最佳方法是什么?我不喜欢编写辅助方法和
Authorize()子类只是为了捕获此异常的想法。
【问题讨论】:
-
用于检查一个组是否真的存在,(这对我有帮助)stackoverflow.com/questions/14590744/…
-
我们遇到了同样的问题。感谢您的详细解释。
标签: active-directory windows-authentication trust isinrole