我有一个基本的Web API服务,其控制器继承自ApiController。我已经读过,我应该能够利用ApiController.User来获取当前经过身份验证的用户IPrincipal用户对象。但是,当我在构造函数中尝试以下操作时,User为空,没有Principal详细信息。
[InjectionConstructor]
public CloudConfigValueController(IDataModelConverter dataModelConverter, IBusinessModelConverter businessModelConverter, ILogger logger)
{
var u = User;
_businessModelConverter = businessModelConverter;
_dataModelConverter = dataModelConverter;
_logger = logger;
}
我的web.config
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
那么为什么我的控制器中没有身份信息?
注意:出于兴趣,我还尝试使用属性来验证API控制器的入口,我发现如果深入挖掘多层对象,我可以找到我的Windows用户名的文本表示 - 但是没有IPrincipal的。下面的identity.Name包含用户名
public override void OnAuthorization(HttpActionContext actionContext)
{
var wrapper = actionContext.ControllerContext.Request.Properties["MS_HttpContext"] as HttpContextWrapper;
if (wrapper == null)
{
Log.InfoFormat("Could not get http context.");
throw new AuthenticationException("Could not get authorization context");
}
var identity = wrapper.Request.LogonUserIdentity;
if (identity == null)
{
Log.InfoFormat("Could not disover identity");
throw new AuthenticationException("Could not get users identity");
}
}
答案 0 :(得分:0)
仅供参考我真的发现了这个问题。如果您转到Web API项目的属性面板(不是右键单击 - &gt;属性),即只是csproj文件的“属性”面板,那么可以使用选项启用Windows身份验证并禁用匿名身份验证。这工作