问题标签 [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 投票
2 回答
9698 浏览

mocking - 模拟 Iidentity 和 IPrincipal

我只想问在我的单元测试中提供这些对象的更好方法是什么。

在我的单元测试中,我正在测试 CSLA 对象。CSLA 对象在内部使用 ApplicationUser 对象的一种属性和一种方法。ApplicationUser 继承自 IPrincipal。属性是: 1) ApplicationContext.User.IsInRole(...) - 该方法是 IPrincipal 的一部分 2) ApplicationContext.User.Identity.Name - 名称是 IIdentity 的属性,它是 ApplicationUser aka IPricipal 的一部分

我的测试示例(使用 RhinoMock):

我对第二个值(身份名称)有一点问题。我试图模拟它,但在将模拟的 IIdentity 分配给 ApplicationUser 时遇到问题,因为它是在内部完成的。有人告诉我自己创建一些 IIPrincipal(包括 IIdentity),根本不要嘲笑它。这是肯定可以做到的。不确定这是否可以称为存根使用?

那么你能建议我如何处理 IPrincipal 和 IIdentity 吗?任何建议都非常受欢迎。

0 投票
3 回答
3131 浏览

c# - WindowsPrincipal.IsInRole() 未返回预期结果

所以这是我当前的代码:

这是几个月前有人完成的,我很难理解为什么它不起作用。该公司最近刚刚从一个域名转移到另一个域名。所以我很好奇 p.IsInRole("String") 函数将使用什么域控制器。我假设无论计算机使用什么,它都会使用默认 DC。

奇怪的是,办公室中运行此程序的计算机可能位于 2 个单独的域中。在List<string>对象中,我有两个可能的域。因此它可以包含诸如“domainA\groupA”、“domainA\userB”、domainB\groupC 和/或“domainB\userD”之类的项目。

所以我的主要问题是 IsInRole 函数永远不会返回 true。我知道它应该,我什至用 domainA\Domain 用户对其进行了测试,但仍然得到一个错误的返回。

有任何想法吗?更改代码是可能的,但不是想要的。我不是 100% 我什至可以编译它...

0 投票
1 回答
2386 浏览

openid - 将用户 ID 存储在 Principal 或 Identity 中?ASP.Net/OpenID

我有一个使用表单身份验证的 ASP.Net MVC Web 应用程序。我正在使用 OpenID 进行身份验证。

目前,我将 openID url 存储在Namestandard 中GenericIdentity。我还希望能够轻松访问用户的数据库 ID。

我可以通过覆盖该Application_AuthenticateRequest函数来制作自定义提供者或身份。

我的问题是用户的数据库 uid 应该进入主体还是身份?

Identity 的 Name 属性应该是 openid url(用户可以有很多,但我想在每个页面上显示它)还是数据库 uid?

0 投票
3 回答
927 浏览

c# - IPrincipal 的文件和目录安全性

我需要通过 Directory.GetDirectories() 和 Directory.GetFiles() 方法访问当前 IPrincipal 可以访问的文件和目录,而不列出其他文件。该进程本身作为 NETWORK SERVICE 运行,因此在这些调用期间它必须将主体更改为当前用户(通过 IPrincipal)。

我试图在文件访问部分之前将 Thread.CurrentPrincipal 更改为新的 IPrincipal ,但它似乎没有任何区别。

还有什么我可以做的,还是我错过了什么?

0 投票
9 回答
221835 浏览

asp.net - ASP.NET MVC - 设置自定义 IIdentity 或 IPrincipal

我需要做一些相当简单的事情:在我的 ASP.NET MVC 应用程序中,我想设置一个自定义的 IIdentity / IPrincipal。哪个更容易/更合适。我想扩展默认值,以便我可以调用类似User.Identity.Idand的东西User.Identity.Role。没什么特别的,只是一些额外的属性。

我已经阅读了大量的文章和问题,但我觉得我让它变得比实际更难。我以为这很容易。如果用户登录,我想设置自定义 IIdentity。所以我想,我将Application_PostAuthenticateRequest在我的 global.asax 中实现。但是,在每个请求上都会调用它,并且我不想在每个请求上都调用数据库,因为它会从数据库中请求所有数据并放入自定义 IPrincipal 对象。这似乎也非常不必要,很慢,而且在错误的地方(在那里进行数据库调用),但我可能是错的。或者这些数据还来自哪里?

所以我想,每当用户登录时,我都可以在我的会话中添加一些必要的变量,我将它们添加到Application_PostAuthenticateRequest事件处理程序中的自定义 IIdentity 中。但是,我Context.Sessionnull存在,所以这也不是要走的路。

我已经为此工作了一天,我觉得我错过了一些东西。这应该不难做到,对吧?我也对随之而来的所有(半)相关内容感到有些困惑。MembershipProvider, MembershipUser, RoleProvider, ProfileProvider, IPrincipal, IIdentity, FormsAuthentication.... 我是唯一一个觉得这一切都非常混乱的人吗?

如果有人能告诉我一个简单、优雅、高效的解决方案,可以在 IIdentity 上存储一些额外的数据,而不需要额外的模糊......那就太好了!我知道关于 SO 有类似的问题,但如果我需要的答案在那里,我一定忽略了。

0 投票
5 回答
9326 浏览

serialization - 当用户在 ASP.NET 中被拒绝时,“CustomIdentity”上的 SerializationException

我尝试在我们现有的数据库之上实现 ASP.NET 身份验证和授权。我们有一个网站调用网络服务来获取其数据。要使用网络服务,我需要提供用户名和密码。知道了这一点,我决定实现 IIdentity 和 IPrincipal 来存储加密的密码,并能够在执行 web 服务调用时提供它。将来,我们可能希望更多地使用 asp.net 的内置安全性,因此我实现了成员资格和角色提供程序并覆盖了我所需要的(ValidateUser 和 GetRoles)虽然,在验证用户之后感谢成员资格提供程序实现我仍然将我自己的 CustomIdentity 设置为 Context.User 以便能够在需要时检索其密码。

只要允许用户访问该页面,它就可以完美运行。但是当用户被拒绝时,框架不会抛出 AccessDeniedException,而是在我的 CustomIdentity 上抛出序列化异常。我发现了一个完全相似的行为,并在此链接上描述了更多详细信息,但没有发布任何答案。

我的例外与上面的链接完全相同

同时使用成员资格和自定义 IIdentity 和 IPrincipal 是否正确?如果没有,如果我使用成员资格和角色提供者,在哪里添加密码或其他用户数据等属性?

最好的祝福,

斯蒂芬·埃布雷希

0 投票
2 回答
8231 浏览

asp.net-mvc - ASP.NET MVC 自定义 IPrincipal 注入

我正在使用 ASP.NET MVC 1.0 开发一个应用程序,并且正在尝试将自定义 IPrincipal 对象注入到 HttpContext.Current.User 对象中。

对于传统的 WebForms 应用程序,我使用 Application_AuthenticateRequest 事件来执行此操作,如下所示。

因此,使用它,我可以通过将 User 对象显式转换为 SiteUser 类型来访问我的自定义 IPrincipal。实际上,我是通过拥有一个所有 Pages 都从其继承的自定义类来做到这一点的,它在幕后为我做了这件事。

无论如何,我的问题是,使用 ASP.NET MVC 时,Application_AuthenticateRequest 似乎会在发出任何请求时触发(对于 JS 文件、图像等),这会导致应用程序死亡。

关于如何将自定义 IPrincipal 注入 ASP.NET MVC 1.0 中的 HttpContext.Current.User 对象的任何帮助或建议将不胜感激。我确实在 SO 上看到了以下帖子,但它似乎没有满足我想要实现的目标:ASP.NET MVC - Set custom IIdentity or IPrincipal

TIA。

0 投票
3 回答
230 浏览

asp.net - ASP.net 网络服务

我正在使用一个 Web 服务,它在登录时设置 Thread.CurrentPrincipal 对象,不久之后,当同一 Web 服务的另一个 Web 方法访问 Thread.CurrentPrincipal 时,它的不同/重置

有人可以告诉我这是预期的还是来自同一客户端的不同 webmethod 调用可以访问相同的 Thread.CurrentPrincipal 对象

谢谢

0 投票
1 回答
572 浏览

.net - Asp.NET 主体 WebORB HttpHandler

我有一个 Flex-WebORB-Asp.NET 应用程序。登录时,有一个 AuthenticationHandler 实现了 WebORB 接口:

所以我创建了一个 Principal 并返回它。WebORB 使用 Principal 检查远程方法调用的身份验证和授权。

现在,在这一点上,如果我检查它是什么HttpContext.Current.User.Identity,它是一个 WindowsIdentity。

到目前为止,一切都很好。稍后,通过 WebORB 完成远程调用,我通过调用获取登录用户的 ID:

所以我猜 WebORB 会确保每次远程调用都设置了线程的标识。

问题是,当我调用 HttpHandler(检索图像)时,我还尝试使用 获取登录用户的 id Thread.CurrentPrincipal.Identity.Name,但这不起作用。可能是因为使用 HttpHandler,WebORB 不会起作用。

您将如何解决这个问题,以便我可以在两种情况下以相同的方式获取登录用户的 ID?把它放在一个会话对象中?你能改变HttpContext.Current.User.Identity吗?不应该HttpContext.Current.User.Identity和 一样Thread.CurrentPrincipal.Identity.Name吗?

ps:用户不在活动目录中。

0 投票
2 回答
4138 浏览

asp.net - asp.net 中的 HttpContext.Current.User 和 Thread.CurrentPrincipal 有什么区别?

嗯,我觉得标题够清楚了。