- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试弄清楚为什么基于属性的安全性在 WCF 中没有像我预期的那样工作,我怀疑它可能与以下内容有关:
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var identity = new WindowsIdentity("ksarfo");
var principal = new WindowsPrincipal(identity);
Console.WriteLine("\nChecking whether current user [" + identity.Name + "] is member of [" + groupName + "]");
Console.WriteLine(principal.IsInRole(groupName)); // returns true
principal = (WindowsPrincipal)Thread.CurrentPrincipal;
identity = (WindowsIdentity) principal.Identity;
Console.WriteLine("\nChecking whether current user [" + identity.Name + "] is member of [" + groupName + "]");
Console.WriteLine(principal.IsInRole(groupName)); // returns false
我不明白为什么函数调用的结果不同:
principal.IsInRole(groupName)
为了完整起见,代码实际失败的地方在这里:
PrincipalPermission(SecurityAction.Demand, Role = "PortfolioManager")]
感谢帮助。
最佳答案
可能是因为这不是同一个类。
查看 MSDN:
所以,如果有不同的类,可能会有不同的实现。
编辑:
我试过这段代码:
public class InGroup
{
public string Name { get; set; }
public bool Current { get; set; }
public bool Fixe { get; set; }
public bool Thread { get; set; }
}
WindowsIdentity current = System.Security.Principal.WindowsIdentity.GetCurrent();
WindowsPrincipal principalcurrent = new WindowsPrincipal(current);
WindowsIdentity fixe = new WindowsIdentity("JW2031");
WindowsPrincipal principalFixe = new WindowsPrincipal(fixe);
IPrincipal principalThread = System.Threading.Thread.CurrentPrincipal;
List<InGroup> ingroups = new List<InGroup>();
foreach (IdentityReference item in current.Groups)
{
IdentityReference reference = item.Translate(typeof(NTAccount));
Console.WriteLine("{0}\t{1}\t{2}\t{3}",
reference.Value,
principalcurrent.IsInRole(reference.Value),
principalFixe.IsInRole(reference.Value),
principalThread.IsInRole(reference.Value));
ingroups.Add(new InGroup()
{
Name = reference.Value,
Current = principalcurrent.IsInRole(reference.Value),
Fixe = principalFixe.IsInRole(reference.Value),
Thread = principalThread.IsInRole(reference.Value)
});
}
foreach (IdentityReference item in fixe.Groups)
{
IdentityReference reference = item.Translate(typeof(NTAccount));
if (ingroups.FindIndex(g => g.Name == reference.Value) == -1)
{
ingroups.Add(new InGroup()
{
Name = reference.Value,
Current = principalcurrent.IsInRole(reference.Value),
Fixe = principalFixe.IsInRole(reference.Value),
Thread = principalThread.IsInRole(reference.Value)
});
Console.WriteLine("{0}\t{1}\t{2}\t{3}",
reference.Value,
principalcurrent.IsInRole(reference.Value),
principalFixe.IsInRole(reference.Value),
principalThread.IsInRole(reference.Value));
}
}
这里是 the result
如您所见,我没有使用不同方法的相同组。所以(因为我是本地计算机的管理员)我认为 WindowsIdentity.GetCurrent 将从 AD 获取用户,而 WindowsPrincipal(WindowsIdentity("")) 将从本地计算机获取用户。
在我的网络应用程序中,我获得了尽可能低的授权(我认为)。但是,我对 consoleapp 没有任何解释......
这只是假设,但这是连贯的。
关于c# - 从 WindowsIdentity 和 Thread.CurrentPrincipal 检索 WindowsPrincipal 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4563446/
这个问题类似于Set Thread.CurrentPrincipal Asynchronously? .然而,在我的例子中,我试图让它在单元测试中工作,并希望通过自定义 Synchronization
我正在尝试对 DelegateHandler 的实现进行单元测试。我的简化实现: public class FooHandler : DelegatingHandler { prote
我正在尝试对 DelegateHandler 的实现进行单元测试。我的简化实现: public class FooHandler : DelegatingHandler { prote
我有一个自定义 ServiceAuthorizationManager,我在其中覆盖 CheckAccess 并验证作为 URL 一部分的自定义身份验证 token 。验证后,我将 Thread.Cu
在什么情况下,当前线程的主体丢失。我有一个 Windows 窗体应用程序,它使用主体作为主线程并通过 WCF 从服务器接收通知。在某些客户端上,我丢失了当前线程的 Principal,但我不明白为什么
使用 ASP.NET WebAPI,在身份验证期间设置 Thread.CurrentPrincipal,以便 Controller 稍后可以使用 ApiController.User 属性。 如果该身
我在我的服务器上看到似乎是由匿名客户端发出的请求,尽管我确定它们是由经过身份验证的用户发出的 - 我有 fiddler 日志显示客户端发送了有效的 asp.net auth cookie,和服务器日志
在 .NET 3.5 Winforms 应用程序中,在用户提供用户名和密码后,我在 CurrentPrincipal 属性中设置自定义主体,如下所示: My.User.CurrentPrincipal
这是我在命令提示符下运行的一个简单的控制台应用程序: using System; using System.Threading; namespace Test { internal class
我有一个 WCF 服务需要知道调用用户的委托(delegate)人。 在我拥有的服务的构造函数中: Principal = OperationContext.Current.IncomingMessa
在初始化我的应用程序期间,我设置了 System.Threading.Thread.CurrentPrincial。但是在应用程序初始化后,我想访问这个 Principal,CurrentPrinci
我正在尝试使用 System.Threading.Thread.CurrentPrincipal.Identity.Name 获取正在使用 ASP.NET 应用程序的用户的登录信息。我没有收到任何构建
我遇到 Thread.CurrentPrincipal 没有从主线程传播到工作流应用程序的问题。 有什么办法吗? 这是我的示例应用程序: class Program { static void
是否有人可以阻止当前线程的 IPrincipal 在应用程序域边界上传播?我无法控制分配给线程的 IPrincipal,但我可以控制创建应用程序域。 (我这样做的原因是为了防止在主体对象类型的程序集在
我有可以从多种客户端类型(例如 WinForms、控制台、ASP.NET 等)调用的库代码,并且需要确定当前主体。在这样做时,我对 Thread.CurrentPrincipal 和 Environm
什么是Thread.CurrentPrincipal用于?它如何帮助应用程序的身份验证和授权?是否有任何文章或资源可以帮助解释它的作用? 最佳答案 Thread.CurrentPrincipal 是
在 ASP.net 应用程序中,我将登录控件与我编写的自定义成员资格提供程序一起使用。我想要做的是在用户通过身份验证后将 Thread.CurrentPrincipal 设置为我的自定义主体对象。 我
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 5 年前。 Improve th
我们正在尝试使用 Thred.CurrentPrincipal 来获取用户信息。然而,一旦我们将其部署到 Azure,CurrentPrincipal 就为空。 var td = new TokenD
我对新的 async/await 东西还很陌生。但是,我有以下类(class): public abstract class PluginBase { //Using EF to store l
我是一名优秀的程序员,十分优秀!