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

asp.net-mvc-3 - 在 MVC3 中使用自定义 IPrincipal 和 IIdentity

我创建了自己的IPrincipal实现IIdentity,如下所示:

另外,我创建了一个HttpModule并且在它的AuthenticateRequest事件中,我这样做:

另外,我创建了自己的ControllerWebViewPage喜欢这些:

如上面的代码所示,似乎一切都是正确的;但正如您所见,在1 号位置我无法访问CustomPrincipal!意味着在这个地方,我有 aRolePrincipal而不是CustomPrincipal. egHttpContext.Current.User是 aRolePrincipal而不是CustomPrincipal. 但RolePrincipal.Identity属性是CustomIdentity

0 投票
2 回答
1588 浏览

asp.net - ASP .NET 中没有表单身份验证的基于角色的安全性

我想利用:

在 Page 方法以及web.config中的授权部分工作时:

并在类和方法级别应用规则:

在我的应用程序中,我使用 ... 自定义机制进行身份验证,该机制在 ... http 标头中为我提供用户身份。我得到用户 PIN 码(某种 ID)+ 角色。但这是一个支线情节。没关系。

我真正想要实现的是利用 ASP .NET 内置的授权功能,但拥有我的自定义身份验证机制。我想我必须实现IPrincipalIIdentity,对吗?我在网上看到了很多示例,但所有示例都包括指定提供程序的 web.config 配置,以及FormsAuthentication之类的类,我想我不需要这些。我只需要将我的用户对象(由我准备)注入到请求中,就是这样。

所以:

  • 实现它的最简单方法是什么?
  • GenericPrincipal / IPrincipal 有什么区别?
  • 如何获取/创建 IIdentity 对象?我看到了样本:

    var id = new FormsIdentity(authTicket);

但我没有使用 FormsAuthentication。

谢谢

0 投票
2 回答
2715 浏览

asp.net-mvc-3 - RoleProvider 不适用于服务器上的自定义 IIdentity 和 IPrincipal

我正在使用自定义IIdentityIPrincipal在我的ASP.NET MVC应用程序中通过EF 4.3这里解释并遵循接受的答案的解决方案)。另外,我有一个自定义RoleProvider. 在本地(使用IIS Express),它可以正常工作。但是现在,当我在真实主机上上传应用程序时,似乎所有用户都在"admin"起作用!例如,我创建了一个不在角色中的用户"admin",但它可以访问所有受保护的页面(需要"admin"角色)。例如Role.IsUserInRole总是返回true。请问你有什么想法吗?你能帮助我吗?有什么我应该做的设置IIS吗?

0 投票
2 回答
1880 浏览

asp.net - Thread.CurrentPrincipal 不能设置为表单身份验证主体

我有一个 WCF 服务,它托管在 ASP.NET MVC 应用程序中(如http://msdn.microsoft.com/en-us/library/aa702682.aspx中所述)。部分 MVC 操作和 WCF 服务操作受到保护,我对两者都使用 ASP.NET 表单身份验证:

我的 WCF 客户端确保表单身份验证.ASPXAUTHcookie 在每次 WCF 调用时传输到服务器。

这在很长一段时间内都非常有效。现在我正在HTTPS使用SSL证书向我的服务器添加加密。这需要我对 Web.config` 进行以下更改:

服务被激活,客户端可以调用服务器操作。但是,[PrincipalPermission]受保护的服务器操作前面的属性突然阻止了所有服务调用。我发现了以下内容:

  • 在 HTTP 情况下(没有<security mode="Transport">),两者Thread.CurrentPrincipalHttpContext.Current.User都设置为一个RolePrincipal实例,属性中有一个FormsIdentity实例RolePrincipal.Identity。在这种情况下,一切正常。
  • 在 HTTPS 情况下(<security mode="Transport">在 web.config 中),该属性HttpContext.Current.User仍设置为RolePrincipal/FormsIdentity组合。但是,属性Thread.CurrentPrincipal突然设置为WindowsPrincipal/WindowsIdentity实例,这使得[PrincipalPermission]属性抛出异常。

我尝试了以下方法:

  • 将 更改AppDomain.CurrentDomain.SetPrincipalPolicy为每个可能的值(在Global.asax's中Application_Start),但这并没有改变任何东西。
  • Thread.CurrentPrincipal在 中设置属性Application_PostAuthenticate,但在Application_PostAuthenticate实际服务调用之间,Thread'再次CurrentPrincipal更改为 a WindowsPrincipal

有什么提示吗?我究竟做错了什么?

0 投票
3 回答
736 浏览

c# - linqpad 和自定义 IPrincipal 可序列化

我正在使用 LINQPad 测试代码(我必须说这是一个很棒的产品),但是现在当我尝试将 Thread.CurrentPrincipal 设置为自定义 IPrincipal 时遇到异常,该自定义 IPrincipal 标记有 SerializableAttribute 以下示例演示问题

当我在 LINQPad(C# 程序作为语言)中运行此代码时,出现以下异常

如果我删除 Serializable 属性一切正常。这似乎是一个与 LINQPad 使用的 AppDomain 体系结构相关的问题,并且该框架无法找到定义 MyCustomPrincipal 的程序集。另外,我相信将 MyCustomPrincipal 定义到另一个程序集中并将其放入 GAC 可以解决问题,但这不是我的选择。有人有想法吗?

谢谢,马可

编辑:我不知道它是否有帮助,但我在 SqlDependency.Start 上遇到了同样的问题:将 Serializable 放在 IPrincipal 上使框架抛出错误,抱怨它找不到定义类型的程序集校长。我已经解决了一个可耻的黑客:

0 投票
2 回答
5216 浏览

asp.net - 如何全局创建 CustomPrincipal(有和没有 AuthorizeAttribute)

我的 ASP.NET MVC4 Web 应用程序有一个自定义主体/身份。我还创建了一个 AuthorizeAttribute 来实例化我的自定义主体,将其分配给我需要身份验证的控制器中的 httpContext.User。

这对于用我的 AuthorizeAttribute 装饰的控制器/操作非常有用,但是,对于不需要身份验证的控制器(但如果它存在,仍然使用它),我想获得我的 CustomPrincipal (最好通过 HttpContext.User ) .

在这些未修饰的控制器/操作中,设置了 HttpContext.User,但使用的是 GenericPrincipal 而不是我的 CustomPrincipal。将 HttpContext.User 的默认设置“覆盖”到 GenericPrincipal 的最佳位置在哪里?

同样,如果在每个具有身份验证 cookie 的请求中都执行此操作,那么我将如何避免在 AuthorizeAttribute 装饰控制器的情况下执行两次工作(然后它将成为强制身份验证的控制器)。

为了清楚起见,我的网站允许匿名用户访问,但是在这些页面上,如果一个经过身份验证(并且实现了 CustomPrincipal),则提供了额外的功能。

我认为一些选项是(不确定每个选项背后的逻辑):

  • 使用会话(并处理逻辑来创建我需要的东西,忘记校长)
  • Application_AuthenticateRequest - 在网上看到评论说这是老派
  • 在基本控制器上设置的自定义过滤器
  • 在基本控制器上创建一个 AuthorizationAttribute,让每个人都可以通过并根据需要设置 HttpContext.User
  • IHttpModule - 这似乎是一种下降方式(除非其他人不同意,否则沿着这条路前进)。

想法?

0 投票
5 回答
6104 浏览

asp.net-mvc - 在 Web 层之外获取当前的 Principal

我有以下 ntier 应用程序:MVC > 服务 > 存储库 > 域。我正在使用表单身份验证。在我的 MVC 层之外使用 Thread.CurrentPrincipal 来获取我的应用程序的当前登录用户是否安全,或者我应该使用 HttpContext.Current.User 吗?

我问的原因是 Thread.CurrentPrincipal 似乎存在一些问题,但我谨慎地在 MVC 层之外添加对 System.Web 的引用,以防我将来需要提供非 Web 字体端。

更新

到目前为止,我一直在遵循收到的建议,将用户名作为被调用方法的参数的一部分传递到服务中,这导致了对我最初问题的改进。我需要能够检查用户是否在我的许多服务和域方法中处于特定角色。似乎有几个解决方案,只是想知道哪个是最好的方法:

  1. 将整个 HttpContext.Current.User 作为参数传递,而不仅仅是用户名。
  2. 在我的网络层之外调用 Thread.CurrentPrincipal 并使用它。但是如何确保它等于 HttpContext.Current.User?
  3. 坚持按照目前的建议传递用户名,然后使用 Roles.IsUserInRole。这种方法的问题是它需要一个对 System.Web 的引用,我觉得这在我的 MVC 层之外是不正确的。

你会建议我如何进行?

0 投票
1 回答
1445 浏览

asp.net-mvc - MVC 的 ActionExecutingContext HttpContext.User.Identity.IsAuthenticated 在多个浏览器选项卡上登录时返回 False

在自定义 ActionFilterAttribute 的 OnActionExecuting 方法期间,我们确保用户在执行某些操作之前仍处于登录状态。我们通过执行类似于此伪代码的操作来做到这一点:

我有多个站点,用于在同一域下运行的多个客户端,唯一的区别是虚拟目录名称。每个虚拟目录实际上都指向相同的文件夹/代码库,并且 URL/virdir 名称指示要使用嵌套 /Clients 目录中的“客户端配置文件”的代码。不确定是否需要站点/代码/IIS 配置中的那么多细节,但提供以防万一是问题的罪魁祸首。

如果我尝试使用浏览器的多个实例登录多个站点,一切正常。当我尝试在站点中导航时,IsAuthenticated 检查返回 true。

但是,如果我尝试使用具有多个选项卡的单个浏览器登录多个站点,我会不断地来回注销。如果我登录到站点 A,我可以四处导航,但是一旦我登录到站点 B,如果我尝试在站点 A 中的任何位置导航,IsAuthenticated 就会返回 false。

这是预期的行为吗?有解决方法吗?

更新:我现在只能在 IE 中重现这种行为。在 Firefox 和 Chrome 中,无论我在同一个浏览器/多个选项卡还是多个浏览器上,我都会被引导到登录屏幕。IE 处理 cookie 的方式有区别吗?还是饼干不是罪魁祸首?

0 投票
2 回答
792 浏览

asp.net-mvc - 为 MVC 会话扩展 Azure ACS 声明

我正在开发要在 Azure 中托管的 MVC 4 应用程序,并希望使用他们的 ACS 服务进行身份验证。用户通过身份验证后,我将使用生成的索赔详细信息与我的本地记录相关联。在此之后,我想扩展声明集以包括代表本地授权的其他声明,我的应用程序将用于授权决策。我假设我需要替换 Principle,但我不确定在 MVC 中的何处/何时执行此操作,并且希望避免破坏通常在整个会话生命周期中使用的任何身份验证管道。任何人都可以对此有所了解吗?

0 投票
1 回答
977 浏览

asp.net-mvc - 通过带有 SignalR 的 StructureMap 的选择性 IPrincipal 注入

StructureMap 配置为在任何 ASP.NET MVC Web 请求被请求HttpContext.Current.User时注入,如下所示:IPrincipal

但是,当我的 SignalR 集线器请求依赖于 的服务时IPrincipal,注入失败,因为HttpContext.Current它为空。相反,SignalR 已经有一个HubCallerContext公开当前IPrincipalvia的属性Context.User

如何将 StructureMap 配置为始终IPrincipal向 SignalR 集线器所依赖的服务注入有效值?