具有 OWIN 自主机和 Windows 身份验证的 Web Api
Posted
技术标签:
【中文标题】具有 OWIN 自主机和 Windows 身份验证的 Web Api【英文标题】:WebApi with OWIN SelfHost and Windows Authentication 【发布时间】:2015-11-11 21:05:47 【问题描述】:我有一个控制台应用程序 SERVER,它使用 OWIN 自托管托管 WebApi 控制器,并在名为“ServiceTest1”的自定义帐户下运行。
在同一台机器上,我有另一个控制台应用程序 CLIENT,它在帐户“ServiceTest2”下运行,我想在 SERVER 中捕获“ServiceTest2”调用控制器操作。然而:
WindowsIdentity.GetCurrent()
始终是“ServiceTest1”。
Thread.CurrentPrincipal
是未经身份验证的 GenericIdentity
。
RequestContext.Principal
为空。
User
为空。
我需要做什么才能让这个 WebApi OWIN 自托管以获取调用者的 Windows 身份?
【问题讨论】:
【参考方案1】:您的问题有点不清楚您是如何实现 Windows 身份验证的。
启用 Windows 身份验证:
public class Startup
public void Configuration(IAppBuilder app)
HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
// ...
在 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;
【讨论】:
env
参数是什么?我有从 ApiController
继承的普通 WebApi 控制器。
啊,我读过你的问题是想要一种 OWIN 方法来获取身份。我还使用 Web API 版本编辑了我的回复。
RequestContext.Principal
为空,知道为什么吗?
它是通过 Windows 身份验证运行的吗?当您从 ServiceTest2 访问 api 时,它必须使用 Windows 凭据登录?除此之外,我不确定。我的服务器在使用 Windows Auth 的 Owin 自主机上运行似乎能够访问请求主体。
这就是问题所在,如何在使用 OWIN 自托管的 WebAPI 中设置 Windows 身份验证。您是如何配置 Windows 身份验证的?以上是关于具有 OWIN 自主机和 Windows 身份验证的 Web Api的主要内容,如果未能解决你的问题,请参考以下文章
Owin 和 Windows 身份验证 (mvc5) - 使用 Windows 身份验证作为登录的一部分
具有混合身份验证 JWT 和 SAML 的 ASP.NET Web API 2.2 OWIN