问题标签 [current-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 投票
4 回答
8383 浏览

c# - 使用 async/await 设置 Thread.CurrentPrincipal

下面是我尝试在异步方法中将 Thread.CurrentPrincipal 设置为自定义 UserPrincipal 对象的简化版本,但自定义对象在离开等待后丢失,即使它仍在新的 threadID 10 上。

有没有办法在等待中更改 Thread.CurrentPrincipal 并稍后使用它而不传递或返回它?或者这是不安全的,不应该是异步的?我知道有线程更改,但认为 async/await 会为我处理同步。

0 投票
1 回答
1380 浏览

asp.net - Thread.CurrentPrincipal 使用 OWIN 身份验证和 Web API 是否可靠?

在 MVC5 之前,我听说过/能够重现过去使用异步操作时 Thread.CurrentPrincipal 并不总是正确设置的问题。这是一篇讨论该问题的博客文章:http ://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx

现在,我已经使用 .NET 4.5.2 上的 OWIN 中间件在一个新的 Web API 项目中设置了身份验证(使用令牌身份验证提供程序)。Web API 的控制器主要由调用另一个业务层程序集的异步操作组成。我想使用 ClaimsPrincipalPermission 属性来保护对该程序集方法的调用。此属性与检查访问权限的 ClaimsAuthorizationManager 一起使用。我假设在幕后这使用了 Thread.CurrentPrincipal,所以我怀疑我是否会遇到 Thread.CurrentPrincipal 与原始 Web API 调用者不匹配的问题。

我可能会遇到同样的问题吗?到目前为止,我还没有复制它,但我不相信这个问题实际上已经解决了。我认为我更有可能只是还无法重现仍然存在的问题。

参考:

https://msdn.microsoft.com/en-us/library/system.identitymodel.services.claimsprincipalpermissionattribute(v=vs.110).aspx

http://dotnetcodr.com/2013/02/21/introduction-to-claims-based-security-in-net4-5-with-c-part-4-authorisation-with-claims/

0 投票
1 回答
499 浏览

c# - 通过 OWIN AuthenticationManager.SignIn 添加 ClaimsIdentity 不起作用

我确实创建AuthorizeAttribute了应该处理 Jwt Bearer 令牌的自定义,然后创建ClaimsIdentity. 但是当我再次发送请求时,无论如何我看不到授权用户,必须再次创建ClaimsIdentity并再次添加用户CurrentPricipal。我做错了什么?

0 投票
1 回答
177 浏览

c# - System.Threading.Thread.CurrentPrincipal 是否在所有用户之间共享?

我打算使用 currentprincipal 并且我搜索了该属性是 static ,所以它必须是共享的,实际上我需要它是不同的而不是共享的。当我编写一些代码时,我看到 2 个用户登录应用程序后 currentprincipal 不同,对吗,我可以确定属性不同吗?实际上我的用户登录到应用程序并通过 WCF 调用我的函数!如果我的解释不够,请让我澄清一下,谢谢

0 投票
0 回答
36 浏览

c# - IErrorHandler.ProvideFault 中的 CurrentPrincipal 是否为空?

我创建了一个 IErrorHandler 来处理 WCF 服务中的所有异常。问题是,一旦我使用 ProvideFault 方法,Thread.CurrentPrincipal 就为空?它在服务方法中设置得很好吗?

在 IAuthorizationPolicy.Evaluate 中根据 IncomingMessageHeader 设置评估上下文.Properties["Principal"]。

我怀疑 IErrorHandler.ProvideFault 是在另一个线程上执行的。

有什么方法可以将 Thread.CurrentPrincipal 的值传递给 IErrorHandler.ProvideFault?

0 投票
0 回答
59 浏览

iis - 使用 Thread.CurrentPrincipal 与 HttpContext.Current.User 的身份

我知道这个话题在这里可能有一些重复的问题,但我仍然感到困惑。我对Thread.CurrentPrincipal.IdentityHttpContext.Current.User.Identity有一个非常奇怪的情况。

我有一个 userIdentity.cs 类,我依赖于从我的令牌中获取当前活动用户。最初我的应用程序是托管在 IIS 上的 2 个单独虚拟机上的 MVC 应用程序。我使用Thread.CurrentPrincipal.Identity从令牌声明中检索当前用户,我没有遇到任何问题。但是,我已经更新了代码以与内置的 SPA 应用程序兼容。更新后,Thread.CurrentPrincipal.Identity不再工作,所以我不得不做一个后备计划并调用HttpContext.Current.User.Identity来检索索赔。所以用户身份类更新为如下:

该解决方案在开发环境(在 MVC 和 SPA 上)上完美运行。

然而,在将此解决方案部署到生产环境后,MVC 托管在 2 个虚拟机上,同时拥有大量用户,索赔开始以错误的方式返回。用户 ID 搞砸了,返回了错误的数据。在调试它时,我无法重现该案例。当删除HttpContext.Current.User.Identity 作为 ClaimsIdentity作为后备解决方案时,事情就像一个魅力;

如果有人可以向我解释 Thread.CurrentPrincipal 和 Current.User 之间的主要区别,那就太好了。

另外,如何正确实现与 MVC 兼容的解决方案并响应 SPA 应用程序?

抱歉发了这么长的帖子,提前谢谢你,

0 投票
1 回答
46 浏览

c# - .net core 5.0 CurrentPrincipal 重置值

我有一个 .net core 5.0 应用程序,它需要额外的证书验证,并且基于证书我在 db 中获得了某些角色。我将这些作为声明存储在 Thread.CurrentPrincipal 或 HttpContext.User 中。但是当调用到达控制器时,它们都会恢复它们的默认值。

这是 Startup.cs

这是 Program.cs

是否有理由不存储声明?有解决方法吗?

编辑:设置Thread.CurrentPrincipal Before的图像。Thread.CurrentPrincipal控制器 中的值的图像After