OWIN静态文件安全

问题描述 投票:0回答:3

我正在构建一个 SPA,它将位于 WebAPI/OWIN 应用程序(将托管在 IIS 中)中,该应用程序目前没有 MVC 组件,并且

/
路线将只是
index.html

整个网站需要您登录 Azure AD,然后才能执行任何操作,然后我们会将不记名令牌传递给进行的 WebAPI 调用。

如何使对静态文件(或至少每个 HTML 文件)的每个请求都要求您登录?

c# asp.net-web-api single-page-application owin
3个回答
4
投票

我会告诉你我是如何做到的,以及它对我来说如何有效。

我正在使用 Windows 身份验证,以下是我的配置方法:

OwinHttpListener listener = appBuilder.Properties[typeof(OwinHttpListener).FullName] as OwinHttpListener;
listener.Listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

然后,根据这个 stackoverflow 答案,将以下代码放在您的身份验证中间件(或像上面代码一样的身份验证代码)和您想要保护的组件之间。它将检查以确保每个请求都经过身份验证。

    app.Use(async (context, next) =>
    {
        var user = context.Authentication.User;
        if (user == null || user.Identity == null || !user.Identity.IsAuthenticated)
        {
            context.Authentication.Challenge();
            return;
        }
        await next();
    });

1
投票

我还没有测试过这个,但这是我首先尝试的,所以我希望它能让你走上正确的道路。

  • 配置您的应用程序,以便 OWIN 通过

    StaticFilesMiddleware
    提供所有静态文件。 这篇文章讲述了如何做到这一点

  • 在注册静态文件中间件(使用

    .UseStaticFiles
    扩展方法)之前,创建并注册您自己的
    RequireAuthenticationMiddleware
    ,以检查请求是否经过身份验证,如果未经过身份验证,则返回适当的响应(401、403 或其他) 。配置 OWIN Auth 中间件后,您需要注册此
    RequireAuthenticationMiddleware
    ,以便身份验证详细信息位于 OWIN 上下文中。


0
投票

我还没有尝试使用 OWIN 中间件,但您总是可以回退到使用 HTTP 模块来检查您的身份验证 cookie 或不记名令牌是否存在?

© www.soinside.com 2019 - 2024. All rights reserved.