C#Web API 2收集有关Windows身份验证用户的其他信息

时间:2018-02-01 21:24:48

标签: c# authentication asp.net-web-api2 windows-authentication

我正在为Intranet应用程序开始Web API Web服务。我们将要求IIS级别的Windows身份验证,我可以成功从HttpContext.Current.User.Identity.Name获取用户名。我们在应用程序数据库中存储有关用户的其他信息,我需要抓取这些信息并将其添加到某个地方的请求中(如果不是实际的请求对象,那么控制器可以访问的其他地方)。

我的想法是在请求通过身份验证后立即运行数据库查询来捕获此信息,并使用我需要的其他信息创建AppUser对象。

问题是这个行动应该在哪里执行?我在搜索时看到了几件事,但我不确定合适的地方 - 这是我第一次涉足Web API。

  • Global.asax Application_PostAuthenicateRequest - 这似乎更多的是在应用程序级别 - 而不是单个请求级别
  • AuthenticationFilter - 这似乎更侧重于自定义身份验证
  • 主控制器 - 子类ApiController并创建一个主控制器,所有其他控制器继承该控制器 - 并将一些方法添加到此主控制器中以完成工作

我相信可能有超过1种“正确”的方式,但正在寻找有关该主题的一些最佳做法/指导。

修改

我还希望能够使用来自数据库的信息(存储在AppUser对象中)来处理[Authorize]属性中的逻辑(通常是授权,管理员角色等) )。

1 个答案:

答案 0 :(得分:1)

一般情况下,您应该在实际需要时获取此信息,我个人更喜欢在基本控制器(主控制器)上使用方法或属性AppUser,此方法/属性将抽象检索所有详细信息来自数据库的用户数据,确保在缓存服务中甚至在正在运行的控制器实例的内存中缓存从数据库返回的数据,如下所示

 public class BaseApiController : ApiController
{
    private AppUser appUser = null;
    protected AppUser CurrentUser
    {
        get
        {
            if(appUser==null)
                appUser=LoadUserInfo();
            return appUser;
        }
    }
}
相关问题