【问题标题】:How to construct a PrincipalPermission with Principal to authorize against that Principal's account?如何使用 Principal 构建 PrincipalPermission 以授权该 Principal 的帐户?
【发布时间】:2018-03-30 18:29:46
【问题描述】:

问题,

当我在 PrincipalPermission 上调用 Demand 时,如何构造一个 PrincipalPermission 对象来授权来自 Principal 对象的数据?

为什么以及您尝试了什么...

我存储用户输入提供的帐户字符串,这些字符串反映了“jlaird”等用户帐户名称。然后当有人尝试使用我的 Windows 服务时,我会根据谁通过 WCF 接口调用来授权访问。

所以我使用提供的字符串并从中构建一个 System.DirectoryServices.AccountManagement.Principal 对象。这样:

System.DirectoryServices.AccountManagement.Principal userP = null;
userP = System.DirectoryServices.AccountManagement.Principal.FindByIdentity(new PrincipalContext(ContextType.Domain), "jlaird");

然后我以这种方式构建一个 System.Security.PrincipalPermission:

System.Security.PrincipalPermission permPP = null;
permPP = new PrincipalPermission(userP.UserPrincipalName, null);

然后当我调用 System.Security.PrincipalPermission.Demand() 并等待异常(或不)来授权正在调用 Windows 服务的用户,如下所示:

permPP.Demand()

通过调试,我验证了字符串“jlaird”和“MYDOMAIN\jlaird”都指向由 Principal 对象表示的同一个帐户。在这两种情况下,Principal 对象的 UserPrincipalName 都是“jlaird@MYDOMAIN.com”。

即使我从 userP.UserPrincipalName 构造它,对 PrincipalPermission 的需求也会引发异常。实际上,它只授权用户,当我将字符串“MYDOMAIN\jlaird”传递给新的PrincipalPermission 时,它不会抛出异常,例如:

new PrincipalPermission("MYDOMAIN\jlaird", null);

然而,这会引发异常:

new PrincipalPermission("jlaird@MYDOMAIN.com")

如何构造一个 PrincipalPermission 对象来授权来自 Principal 对象的数据,以便“MYDOMAIN\jlaird”和“jlaird”将授权并使 Demand 不会引发异常?

【问题讨论】:

    标签: c# wcf permissions


    【解决方案1】:

    好的。找到了解决办法。

    System.Security.Principal.WindowsIdentity wIdent = null; 
    wIdent = new System.Security.Principal.WindowsIdentity(userP.UserPrincipalName);
    System.Security.PrincipalPermission permPP = null;
    permPP = new PrincipalPermission(wIdent.Name, null);
    

    PrincipalPermission(string, string) 期望第一个参数是作为线索的 IPrincipal 名称。 WindowsIdentity 实现了该接口。因此,我域上的 'jlaird' 和 'MYDOMAIN\jlaird' 最终都解析为 'MYDOMAIN\jlaird',这让 PrinicipalPermission.Demand 很高兴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-19
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多