我有一个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

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

  1. laravel-admin的图片删除实例

    今天小编就为大家分享一篇laravel-admin的图片删除实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  2. laravel-admin 后台表格筛选设置默认的查询日期方法

    今天小编就为大家分享一篇laravel-admin 后台表格筛选设置默认的查询日期方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  3. laravel-admin 在列表页添加自定义按钮的例子

    今天小编就为大家分享一篇laravel-admin 在列表页添加自定义按钮的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. 在laravel-admin中列表中禁止某行编辑、删除的方法

    今天小编就为大家分享一篇在laravel-admin中列表中禁止某行编辑、删除的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. laravel admin实现分类树/模型树的示例代码

    这篇文章主要介绍了laravel admin实现分类树/模型树,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. django中的auth模块与admin后台管理方法

    这篇文章主要介绍了django中的auth模块与admin后台管理方法,包括auth模块的常用方法及如何扩展auth_user表,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

  7. laravel-admin 实现给grid的列添加行数序号的方法

    今天小编就为大家分享一篇laravel-admin 实现给grid的列添加行数序号的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. SpringBoot Admin集成诊断利器Arthas示例实现

    这篇文章主要为大家介绍了SpringBoot Admin集成诊断利器Arthas示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  9. Spring boot admin 服务监控利器详解

    这篇文章主要介绍了Spring boot admin 服务监控利器详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  10. 解决laravel-admin 自己新建页面里 js 需要刷新一次的问题

    今天小编就为大家分享一篇解决laravel-admin 自己新建页面里 js 需要刷新一次的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部