我正在开发一个具有混合身份验证(基于Owin Token和Windows身份验证(的Web应用程序。我已经实现了基于Owin令牌的身份验证,并希望为标记为活动目录用户的用户实施Windows身份验证。
在 Owin 中间件中,我想获取请求用户的窗口用户名。我在OwinContext.Request.User.Identity中获取对象。但是,OwinContext.Request.User.Identity.Name 始终为空字符串。
我发现我应该在启动中添加以下行.cs:
var listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
但是,我得到的密钥未找到异常。"System.Net.HttpListener"在属性数组中不存在。我已经安装了Microsoft.Owin.SelfHost,Microsoft.Owin.Host.HttpListener。但是,我仍然收到错误。
任何帮助将不胜感激。
谢谢国标
问题是该项目是作为共享库启动的,而不是 Web 应用程序。
解决方案是在<ProjectGuid>
行之后在.cspro文件中添加一行。
<ProjectTypeGuids>{349C5851-65DF-11DA-9384-00065B846F21};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
然后,您无需显式添加 HttpListener,只需重新加载项目并从属性版本部分开始按照此说明进行操作即可。在Katana中启用Windows身份验证
您可以通过相同的方式访问主体:
在 OWIN 中间件中获取用户:
public async Task Invoke(IDictionary<string, object> env)
{
OwinContext context = new OwinContext(env);
WindowsPrincipal user = context.Request.User as WindowsPrincipal;
//...
}
在 Web API 控制器中获取用户:
// In a web api controller function
WindowsPrincipal user = RequestContext.Principal as WindowsPrincipal;
UPD:Visual Studio 项目 GUID 列表