C# 使用ASP.NET Core RC2和JWT设置和访问自定义主体

C# 使用ASP.NET Core RC2和JWT设置和访问自定义主体,c#,asp.net-core,claims-based-identity,C#,Asp.net Core,Claims Based Identity,我正在创建一个新的ASP.Net核心RC2 API项目,并使用JWT承载令牌。我在创建和使用令牌进行身份验证时没有遇到任何问题。我有一个实体框架dbContext。此上下文还用于各种其他解决方案。db上下文执行一些额外的审计日志记录工作,我希望有一个自定义主体,或者至少是来自令牌的声明。我可以看到http上下文上的声明,但稍后构建dbContext时,它们不在线程上 在Startup.cs中: services.AddTransient(typeof(ApiContext), (_) =>

我正在创建一个新的ASP.Net核心RC2 API项目,并使用JWT承载令牌。我在创建和使用令牌进行身份验证时没有遇到任何问题。我有一个实体框架dbContext。此上下文还用于各种其他解决方案。db上下文执行一些额外的审计日志记录工作,我希望有一个自定义主体,或者至少是来自令牌的声明。我可以看到http上下文上的声明,但稍后构建dbContext时,它们不在线程上

在Startup.cs中:

services.AddTransient(typeof(ApiContext), (_) => new ApiContext(Configuration["Data:SqlConnection"]));

在ClaimsAuthorizationFilter中:

ClaimsIdentity identity = context.HttpContext.User.Identity as ClaimsIdentity;
标识显示了所有的声明。线程上的现有主体及其标识是泛型的,没有声明。我可以使用上下文用户对象中的标识来创建新主体并将其附加到当前线程

var auditPrincipal = new AuditPrincipal(
    identity,
    new AuditUser()
    {
...
        }
        );

   System.Threading.Thread.CurrentThread.Name = "authorized";
   System.Threading.Thread.CurrentPrincipal = auditPrincipal;
唉,在dbContext构造函数(在上面的代码之后调用)中,我只看到一个泛型主体,没有对标识的声明。我确实看到线程名称是我之前设置的名称

ClaimsIdentity identity = System.Threading.Thread.CurrentPrincipal.Identity as ClaimsIdentity;
如何确保在对dbContext进行授权后,可以使用正确的委托人/索赔标识

ClaimsIdentity identity = System.Threading.Thread.CurrentPrincipal.Identity as ClaimsIdentity;