是否可以使用DI容器解析我的ClaimsAuthorizationManager

时间:2014-07-08 13:57:07

标签: .net claims-based-identity thinktecture-ident-model

我的自定义ClaimsAuthorizationManager使用标准配置文件设置工作,但我想在我的实现中注入业务层服务,我无法弄明白。

<system.identityModel>
    <identityConfiguration>
        <claimsAuthorizationManager 
            type="Authentication.AuthorizationManager, Assembly" />
        <claimsAuthenticationManager 
            type="Authentication.ClaimsTransformer, Assembly" />
    </identityConfiguration>
<system.identityModel>

我尝试使用静态FederatedAuthentication类手动设置它,但没有任何乐趣。 ClaimsAuthorizationModule始终为空。

FederatedAuthentication.ClaimsAuthorizationModule.ClaimsAuthorizationManager = DependencyConfig.Container.Resolve<ClaimsAuthorizationManager>();

我尝试过这个问题的答案,试图确保模块已加载......

FederatedAuthentication.WSFederationAuthenticationModule is null at runtime

......但它们没有效果。我也想知道那些信息是否过时了,因为我的应用程序中已经有来自System.IdentityModel程序集的相同名称的模块。

我正在使用Thinktecture IdentityModel,但我无法在那里找到解决我问题的任何地方。这个问题似乎暗示了它,但没有给我一个解决方案。 https://github.com/thinktecture/Thinktecture.IdentityModel/issues/9

我已使用null ClaimsAuthorizationModule解决了这个问题,答案已过时,我需要使用System.IdentityModel.Services程序集中的声明auth模块。现在我可以注入ClaimsAuthManager但是没有调用CheckAccess。

2 个答案:

答案 0 :(得分:2)

您可以处理的事件 - FederatedAuthentication.ServiceConfigurationCreated。这允许以编程方式设置声明授权管理器。

见这里:https://github.com/thinktecture/Thinktecture.AuthorizationServer/blob/master/source/WebHost/Global.asax.cs

答案 1 :(得分:1)

我为了单元测试而尝试了同样的事情。但也失败了。我认为花在它上面的时间是不值得的。只需在现场实例化业务服务,让它完成它的工作。