AuthorizationContext.Principal 会自动从 ClaimsPrincipal 更改为 GenericPrincipal

问题描述 投票:0回答:2

我不知道为什么 AuthorizationManager 中的上下文原则会发生变化。我的代码就像

  public class AuthorisationManager : ClaimsAuthorizationManager
{
    public override bool CheckAccess(AuthorizationContext context)
    {
        var resource = context.Resource.First().Value;
        var action = context.Action.First().Value;
        return context.Principal.HasClaim(resource, action);
    }
    public override void LoadCustomConfiguration(System.Xml.XmlNodeList nodelist)
    {
        base.LoadCustomConfiguration(nodelist);
    }
}

我有 GUI 中的项目列表。第一次它工作正常,但是当我选择第二项时, context.Principle 更改为 GenericPrinciple。

任何想法都会对此有所帮助。

c# .net .net-4.5 claims-based-identity
2个回答
1
投票

好的 - WPF。

是的,我隐约记得 WPF 中有一些围绕 Thread.CurrentPrincipal 的“功能”。

尝试

Thread.CurrentPrincipal = principal

AppDomain.CurrentDomain.SetThreadPrincipal(principal);

IIRC,你可能必须在 App 类中执行此操作(ctor?)。


1
投票
return context.Principal.HasClaim(resource, action);

嗯 - 通常,声明和授权“决定”之间不存在 1:1 的相关性。此外,在典型场景中,声明仅保存身份数据 - 稍后可以使用某些数据作为授权决策的基础。然后,授权管理器使用自己的数据管理来做出这些决策。

现在,由于这是一个客户端应用程序(我不知道它是 WPF),您可能会做一些不同的事情。在服务器应用程序中,您的方法可以很好地扩展。

© www.soinside.com 2019 - 2024. All rights reserved.