【问题标题】:Mixing Windows Authentication with Claims将 Windows 身份验证与声明混合
【发布时间】:2014-05-20 22:21:23
【问题描述】:

我觉得我可能在这里走错了路,希望有人能够做一点路线修正!

我正在创建一个使用 Windows 身份验证的 Web 应用程序。但是,我希望将自定义声明/角色分配给特定的 Windows 用户,我计划将其存储在 SQL 数据库中。

我认为这样做的一种方法是在我的应用程序的 web.config 中启用 Windows 身份验证,但要从 WIF 添加一个 AuthenticationManager,它可以将自定义声明(直接来自数据库)添加到主体/身份.然后 AuthorizationManager 将处理对特定控制器操作的授权。

我现在遇到的问题是我的 Authentication 和 AuthorizationManagers 没有被调用。我不确定我缺少什么(它们已在 web.config 中注册),但我怀疑可能是因为我使用的是 Windows 身份验证......?此外,我的 Authorize 属性没有调用 AuthorizationManager,可能是因为我需要创建一个新属性。

这是一条可行的路线,还是我应该考虑创建一个自定义 RoleProvider?

【问题讨论】:

    标签: c# asp.net-mvc claims-based-identity asp.net-authorization


    【解决方案1】:

    ClaimsAuthenticationManager 不会自动调用 - FAM 会调用它。

    也就是说 - 你可以自己调用它,例如在 Post_AuthenticateRequest 中,然后使用 SAM 设置 cookie。这是完全可行的。

    【讨论】:

    • 谢谢!我不完全确定这是如何工作的。我已经设法从 Application_PostAuthenticateRequest 方法调用了我的 ClaimsAuthenticationManager,并且可以使用 SAM 写入 cookie。但是,SAM 如何为每个后续请求从 cookie 加载声明?并且每个请求都会调用这个 Application_PostAuthenticateRequest - 有没有办法减少它对应用程序的影响?即使在请求图像时,我的 ClaimsAuthenticationManager 也会从数据库中检索角色!如果您有任何示例,那将是王牌!
    • 我在这里找到了我认为很好的解决方案:stackoverflow.com/questions/16904639/…
    • 您需要编写 cookie 并包含 SAM 模块才能读取它。在第一个请求中,您应该有一个 WindowsPrincipal,在您编写 cookie 之后,您应该有一个普通的 ClaimsPrincipal。这就是你可以优化它的方式。
    猜你喜欢
    • 2011-01-16
    • 2011-03-12
    • 1970-01-01
    • 2015-07-18
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2016-12-24
    相关资源
    最近更新 更多