gpt4 book ai didi

c# - 在.NET中,System.Threading.Thread.CurrentPrincipal对于不同的线程是一样的

转载 作者:行者123 更新时间:2023-11-30 15:31:56 26 4
gpt4 key购买 nike

我正在寻找一些通用方法来为不同的用户在服务器端存储我的 JWT token 。我决定将该数据存储在 Thread.CurrentPrincipal 中。但是当我测试它时,我发现不同的客户端可以访问同一个线程。

模拟几个客户端,访问我测试过的wcf服务:

private static void Main(string[] args)
{
List<Thread> threads = new List<Thread>();
for (int i = 0; i < 20; i++)
{
var program = new Program();
threads.Add(new Thread(program.DoWork));
}
foreach (var thread in threads)
{
thread.Start();
}
Console.ReadLine();
}

public void DoWork()
{
var client = new AuthenticationClient();
ClaimsPrincipal claimsPrincipal;
var _jwtTokenProvider = new JwtTokenProvider();
Console.WriteLine(client.Connect());
for (int i = 0; i < 40; i++)
{
var result = client.SignIn();
_jwtTokenProvider.ValidateToken(result, out claimsPrincipal);
Console.WriteLine(result);
}
}

并测试服务的方法:

public string Connect()
{
Thread.Sleep(300);
foreach (var identity in ((ClaimsPrincipal)Thread.CurrentPrincipal).Identities)
{
var token = identity.Claims.FirstOrDefault(t => t.Type == "token");
if (token != null)
{
throw new FaultException<STSFault>(new STSFault(ExceptionsMessages.Message, ErrorCodes.EmptyCredentials), new FaultReason(ExceptionsMessages.Message));
}
}

var claimsPrincipal = new ClaimsPrincipal();
List<Claim> claims = new List<Claim>();
claims.Add(new Claim("token", "token"));
var claimIdentity = new ClaimsIdentity(claims);
claimsPrincipal.AddIdentity(claimIdentity);
Thread.CurrentPrincipal = claimsPrincipal;
foreach (var identity in ((ClaimsPrincipal)Thread.CurrentPrincipal).Identities)
{
var token = identity.Claims.FirstOrDefault(t => t.Type == "token");
}
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}

我不明白为什么会抛出 FaultException。谢谢。

最佳答案

这叫做 execution context .当您创建这些线程时,它们会从应用程序的主线程“继承”Principal。

主线程中的主体代表您的应用运行所依据的用户。

看看this问题。

关于c# - 在.NET中,System.Threading.Thread.CurrentPrincipal对于不同的线程是一样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856841/

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