如果 Windows 组的一部分,则 OWIN 自托管 IAppBuilder 映射

OWIN self-host IAppBuilder map if part of Windows group

我有以下设置:

自托管 OWIN 服务器(Windows 服务)。在 OWIN 启动 class 中,我将 httpListener 配置为仅允许 Windows 身份验证。这行得通。

...
HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

this.ConfigureSomeApp();
...

private void ConfigureSomeApp()
{
    app.Map("/someapp", someApp => { //appconfig here, ommitted for brevity };
}

我想要实现的是仅根据有关当前用户的某些条件映射 "someapp"(即,如果用户是指定 Windows 组的成员)。

我似乎找不到如何执行此操作。这可能吗 ?类似于:

private void ConfigureSomeApp()
{
    if(currentuser is in windowsgroup) //pseudo example condition I want to achieve
        app.Map("/someapp", someApp => { //appconfig here, ommitted for brevity };
}

如果在启动过程中无法做到这一点 class,对于如何实现这一点,您还有哪些其他建议?

有关信息:我不控制 "someapp" 实现,它来自 NuGet 包

这不是正确的方法

{
    if(currentuser is in windowsgroup) //pseudo example condition I want to achieve
        app.Map("/someapp", someApp => { //appconfig here, ommitted for brevity };
}

因为 ConfigureSomeApp 方法在启动和启动时仅 运行 一次,因此您的 if 语句不会对每个请求 运行。

你必须使用app.MapWhen

app.MapWhen(context =>
        {
            // check the logic for user
            //context.Authentication.User

            return true; // return true if you want to map for this request
        }, someapp => /*config someapp*/);