ServiceStack - 防止未经授权访问静态文件

时间:2014-02-22 20:39:53

标签: authentication static authorization servicestack

我知道处理服务身份验证/授权的方法不止一种,但我无法使其适用于静态文件。

是否有一种方法可以将行为配置为与服务相同;如果没有经过身份验证,对index.html的请求应该重定向到登录页面,就像对安全dto / service的请求一样。

我目前正在研究RawHttpHandlers,但由于它在管道中还为时过早,如何在apphost配置中获得身份验证设置?

提前谢谢 Gjergji

1 个答案:

答案 0 :(得分:1)

您必须使用IAppHost.RawHttpHandlers,因为这是ServiceStack's Request Pipeline中唯一一个在访问内置静态文件处理之前执行的自定义处理程序。

但您仍然可以使用可用的扩展方法访问用户会话,例如:

this.RawHttpHandlers.Add(httpReq =>
{
    var isStaticFileRequest = httpReq.PathInfo.StartsWith("/static");
    if (isStaticFileRequest)
    {
        var session = httpReq.GetSession();
        if (!session.HasRole("TheRole"))
            return new ForbiddenHttpHandler();
    }
    return null;
});

此处理程序只检查它是否是对静态文件的请求,在这种情况下,路径信息以/static开头,如果是,则检查用户会话是否具有所需角色,否则返回Forbidden请求,否则返回null告诉ServiceStack继续执行请求。

注意:如果需要,您可以使用 HostContext.Resolve 访问ServiceStack外部的任何已注册的依赖项,例如:

var authRepo = HostContext.Resolve<IAuthRepository>();