【问题标题】:Is it possible to resolve my ClaimsAuthorizationManager using a DI container是否可以使用 DI 容器解决我的 ClaimsAuthorizationManager
【发布时间】:2014-07-09 02:50:10
【问题描述】:

我的自定义 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 程序集中的声明身份验证模块。现在我可以注入 ClaimsAuthManager 但不会调用 CheckAccess。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我正在处理那个事件。部分问题是我试图在我的配置中加载错误的模块,我试图使用 Microsoft.IdentityModel.Services 而不是较新的 System.IdentityModel.Services。当我发现我设法让 FederatedAuthentication.ClaimsAuthorizationModule 被初始化但是当我在静态 FederatedAuthentication 对象上设置 ClaimsAuthorizationManager 时,从未调用过 CheckAccess 方法。我已将实现恢复为使用服务定位器,但我将返回并尝试通过在事件 args 对象上设置管理器来代替。
    • 工作就像一个魅力,意味着我只需要调用服务定位器来解决 ClaimsAuthManager 而不是几个隐藏的依赖关系。
    【解决方案2】:

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

    【讨论】:

    • 我会服务定位它,然后它仍然可以模拟测试。
    • 这不是问题,因为我正在服务定位授权管理器以初始化模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多