【问题标题】:No IPrincipal user information in controller控制器中没有 IPrincipal 用户信息
【发布时间】:2015-10-28 10:28:46
【问题描述】:

我有一个基本的 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 用户名的文本表示 - 但没有校长。下面的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");
            }
        }

【问题讨论】:

    标签: c# authentication model-view-controller asp.net-web-api


    【解决方案1】:

    仅供参考,我实际上发现了问题。如果您进入 Web API 项目的属性面板(不是右键单击 -> 属性),即只是 csproj 文件的属性面板,那么那里有启用 Windows 身份验证和禁用匿名身份验证的选项。这有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多