【问题标题】:WebApi with OWIN SelfHost and Windows Authentication具有 OWIN 自主机和 Windows 身份验证的 Web Api
【发布时间】: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 身份?

【问题讨论】:

    标签: asp.net-web-api owin windows-authentication self-hosting


    【解决方案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 身份验证的?
    猜你喜欢
    • 2018-06-03
    • 2016-12-31
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多