.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
我有一个自定义授权属性,它验证 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