gpt4 book ai didi

asp.net - ASP .NET 中的 Thread.CurrentPrincipal.Identity - 使用安全吗

转载 作者:行者123 更新时间:2023-12-04 00:58:38 33 4
gpt4 key购买 nike

在我的 AuthenticateRequest 事件处理程序中,我设置了 Thread 的主体。这是我的 IHttpModule 的一部分:

    public void Init(HttpApplication context)
{
context.AuthenticateRequest += AuthenticateRequest;
}

private void AuthenticateRequest(object sender, EventArgs e)
{
var principal = CreatePrincipal();
HttpContext.Current.User = principal;
}

但是我有一个程序集,它不应该访问 System.Web,所以我不能使用 HttpContext.Current.User,但我需要访问当前主体。我的第一个想法是将我的方法更改为:
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = principal;

并在需要时使用 Thread.CurrentPrincipal。

但据我所知,将请求特定的内容存储在线程本地存储中是不安全的,因为多个线程可以处理相同的请求,所以我猜这与 相同。 Thread.CurrentPrincipal .还是不行?

最佳答案

我不同意 Jeff Moser 的回答。

标准的 .NET 授权内容都使用 Thread.CurrentPrincipal 工作。例如:

PrincipalPermissionAttribute
PrincipalPermission.Demand

此外,如果您配置 .NET RoleProvider,它将设置 Thread.CurrentPrincipal到与 HttpContext.User 相同的主体.

因此,这是执行此操作的标准方法,我会在您的自定义身份验证代码中执行相同的操作(或者甚至更好 - 将其实现为自定义 RoleProvider)。

至于异步 I/O, this blog post声明 Thread.CurrentPrincipal和文化设置会自动传递到新线程。

使用 Thread.CurrentPrincipal如果您的库将主体用于授权目的,则可以说更安全,因为不受信任的代码可以将主体作为参数传入,而 CAS 可能会阻止它设置 Thread.CurrentPrincipal .

关于asp.net - ASP .NET 中的 Thread.CurrentPrincipal.Identity - 使用安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19683635/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com