OWIN静态文件安全性

时间:2014-11-26 22:57:03

标签: azure asp.net-web-api single-page-application owin

我正在构建一个SPA,它将位于一个WebAPI / OWIN应用程序(将托管在IIS中),该应用程序当前没有MVC组件,而/路径将只是{{1 }}

整个站点需要您先登录Azure AD,然后才能执行任何操作,然后我们会将持有者令牌传递给所做的WebAPI调用。

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

3 个答案:

答案 0 :(得分:3)

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

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

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

然后,根据this stackoverflow answer,将以下代码放在您的身份验证中间件(或上述代码之类的身份验证代码)和您要保护的组件之间。它将检查以确保每个请求都经过身份验证。

    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 :(得分:1)

我没有对此进行测试,但这是我首先尝试的,所以我希望它能让你走上正轨。

  • 配置您的应用,以便OWIN通过StaticFilesMiddleware提供所有静态文件。 This article talks about how to do that

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

答案 2 :(得分:0)

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