.NET Web Api 2 UserPrincipal.IsAuthenticated 使用依赖项注入时始终为 false (Unity)

.NET Web Api 2 UserPrincipal.IsAuthenticated always false when using dependency injection (Unity)

我有一个自定义授权属性,它验证 header 内的令牌并设置 user-principal.

 //when token is validated
var userIdentityBase = new UserIdentityBase(token); <-- Inherited GenericIdentity
IPrincipal principal = new GenericPrincipal(userIdentityBase, null);

actionContext.Request.GetRequestContext().Principal = principal;
HttpContext.Current.User = principal;
Thread.CurrentPrincipal = principal;

当我在控制器中检查身份时,这工作正常

但是当我将 IPrincipal 注入我的服务时 类,它不再工作了。 IsAuthenticated 为假。

Unity 设置代码:

 container.RegisterType<IPrincipal>(new InjectionFactory(u => HttpContext.Current.User));

注入后,它不起作用(两个屏幕截图都是在同一请求下截取的):

有什么建议吗?

我已经通过创建自己的接口和实现解决了这个问题,这将在运行时提取用户身份。对我的情况来说就像一个魅力

界面

public interface IIdentityProvider
{
   IPrincipal GetPrincipal();
}

实施:

public class IdentityProvider : IIdentityProvider
{
    public IPrincipal GetPrincipal()
    {
        return HttpContext.Current.User;
    }
}

统一注册:

container.RegisterType<IIdentityProvider, IdentityProvider>();

和用法:

IIdentityProvider _identityProvider;
public BookingRecordService(IIdentityProvider identityProvider)
{
    _identityProvider = identityProvider;

    var isAuth = _identityProvider.GetPrincipal().Identity.IsAuthenticated;
}

RequestContext.Principal.Identity.IsAuthenticated