问题标签 [principal]

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 回答
7608 浏览

wcf - WCF 服务 - 自定义主体

在我的 WCF 服务类的构造函数中,我将当前主体设置为消息头中传递的主体:

这似乎工作正常,但是当我在方法中引用主体时,Thread.CurrentPrincipal 已恢复为 WindowsPrincipal。

大概该方法是在不同的线程上触发的。如何确保该方法使用服务构造函数中设置的主体?

0 投票
2 回答
3953 浏览

asp.net-mvc - ASP.NET MVC 中的自定义主体

我希望能够访问经过身份验证的用户(如 UserId 和 FirstName)的自定义属性,而无需每次都查询数据库。我通过 Stack Overflow 上的一篇文章找到了这个站点,我喜欢这种方法 - 但我使用 IoC / 存储库并决定不尝试让 global.asax 与数据库通信,因为担心它与存储库模式不兼容。

相反,我创建了一个到 CustomPrincipal 的接口,并使用 IoC (Castle) 创建一个实例并将其传递给控制器​​(随后传递给我的基本控制器)。

基本控制器使用我在 CustomPrincipal 中创建的方法来完成博客作者在 global.asax 中提出的相同任务。即,CustomPrincipal 从数据库或缓存中初始化并分配给 HttpContext.Current.User。

然后我的控制器/视图可以引用如下属性...

它有效,但我感觉到一些代码气味。首先也是最重要的,如果我从控制器中引用 HttpContext 我已经杀死了我的单元测试。我正在考虑修改我的 CustomPrincipal 对象以返回上述值(这样我就可以在我的单元测试中模拟它),但我想知道这是否是一种解决方法而不是一个好的解决方案。

我会以正确的方式解决这个问题吗?我可以做一些小的调整来使它成为一个强大的解决方案,还是我应该从头开始使用 FormsAuthenticationTicket 或类似的东西?

谢谢!

0 投票
1 回答
954 浏览

asp.net - 将经过 HTTP 身份验证的主体传递到另一个工作线程

我们的业务层服务器上有一个 Web 前端。

我们的 Web 应用程序中的某些页面会实例化非常长时间运行的任务(可能长达 10 多分钟)。处理这些请求的方式是这样的: -

(在 HTTP 请求线程上)

  • 我们连接到业务服务器。
  • 我们创建一个新线程来进行长时间运行的调用,并传入连接对象。
  • 然后 HTTP 请求完成,将句柄传回浏览器,
  • 浏览器会定期轮询 Web 服务器以获取有关长时间运行的任务进度的更新。

对业务服务器的所有请求都经过身份验证 - 连接的用户主体页面必须有权调用业务服务器上的方法。

只要我们的 Web 应用程序在经典模式下运行,这种机制就可以正常工作。当我们在管道模式下运行时,我们会在浏览器轮询时得到 ObjectDisposedExceptions。

问题似乎是用于建立连接的 windows 主体在原始请求结束时被释放(这是可以理解的 - 事实上我很惊讶代码完全可以工作!)。

作为解决此问题的一种方法,我想知道是否可以创建 HTTP 请求主体的副本并使用它来创建连接(并在长时间运行的任务完成时将其丢弃),或者是否可以模拟主体处理后,工作线程上的HTTP请求原理?

更新

(我在 Aliostad 的问题下的评论是不正确的:测试页面确实失败了。我设法让自己感到困惑,以至于我编写了我的测试页面,因此它没有使用与真实(错误)代码相同的代码路径。没关系!)

我已经为这个问题编写了一个“解决方法”: - 我很幸运地知道在调用业务服务器之前业务服务器逻辑将查询哪些角色/组。因此,我的解决方法是根据请求的主体在这些角色中的成员身份创建一个新的通用主体。长时间运行的任务使用通用主体运行。

我对这种解决方法不是 100% 满意,因为它在很大程度上是一种“黑客行为”——即我可以看到,如果某些逻辑(非常明智)检查验证主体的身份是否经过身份验证,它很容易崩溃。

因此,我仍然非常感谢对此问题的任何帮助/见解。

谢谢

0 投票
1 回答
8382 浏览

.net - .NET 控制台应用程序中的 Thread.CurrentPrincipal

这是我在命令提示符下运行的一个简单的控制台应用程序:

输出是 'GenericPrincipal' 和空字符串作为身份名称。为什么运行时构造GenericPrincipal而不是WindowsPrincipal?我如何强制它WindowsPrincipal从启动进程的安全令牌(在我的情况下为 cmd.exe)构建?

0 投票
1 回答
2385 浏览

c# - 应用域级别模拟

我正在开发一个需要将插件加载到单独的子应用程序域的应用程序。只有一个插件加载到一个子应用程序域中。每个插件都需要不同的 Windows 标识,并且这些标识与默认(父)应用程序域中使用的 Windows 标识不同。每个插件加载一个或多个其子插件。

例如,默认应用程序域的身份是Authority\Limited(Authority 是域名或机器名)。两个插件被加载到两个子应用程序域中。加载的插件的身份是Authority\Privileged1Authority\Privileged2Authority\Privileged1Authority\Privileged2分别拥有对数据库Database1Database2的所有必要访问权限,而Authority\Limited无权访问任何上述数据库。

创建子应用程序域时,我调用System.AppDomain.SetThreadPrincipal方法传递System.Security.Principal.WindowsPrincipal实例。该实例是从System.Security.Principal.WindowsIdentity实例创建的,该实例是从重复的用户令牌创建的(请参阅http://support.microsoft.com/kb/306158)。我省略了对WindowsIdentity.Impersonate方法的调用,因为我在创建WIndowsPrincipal实例时处于默认应用程序域中。

我希望设置应用程序域线程主体足以使加载的插件成功登录到各自的数据库并执行一些 T-SQL 语句。令我惊讶的是,在打开与数据库的连接时使用了WindowsIdentity.GetCurrent()方法返回的值。该方法返回的值是进程身份或模拟身份。

由于进程标识没有使用数据库所需的权限,因此它是不可接受的。因此,必须冒充。但是,模拟必须仅在子应用程序域中进行。每个插件都公开了用于执行插件加载和卸载的方法。我知道我必须在开始时执行模拟,并在这些方法结束时撤消模拟。但是,也必须对子应用程序域中生成的所有线程进行模拟。由于每个插件都会加载一个或多个子插件,并且每个插件都可能产生一个或多个线程,因此必须在许多地方执行模拟,这看起来很混乱。

是否可以只执行一次模拟以影响在子应用程序域中生成的所有线程?

0 投票
2 回答
5556 浏览

spring-security - 获取用户主体的自定义属性

我有一个自定义用户详细信息对象,其中包含名字部分。下面的用户名有效,但我想要第二个类似的东西。如何访问此自定义属性?

0 投票
1 回答
2413 浏览

c# - 身份验证/PrincipalPermission 不起作用

我在 WCF 工作,正在编写基于它的身份验证管理器,IHttpModule它工作正常。我的Authentication类中的方法之一GenericPrincipalContext.User.

例如

Service我想分配用户的一种方法中PrincipalPermissionAttribute,我不知道它应该如何工作,但它总是抛出一个SecurityException. 例如:

也许PrincipalPremissionAttribute不使用Context.Current.User?但如果不是,那又如何?

我尝试删除问题,并制作了一个非常简单的属性

但是应用程序不能使用它。我的意思是,当我在MyAttribute构造函数上设置断点时,编译器不会在断点处停止,它看不到它。

0 投票
1 回答
1537 浏览

simulation - 像box2d/bullet3d这样的*连续物理模拟*的基本思想是什么?

游戏或图形行业中的传统物理模拟基本上是离散的。但是现在的引擎如 box2d 或 bullet3d 实现了连续的物理模拟。我知道离散模拟的基本原理,但我不知道连续模拟。这对我来说很神奇,使用魔法既困难又危险。所以我想通过理解它们来把魔法变成工具。

所以我想知道:(1)这些连续物理模拟的基本思想和实现原理是什么?(2) 这个想法可以推广到其他类型的离散模拟吗?请让我明白这一点!

0 投票
1 回答
4819 浏览

multithreading - 将自定义主体和身份与 WCF 服务一起使用时出现问题

我们正在使用自定义主体和身份类型(ProdigyPrincipal/ProdigyIdentity),因为我们需要在我们的程序和服务中提供额外的信息。在程序中我们设置了主体和身份。与 WCF 服务通信时,设置了主体和标识,但在转换为我们自己的类型后,主体和标识为空。

我注意到在调试模式和单元测试模式下运行是有区别的。在调试模式下,主体和身份的类型为WindowsPrincipalWindowsIdentity类型。在单元测试模式下,类型是 GenericPrincipal 和 GenericIdenity。在这两种情况下,当转换为自定义类型时,值都是空的。

主体/身份的设置和获取是通过Thread.CurrentPrincipal完成的。在绑定部分的 App.configs 中,安全模式设置为“传输”。

用于设置/获取主体和身份的功能:

有谁知道为什么无法从Thread检索自定义主体和身份类型?

亲切的问候,汉斯

0 投票
2 回答
2467 浏览

java - 注销后如何清除用户主体?

案例很简单:用户单击注销,转到 LogoutFilter 并:

并在页面上显示登录链接。问题很简单:会话重新创建,但用户主体已被缓存,因此没有显示登录弹出窗口并且应用程序使用缓存的主体,因为 request.getUserPrincipals() 返回非空对象。

问题很简单:有没有办法删除用户主体,所以浏览器在注销后要求再次登录?