问题标签 [iprincipal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
72 浏览

master-pages - 母版页不显示 IPrincipal 上的扩展方法

我有一个问题,我找不到解决方案。

我有一个带有 IPrincipal 扩展方法的模块:

该代码在 .aspx 页面中运行良好:

但它在母版页中不起作用;扩展方法不会出现在智能感知中。我努力了:

任何想法?

谢谢!

0 投票
1 回答
423 浏览

c# - 在 mvc 中理解 IPrincipal

我试图了解 IPrincipal 和 IIdentity 的目的,或者只是一般的 Principal 对象。

根据我从MSDN阅读的内容。IIdentity 描述了身份验证的用户以及有关他们的任何信息。

IPrincipal 是用户通过身份验证的上下文。

我对这两种解释是否正确?这篇文章真正让我失望的是主体的“安全上下文”,我不确定我是否真正理解这意味着什么。

我有一点疑惑

0 投票
1 回答
321 浏览

c# - Winforms 主 UI 线程主体恢复到以前

我正在开发一个使用 CSLA 框架和自定义身份验证的 Winforms 应用程序(即中间层/服务器管理身份验证),并且正在实施会话超时功能。

我遇到的问题是校长的一个奇怪问题。当我在会话超时后登录时,我创建了一个新的 Principal 对象(我自己的自定义 Principal 对象)。这被分配给当前线程,它始终是 UI 线程(我已经检查过并且正在使用 Control.Invoke 来确保登录表单在 UI 线程上运行,并且此表单的点击事件在 UI 线程上运行) .

但是,在此之后,当我单击 UI 中的按钮时,我可以看到委托人已恢复为委托人。

主 UI 线程是否有任何理由或条件能够恢复到以前的 Principal?

在主 UI 线程上的主体周围是否有任何已知的陷阱可以避免?

我已经检查过了,我没有在其他任何地方设置 Thread.CurrentPrincipal。

更新

我通过更改为 aWindows.Forms.Timer来触发我的会话超时解决了这个问题,而不是以前我使用 aSystem.Timers.Timer然后Control.Invoke在需要的地方使用。当我更改此设置时,我在 UI 线程上设置的 Principal 仍然存在,下次在 UI 线程上执行某些操作时。

谁能解释一下?因此,从本质上讲,在 UI 线程上设置 Principal 似乎意味着两种不同的事情......在设置它时是否需要确定某种上下文?

我发现其他几个人似乎有同样的问题......

http://permalink.gmane.org/gmane.comp.windows.devel.dotnet.advanced/14046 https://groups.google.com/forum/#!topic/microsoft.public.dotnet.languages.csharp/_hLhcDB3jHA

0 投票
1 回答
1082 浏览

asp.net - OWIN 中间件的 CurrentPrincipal.Identities 有不同的声明集

今天我正在为 Oauth 中间件配置授权提供程序,并尝试将一些 guid 值插入到 Thread.CurrentPrincipal.Identity.Claims 中。但是当我试图调用 Thread.CurrentPrincipal 的 FindFirst 时,我什么都没有。

这是我试图做的例子:

检查内部属性,发现 Thread.CurrentPrincipal.Identity 仍然包含我之前设置的声明,但 Thread.CurrentPrincipal.Identities[0] - 没有。因此,有两个不同的身份实例具有自己的一组声明。

我尝试在 Web Api 控制器的操作中执行相同的步骤,并且 Identity 引用了 Identities[0],这意味着存在相同的实例。

OWIN 中间件的 Currentprincipal 发生了什么,所以它的 Identity 和 Identities[0] 指的是不同的实例?谁能给我解释一下,好吗?

谢谢!

0 投票
2 回答
3241 浏览

c# - UserPrincipal.IsMemberOf 返回 false

我正在尝试验证用户是否在“TestGroup”组中。用户是“TestGroup”组的一部分,即使我得到了 retval = false @line(retVal = user.IsMemberOf(groupPrincipal);),并且在事件查看器中它显示 msg 为“用户名或密码不正确”。

你能帮我吗?

0 投票
0 回答
1822 浏览

c# - 为什么使用 Simple Injector 创建实例时 Thread.CurrentPrincipal.Identity.IsAuthenticated 为假

基本上,我正在尝试获取当前访问 Web Api 的经过身份验证的用户(通过承载令牌)的当前声明集;通过将当前主体注入到辅助类中,然后将其注入到注入 ApiController 的类中。

但是,返回的主体从来都不是我想要的,因为它没有经过身份验证并且不包含任何声明。如果我在创建 ApiController 后单步执行它的构造函数,则本地 ApiController.User 主体值设置正确。

这是我创建并链接到下面的示例解决方案的一些代码...

容器注册:

样品控制器:

示例控制器显示注入的主体未经过身份验证,但本地 ApiController.User 主体是并且包含用户角色。在上面的示例中,角色总是从路径“From ApiController.User”返回。

有人知道为什么从简单的注入器获取 Thread.CurrentPrincipal 时声明不可用吗?

干杯

编辑:在此处添加了人为的示例解决方案,显示 IPrincipal 未注入角色详细信息,但本地 ApiController 用户主体执行:http ://www.filedropper.com/principalinjector

进一步编辑:更新示例代码内联

更多信息

如果我修改容器以使用延迟加载,我可以从注入器获取主体...

容器变化:

控制器变化:

0 投票
1 回答
1561 浏览

asp.net-identity - Identity 2.0 自定义 UserManager/RoleManager 与 razor 调用 User.IsInRole("RoleName")

问题如下:通读以了解您需要帮助回答的内容...

我有

  • 对比 2013
  • 带有 Razor 视图的 MVC 5
  • Dapper DAL 自定义 UserManager 和 UserStore/User : IUser< int >

我构建了我自己的 UserManager、RoleManager、UserStore、RoleStore,所有这些都基于 CustomUser:IUser<int> 和 CustomRole:IRole<int>

我可以更改密码、找回忘记的密码、登录、注销……一切都很好。

但是,在剃刀视图中,当我尝试使用时:

我从其他一些模块中得到一个 SQL 异常(可能发生在 iPrincipal Identity 类中???):

但我可以打电话

在我的控制器服务器代码中......

问题:

  1. User.IsInRole 和 UserManager/UserStore 和/或 RoleManager 之间有什么关系

  2. 如何在 Razor 视图中获取 User.IsInRole("Administrators") 以“理解”它需要使用我的自定义身份验证实现?

0 投票
4 回答
24990 浏览

c# - .NET 中 IIdentity 和 IPrincipal 背后的想法是什么

那么,存在IIdentityandIPrincipal而不是 some的目的是什么IIdentityMergedWithPrincipal?什么时候在同一个类中实现两者还不够?

另外,为了理解目的,我想知道这个概念来自哪里:

  • 它起源于.Net
  • 有 Identity/Principal 作为设计模式的概念,System.Security.Principal在这些接口中实现
  • 它起源于其他地方并支持兼容性

因此,UserPrincipalfrom 的System.DirectoryServices行为类似于IPrincipal但不是出于偶然或有意而为?

PS我正在寻找想法背后的推理,而不是利益/争议比较,所以请尽量不要开始基于意见的讨论

0 投票
3 回答
5861 浏览

c# - 单元测试,如何设置 Thread.CurrentPrincipal 和 IsAuthenticated

我正在尝试对 n 层应用程序、服务层、存储库层和 Web api 控制器执行单元测试。我的存储库正在检查 Thread.CurrentPrincipal 对象以获取当前用户。这是我遇到问题的地方,当我创建从 IPrincipal 继承的实现类时,它确实允许我设置 IsUserAuthenticated。有没有办法为我的单元测试模拟这个。我想将 Thread.CurrentPrincipal 设置为我的实现对象。我将如何以这种方式模拟用户?

在我的 RepositoryBase 代码中,我调用以下命令来确定用户是否已通过身份验证:

实际测试看起来像:

我从下面的 UserPrincipal 中提取 IsUserAuthenticated:

0 投票
3 回答
1426 浏览

c# - 使用 SignalR 注入 IPrincipal

我正在尝试注入IPrincipal我的 SignalR 集线器构造函数。我已经看到并尝试了“ Selective IPrincipal Injection via StructureMap with SignalR ”中的解决方案,但不幸的是,这似乎不再适用于 SignalR 2.x。

在我的调试中,我发现有时,我的集线器构造函数是在堆栈中使用我的 OWIN 中间件调用的。在这种情况下,Thread.CurrentPrincipal是正确的值。此外(并且令人惊讶地),HttpContext.Current也不是空的。我的印象是这在 SignalR 中总是空的,我没有尝试使用它,但我只是在观察。这些有效的调用似乎来自调用堆栈中的管道。

其他时候,调用似乎来自线程池。在那些情况下,Thread.CurrentPrincipalis a GenericPrincipal, HttpContext.Currentis null (再次只是观察),我似乎无法静态地了解主体。但是,在枢纽内部,该this.Context.User物业确实有正确的委托人。

我还能如何静态获取主体,以便可以将其注入集线器构造函数?